From f6309dd53d46188a7fee8027a978369e3704ac84 Mon Sep 17 00:00:00 2001 From: Nicole Marino Date: Wed, 6 Jul 2016 16:41:19 -0600 Subject: [PATCH 01/11] finished 0, moving to one --- .gitignore | 34 ++++++++++++++ Gemfile.lock | 45 +++++++++---------- app/models/ip.rb | 3 ++ app/models/payload_request.rb | 2 + app/models/url.rb | 3 ++ .../20160706213537_create_payload_requests.rb | 15 +++++++ db/migrate/20160706214336_create_urls.rb | 7 +++ db/migrate/20160706221548_create_ip_table.rb | 7 +++ db/schema.rb | 38 ++++++++++++++++ test/models/ip_test.rb | 10 +++++ test/models/url_test.rb | 9 ++++ 11 files changed, 150 insertions(+), 23 deletions(-) create mode 100644 app/models/ip.rb create mode 100644 app/models/payload_request.rb create mode 100644 app/models/url.rb create mode 100644 db/migrate/20160706213537_create_payload_requests.rb create mode 100644 db/migrate/20160706214336_create_urls.rb create mode 100644 db/migrate/20160706221548_create_ip_table.rb create mode 100644 db/schema.rb create mode 100644 test/models/ip_test.rb create mode 100644 test/models/url_test.rb diff --git a/.gitignore b/.gitignore index 8dd09614..71ff0290 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,35 @@ capybara*.html +\# Compiled source # +################### +*.com +*.class +*.dll +*.exe +*.o +*.so +# Packages # +############ +# it's better to unpack these files and commit the raw source +# git has its own built in compression methods +*.7z +*.dmg +*.gz +*.iso +*.jar +*.rar +*.tar +*.zip +# Logs and databases # +###################### +*.log +*.sql +*.sqlite +# OS generated files # +###################### +.DS_Store +.DS_Store? +._* +.Spotlight-V100 +.Trashes +ehthumbs.db +Thumbs.db diff --git a/Gemfile.lock b/Gemfile.lock index 05aef662..88317ed7 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,42 +1,41 @@ GEM remote: https://rubygems.org/ specs: - activemodel (4.2.5.1) - activesupport (= 4.2.5.1) - builder (~> 3.1) - activerecord (4.2.5.1) - activemodel (= 4.2.5.1) - activesupport (= 4.2.5.1) - arel (~> 6.0) - activesupport (4.2.5.1) + activemodel (5.0.0) + activesupport (= 5.0.0) + activerecord (5.0.0) + activemodel (= 5.0.0) + activesupport (= 5.0.0) + arel (~> 7.0) + activesupport (5.0.0) + concurrent-ruby (~> 1.0, >= 1.0.2) i18n (~> 0.7) - json (~> 1.7, >= 1.7.7) minitest (~> 5.1) - thread_safe (~> 0.3, >= 0.3.4) tzinfo (~> 1.1) addressable (2.4.0) - arel (6.0.3) + arel (7.0.0) bond (0.5.1) - builder (3.2.2) - capybara (2.6.2) + capybara (2.7.1) addressable mime-types (>= 1.16) nokogiri (>= 1.3.3) rack (>= 1.0.0) rack-test (>= 0.5.4) xpath (~> 2.0) + concurrent-ruby (1.0.2) i18n (0.7.0) - json (1.8.3) launchy (2.4.3) addressable (~> 2.3) - mime-types (3.0) + mime-types (3.1) mime-types-data (~> 3.2015) - mime-types-data (3.2015.1120) - mini_portile2 (2.0.0) - minitest (5.8.4) - nokogiri (1.6.7.2) - mini_portile2 (~> 2.0.0.rc2) + mime-types-data (3.2016.0521) + mini_portile2 (2.1.0) + minitest (5.9.0) + nokogiri (1.6.8) + mini_portile2 (~> 2.1.0) + pkg-config (~> 1.1.7) pg (0.18.4) + pkg-config (1.1.7) rack (1.6.4) rack-protection (1.5.3) rack @@ -56,11 +55,11 @@ GEM rack (~> 1.5) rack-protection (~> 1.4) tilt (>= 1.3, < 3) - sinatra-activerecord (2.0.9) + sinatra-activerecord (2.0.10) activerecord (>= 3.2) sinatra (~> 1.0) thread_safe (0.3.5) - tilt (2.0.2) + tilt (2.0.5) tux (0.3.0) ripl (>= 0.3.5) ripl-multi_line (>= 0.2.4) @@ -87,4 +86,4 @@ DEPENDENCIES tux BUNDLED WITH - 1.11.2 + 1.12.3 diff --git a/app/models/ip.rb b/app/models/ip.rb new file mode 100644 index 00000000..138f2996 --- /dev/null +++ b/app/models/ip.rb @@ -0,0 +1,3 @@ +class Ip < ActiveRecord::Base + has_many :payload_requests +end diff --git a/app/models/payload_request.rb b/app/models/payload_request.rb new file mode 100644 index 00000000..7e253579 --- /dev/null +++ b/app/models/payload_request.rb @@ -0,0 +1,2 @@ +class PayloadRequest < ActiveRecord::Base +end diff --git a/app/models/url.rb b/app/models/url.rb new file mode 100644 index 00000000..3050e324 --- /dev/null +++ b/app/models/url.rb @@ -0,0 +1,3 @@ +class Url < ActiveRecord::Base + has_many :payload_requests +end diff --git a/db/migrate/20160706213537_create_payload_requests.rb b/db/migrate/20160706213537_create_payload_requests.rb new file mode 100644 index 00000000..bdce1083 --- /dev/null +++ b/db/migrate/20160706213537_create_payload_requests.rb @@ -0,0 +1,15 @@ +class CreatePayloadRequests < ActiveRecord::Migration + def change + create_table :payload_requests do |t| + t.integer :url_id + t.datetime :requested_at + t.integer :responded_in + t.string :referred_by + t.string :request_type + t.string :user_agent + t.string :resolution_width + t.string :resolution_height + t.string :ip + end + end +end diff --git a/db/migrate/20160706214336_create_urls.rb b/db/migrate/20160706214336_create_urls.rb new file mode 100644 index 00000000..6579a678 --- /dev/null +++ b/db/migrate/20160706214336_create_urls.rb @@ -0,0 +1,7 @@ +class CreateUrls < ActiveRecord::Migration + def change + create_table :urls do |t| + t.string :address + end + end +end diff --git a/db/migrate/20160706221548_create_ip_table.rb b/db/migrate/20160706221548_create_ip_table.rb new file mode 100644 index 00000000..c088556f --- /dev/null +++ b/db/migrate/20160706221548_create_ip_table.rb @@ -0,0 +1,7 @@ +class CreateIpTable < ActiveRecord::Migration + def change + create_table :ips do |t| + t.string :address + end + end +end diff --git a/db/schema.rb b/db/schema.rb new file mode 100644 index 00000000..9bb663da --- /dev/null +++ b/db/schema.rb @@ -0,0 +1,38 @@ +# This file is auto-generated from the current state of the database. Instead +# of editing this file, please use the migrations feature of Active Record to +# incrementally modify your database, and then regenerate this schema definition. +# +# Note that this schema.rb definition is the authoritative source for your +# database schema. If you need to create the application database on another +# system, you should be using db:schema:load, not running all the migrations +# from scratch. The latter is a flawed and unsustainable approach (the more migrations +# you'll amass, the slower it'll run and the greater likelihood for issues). +# +# It's strongly recommended that you check this file into your version control system. + +ActiveRecord::Schema.define(version: 20160706221548) do + + # These are extensions that must be enabled in order to support this database + enable_extension "plpgsql" + + create_table "ips", force: :cascade do |t| + t.string "address" + end + + create_table "payload_requests", force: :cascade do |t| + t.integer "url_id" + t.datetime "requested_at" + t.integer "responded_in" + t.string "referred_by" + t.string "request_type" + t.string "user_agent" + t.string "resolution_width" + t.string "resolution_height" + t.string "ip" + end + + create_table "urls", force: :cascade do |t| + t.string "address" + end + +end diff --git a/test/models/ip_test.rb b/test/models/ip_test.rb new file mode 100644 index 00000000..7eab560f --- /dev/null +++ b/test/models/ip_test.rb @@ -0,0 +1,10 @@ +require_relative '../test_helper' + +class IpTest < Minitest::Test + + def test_it_can_create_url + ip = Ip.create(address: "63.29.38.211") + assert_equal "63.29.38.211", ip.address + end + +end diff --git a/test/models/url_test.rb b/test/models/url_test.rb new file mode 100644 index 00000000..c5861b02 --- /dev/null +++ b/test/models/url_test.rb @@ -0,0 +1,9 @@ +require_relative '../test_helper' + +class UrlTest < Minitest::Test + + def test_it_can_create_url + url = Url.create(address: "Turing.io") + assert_equal "Turing.io", url.address + end +end From 15b98f58ae14e70d688522119075e129bf7cb8d4 Mon Sep 17 00:00:00 2001 From: Nicole Marino Date: Wed, 6 Jul 2016 17:23:26 -0600 Subject: [PATCH 02/11] more models and tests and tables and shit --- app/models/referrers.rb | 3 +++ app/models/request_type.rb | 3 +++ app/models/resolution.rb | 3 +++ db/migrate/20160706224821_create_request_types.rb | 7 +++++++ db/migrate/20160706230547_create_referrers.rb | 7 +++++++ .../20160706231553_create_resolution_table.rb | 8 ++++++++ db/schema.rb | 15 ++++++++++++++- test/models/refferres_test.rb | 9 +++++++++ test/models/request_type_test.rb | 9 +++++++++ test/models/resolution_test.rb | 10 ++++++++++ 10 files changed, 73 insertions(+), 1 deletion(-) create mode 100644 app/models/referrers.rb create mode 100644 app/models/request_type.rb create mode 100644 app/models/resolution.rb create mode 100644 db/migrate/20160706224821_create_request_types.rb create mode 100644 db/migrate/20160706230547_create_referrers.rb create mode 100644 db/migrate/20160706231553_create_resolution_table.rb create mode 100644 test/models/refferres_test.rb create mode 100644 test/models/request_type_test.rb create mode 100644 test/models/resolution_test.rb diff --git a/app/models/referrers.rb b/app/models/referrers.rb new file mode 100644 index 00000000..399bfd4a --- /dev/null +++ b/app/models/referrers.rb @@ -0,0 +1,3 @@ +class Referrer < ActiveRecord::Base + has_many :payload_requests +end diff --git a/app/models/request_type.rb b/app/models/request_type.rb new file mode 100644 index 00000000..56e79a35 --- /dev/null +++ b/app/models/request_type.rb @@ -0,0 +1,3 @@ +class RequestType < ActiveRecord::Base + has_many :payload_requests +end diff --git a/app/models/resolution.rb b/app/models/resolution.rb new file mode 100644 index 00000000..38809de1 --- /dev/null +++ b/app/models/resolution.rb @@ -0,0 +1,3 @@ +class Resolution< ActiveRecord::Base + has_many :payload_requests +end diff --git a/db/migrate/20160706224821_create_request_types.rb b/db/migrate/20160706224821_create_request_types.rb new file mode 100644 index 00000000..729b9009 --- /dev/null +++ b/db/migrate/20160706224821_create_request_types.rb @@ -0,0 +1,7 @@ +class CreateRequestTypes < ActiveRecord::Migration + def change + create_table :request_types do |t| + t.string :verb + end + end +end diff --git a/db/migrate/20160706230547_create_referrers.rb b/db/migrate/20160706230547_create_referrers.rb new file mode 100644 index 00000000..c7d993f1 --- /dev/null +++ b/db/migrate/20160706230547_create_referrers.rb @@ -0,0 +1,7 @@ +class CreateReferrers < ActiveRecord::Migration + def change + create_table :referrers do |t| + t.string :address + end + end +end diff --git a/db/migrate/20160706231553_create_resolution_table.rb b/db/migrate/20160706231553_create_resolution_table.rb new file mode 100644 index 00000000..fd800fa7 --- /dev/null +++ b/db/migrate/20160706231553_create_resolution_table.rb @@ -0,0 +1,8 @@ +class CreateResolutionTable < ActiveRecord::Migration + def change + create_table :resolutions do |t| + t.string :width + t.string :height + end + end +end diff --git a/db/schema.rb b/db/schema.rb index 9bb663da..8035b62b 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20160706221548) do +ActiveRecord::Schema.define(version: 20160706231553) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -31,6 +31,19 @@ t.string "ip" end + create_table "referrers", force: :cascade do |t| + t.string "address" + end + + create_table "request_types", force: :cascade do |t| + t.string "verb" + end + + create_table "resolutions", force: :cascade do |t| + t.string "width" + t.string "height" + end + create_table "urls", force: :cascade do |t| t.string "address" end diff --git a/test/models/refferres_test.rb b/test/models/refferres_test.rb new file mode 100644 index 00000000..24e9598d --- /dev/null +++ b/test/models/refferres_test.rb @@ -0,0 +1,9 @@ +require_relative '../test_helper' + +class ReferrerTest < Minitest::Test + + def test_it_can_create_referrer + website = Referrer.create(address: "google.com") + assert_equal "google.com", website.address + end +end diff --git a/test/models/request_type_test.rb b/test/models/request_type_test.rb new file mode 100644 index 00000000..6a7a60ec --- /dev/null +++ b/test/models/request_type_test.rb @@ -0,0 +1,9 @@ +require_relative '../test_helper' + +class RequestTypeTest < Minitest::Test + + def test_it_can_create_request_type + type = RequestType.create(verb: "GET") + assert_equal "GET", type.verb + end +end diff --git a/test/models/resolution_test.rb b/test/models/resolution_test.rb new file mode 100644 index 00000000..7b648212 --- /dev/null +++ b/test/models/resolution_test.rb @@ -0,0 +1,10 @@ +require_relative '../test_helper' + +class ResolutionTest < Minitest::Test + + def test_it_can_create_resolution + nums = Resolution.create(height: "15px", width:"20px") + assert_equal "15px", nums.height + assert_equal "20px", nums.width + end +end From 73bee43df884be6351957adce91896ee63bbb363 Mon Sep 17 00:00:00 2001 From: Nicole Marino Date: Wed, 6 Jul 2016 22:18:36 -0600 Subject: [PATCH 03/11] commit-madded test file for PayloadRequests and created teardown method --- Gemfile | 1 + Gemfile.lock | 8 +++++ ...7031612_fix_data_types_payload_requests.rb | 10 +++++++ db/schema.rb | 11 ++++--- test/models/payload_request_test.rb | 29 +++++++++++++++++++ test/test_helper.rb | 14 +++++++++ 6 files changed, 67 insertions(+), 6 deletions(-) create mode 100644 db/migrate/20160707031612_fix_data_types_payload_requests.rb create mode 100644 test/models/payload_request_test.rb diff --git a/Gemfile b/Gemfile index b46d11e9..9c973913 100644 --- a/Gemfile +++ b/Gemfile @@ -12,4 +12,5 @@ group :development, :test do gem 'capybara' gem 'launchy' gem 'rack-test' + gem 'pry' end diff --git a/Gemfile.lock b/Gemfile.lock index 88317ed7..d7bffea9 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -22,10 +22,12 @@ GEM rack (>= 1.0.0) rack-test (>= 0.5.4) xpath (~> 2.0) + coderay (1.1.1) concurrent-ruby (1.0.2) i18n (0.7.0) launchy (2.4.3) addressable (~> 2.3) + method_source (0.8.2) mime-types (3.1) mime-types-data (~> 3.2015) mime-types-data (3.2016.0521) @@ -36,6 +38,10 @@ GEM pkg-config (~> 1.1.7) pg (0.18.4) pkg-config (1.1.7) + pry (0.10.3) + coderay (~> 1.1.0) + method_source (~> 0.8.1) + slop (~> 3.4) rack (1.6.4) rack-protection (1.5.3) rack @@ -58,6 +64,7 @@ GEM sinatra-activerecord (2.0.10) activerecord (>= 3.2) sinatra (~> 1.0) + slop (3.6.0) thread_safe (0.3.5) tilt (2.0.5) tux (0.3.0) @@ -79,6 +86,7 @@ DEPENDENCIES launchy minitest pg + pry rack-test shotgun sinatra diff --git a/db/migrate/20160707031612_fix_data_types_payload_requests.rb b/db/migrate/20160707031612_fix_data_types_payload_requests.rb new file mode 100644 index 00000000..128102ee --- /dev/null +++ b/db/migrate/20160707031612_fix_data_types_payload_requests.rb @@ -0,0 +1,10 @@ +class FixDataTypesPayloadRequests < ActiveRecord::Migration + def change + change_column :payload_requests, :referred_by, 'integer USING CAST(referred_by AS integer)' + change_column :payload_requests, :request_type, 'integer USING CAST(request_type AS integer)' + change_column :payload_requests, :ip, 'integer USING CAST(ip AS integer)' + remove_column(:payload_requests, :resolution_width) + remove_column(:payload_requests, :resolution_height) + add_column(:payload_requests, :resolution_id, :integer) + end +end diff --git a/db/schema.rb b/db/schema.rb index 8035b62b..c9804b45 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20160706231553) do +ActiveRecord::Schema.define(version: 20160707031612) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -23,12 +23,11 @@ t.integer "url_id" t.datetime "requested_at" t.integer "responded_in" - t.string "referred_by" - t.string "request_type" + t.integer "referred_by" + t.integer "request_type" t.string "user_agent" - t.string "resolution_width" - t.string "resolution_height" - t.string "ip" + t.integer "ip" + t.integer "resolution_id" end create_table "referrers", force: :cascade do |t| diff --git a/test/models/payload_request_test.rb b/test/models/payload_request_test.rb new file mode 100644 index 00000000..64eca9f8 --- /dev/null +++ b/test/models/payload_request_test.rb @@ -0,0 +1,29 @@ +require_relative '../test_helper' +require 'pry' + +class PayloadRequestTest < Minitest::Test + include TestHelpers + + +def test_that_you_can_create_payload_request + payload = PayloadRequest.create(url_id:2, + requested_at:"2013-02-16 21:38:28 -0700", + responded_in:37, + referred_by:2, + request_type:2, + user_agent: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1309.0 Safari/537.17", + resolution_id:4, + ip:2) + assert_equal 4, payload.resolution_id + assert_equal "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1309.0 Safari/537.17", payload.user_agent +end + + def test_find_average + PayloadRequest.create(responded_in:10) + PayloadRequest.create(responded_in:220) + PayloadRequest.create(responded_in:100) + assert_equal 110, PayloadRequest.average(:responded_in).to_i + end + + +end diff --git a/test/test_helper.rb b/test/test_helper.rb index 447449ed..49bdf4e5 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -9,3 +9,17 @@ require 'capybara/dsl' Capybara.app = RushHour::Server + + + +module TestHelpers + + def payload_requests + PayloadRequest.new + end + + def teardown + PayloadRequest.destroy_all + super + end +end From b0afb4d12d5b4ae145c7a99cdc787ab13cd90a69 Mon Sep 17 00:00:00 2001 From: Kris Sparks Date: Thu, 7 Jul 2016 12:05:58 -0600 Subject: [PATCH 04/11] Iteration one needs some clean up. Includes start of iteration 2 --- app/models/ip.rb | 2 ++ app/models/payload_request.rb | 10 ++++++ app/models/referrers.rb | 2 ++ app/models/request_type.rb | 2 ++ app/models/resolution.rb | 2 ++ app/models/url.rb | 2 ++ test/models/payload_request_test.rb | 54 ++++++++++++++++++++--------- test/test_helper.rb | 15 ++++++-- 8 files changed, 70 insertions(+), 19 deletions(-) diff --git a/app/models/ip.rb b/app/models/ip.rb index 138f2996..d9401207 100644 --- a/app/models/ip.rb +++ b/app/models/ip.rb @@ -1,3 +1,5 @@ class Ip < ActiveRecord::Base + validates :ip, presence: true + has_many :payload_requests end diff --git a/app/models/payload_request.rb b/app/models/payload_request.rb index 7e253579..b88b3bb1 100644 --- a/app/models/payload_request.rb +++ b/app/models/payload_request.rb @@ -1,2 +1,12 @@ class PayloadRequest < ActiveRecord::Base + validates :payload_request, presence: true + + belongs_to :url + belongs_to :requested_at + belongs_to :referred_by + belongs_to :request_type + belongs_to :user_agent + belongs_to :resolution_height + belongs_to :resolution_weight + belongs_to :ip end diff --git a/app/models/referrers.rb b/app/models/referrers.rb index 399bfd4a..3a752f90 100644 --- a/app/models/referrers.rb +++ b/app/models/referrers.rb @@ -1,3 +1,5 @@ class Referrer < ActiveRecord::Base + validates :payload_request, presence: true + has_many :payload_requests end diff --git a/app/models/request_type.rb b/app/models/request_type.rb index 56e79a35..c4010b27 100644 --- a/app/models/request_type.rb +++ b/app/models/request_type.rb @@ -1,3 +1,5 @@ class RequestType < ActiveRecord::Base + validates :request_type, presence: true + has_many :payload_requests end diff --git a/app/models/resolution.rb b/app/models/resolution.rb index 38809de1..ec19eb7f 100644 --- a/app/models/resolution.rb +++ b/app/models/resolution.rb @@ -1,3 +1,5 @@ class Resolution< ActiveRecord::Base + validates :resolution, presence: true + has_many :payload_requests end diff --git a/app/models/url.rb b/app/models/url.rb index 3050e324..cc329a8e 100644 --- a/app/models/url.rb +++ b/app/models/url.rb @@ -1,3 +1,5 @@ class Url < ActiveRecord::Base + validates :url, presence: true + has_many :payload_requests end diff --git a/test/models/payload_request_test.rb b/test/models/payload_request_test.rb index 64eca9f8..68738dd4 100644 --- a/test/models/payload_request_test.rb +++ b/test/models/payload_request_test.rb @@ -2,28 +2,48 @@ require 'pry' class PayloadRequestTest < Minitest::Test - include TestHelpers - - -def test_that_you_can_create_payload_request - payload = PayloadRequest.create(url_id:2, - requested_at:"2013-02-16 21:38:28 -0700", - responded_in:37, - referred_by:2, - request_type:2, - user_agent: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1309.0 Safari/537.17", - resolution_id:4, - ip:2) - assert_equal 4, payload.resolution_id - assert_equal "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1309.0 Safari/537.17", payload.user_agent -end + include TestHelpers #(does this include the module?) + + + def test_that_you_can_create_payload_request + # payload = PayloadRequest.create(url_id:2, + # requested_at: "2013-02-16 21:38:28 -0700", + # responded_in: 37, + # referred_by: 2, + # request_type: 2, + # user_agent: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1309.0 Safari/537.17", + # resolution_id: 4, + # ip: 2) + + binding.pry + payload = create_payload + + assert_equal 4, payload.resolution_id + assert_equal "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1309.0 Safari/537.17", payload.user_agent + end def test_find_average PayloadRequest.create(responded_in:10) PayloadRequest.create(responded_in:220) PayloadRequest.create(responded_in:100) - assert_equal 110, PayloadRequest.average(:responded_in).to_i - end + assert_equal 110, PayloadRequest.average(:responded_in) + end + + def test_max_response_time + PayloadRequest.create(responded_in:10) + PayloadRequest.create(responded_in:220) + PayloadRequest.create(responded_in:100) + + assert_equal 220, PayloadRequest.maximum(:responded_in) + end + + def test_min_response_time + PayloadRequest.create(responded_in:10) + PayloadRequest.create(responded_in:220) + PayloadRequest.create(responded_in:100) + + assert_equal 10, PayloadRequest.minimum(:responded_in) + end end diff --git a/test/test_helper.rb b/test/test_helper.rb index 49bdf4e5..a98f6608 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -10,8 +10,6 @@ Capybara.app = RushHour::Server - - module TestHelpers def payload_requests @@ -22,4 +20,17 @@ def teardown PayloadRequest.destroy_all super end + + def create_payload + url = Url.create(address: "http://jumpstartlab.com/blog") + request_type = RequestType.create(verb: "GET") + resolution = Resolution.create(width: "1920", height: "1280") + referrer = Referrer.create(referrer: "http://jumpstartlab.com") + user_agent = UserAgent.create(operating_system: "OSX 10.11.5", browser: "Chrome") + ip = Ip.create(ip_address: "63.29.38.211") + payload_request = PayloadRequest.create(url_id: url.id, requested_at: "abcd", responded_in: "5", + referrer_id: referrer.id, request_type_id: rtype.id, + user_agent_id: user_agent.id, resolution_id: resolution.id, + ip_address_id: ip.id) + end end From 2e405edb37a9071f776330ae020c18f3a73c1264 Mon Sep 17 00:00:00 2001 From: Nicole Marino Date: Thu, 7 Jul 2016 13:36:01 -0600 Subject: [PATCH 05/11] fixed test and sanitation and rake file n shit --- .gitignore | 1 + Gemfile | 6 ++++ Gemfile.lock | 44 +++++++++++++++++++++++++++++ Rakefile | 8 ++++++ test/models/payload_request_test.rb | 39 ++++++++++++++++--------- test/test_helper.rb | 13 +++++++-- 6 files changed, 95 insertions(+), 16 deletions(-) diff --git a/.gitignore b/.gitignore index 71ff0290..3e1eb3ed 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +coverage capybara*.html \# Compiled source # ################### diff --git a/Gemfile b/Gemfile index 9c973913..488966fc 100644 --- a/Gemfile +++ b/Gemfile @@ -4,6 +4,7 @@ gem 'sinatra', require: 'sinatra/base' gem 'pg' gem 'activerecord' gem 'sinatra-activerecord' +gem 'useragent' group :development, :test do gem 'shotgun' @@ -13,4 +14,9 @@ group :development, :test do gem 'launchy' gem 'rack-test' gem 'pry' + gem 'database_cleaner' + gem 'simplecov' + gem 'cane' + gem 'reek' + gem 'rake' end diff --git a/Gemfile.lock b/Gemfile.lock index d7bffea9..6ec6a33c 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -14,7 +14,14 @@ GEM tzinfo (~> 1.1) addressable (2.4.0) arel (7.0.0) + ast (2.3.0) + axiom-types (0.1.1) + descendants_tracker (~> 0.0.4) + ice_nine (~> 0.11.0) + thread_safe (~> 0.3, >= 0.3.1) bond (0.5.1) + cane (3.0.0) + parallel capybara (2.7.1) addressable mime-types (>= 1.16) @@ -22,9 +29,20 @@ GEM rack (>= 1.0.0) rack-test (>= 0.5.4) xpath (~> 2.0) + codeclimate-engine-rb (0.3.1) + virtus (~> 1.0) coderay (1.1.1) + coercible (1.0.0) + descendants_tracker (~> 0.0.1) concurrent-ruby (1.0.2) + database_cleaner (1.5.3) + descendants_tracker (0.0.4) + thread_safe (~> 0.3, >= 0.3.1) + docile (1.1.5) + equalizer (0.0.11) i18n (0.7.0) + ice_nine (0.11.2) + json (2.0.1) launchy (2.4.3) addressable (~> 2.3) method_source (0.8.2) @@ -36,6 +54,9 @@ GEM nokogiri (1.6.8) mini_portile2 (~> 2.1.0) pkg-config (~> 1.1.7) + parallel (1.9.0) + parser (2.3.1.2) + ast (~> 2.2) pg (0.18.4) pkg-config (1.1.7) pry (0.10.3) @@ -47,6 +68,12 @@ GEM rack rack-test (0.6.3) rack (>= 1.0) + rainbow (2.1.0) + rake (11.2.2) + reek (4.1.1) + codeclimate-engine-rb (~> 0.3.1) + parser (~> 2.3.1, >= 2.3.1.2) + rainbow (~> 2.0) ripl (0.7.1) bond (~> 0.5.1) ripl-multi_line (0.3.1) @@ -57,6 +84,11 @@ GEM ripl (>= 0.7.0) shotgun (0.9.1) rack (>= 1.0) + simplecov (0.12.0) + docile (~> 1.1.0) + json (>= 1.8, < 3) + simplecov-html (~> 0.10.0) + simplecov-html (0.10.0) sinatra (1.4.7) rack (~> 1.5) rack-protection (~> 1.4) @@ -74,6 +106,12 @@ GEM sinatra (>= 1.2.1) tzinfo (1.2.2) thread_safe (~> 0.1) + useragent (0.16.7) + virtus (1.0.5) + axiom-types (~> 0.1) + coercible (~> 1.0) + descendants_tracker (~> 0.0, >= 0.0.3) + equalizer (~> 0.0, >= 0.0.9) xpath (2.0.0) nokogiri (~> 1.3) @@ -82,16 +120,22 @@ PLATFORMS DEPENDENCIES activerecord + cane capybara + database_cleaner launchy minitest pg pry rack-test + rake + reek shotgun + simplecov sinatra sinatra-activerecord tux + useragent BUNDLED WITH 1.12.3 diff --git a/Rakefile b/Rakefile index 152add3d..73bfc347 100644 --- a/Rakefile +++ b/Rakefile @@ -2,7 +2,15 @@ require "bundler" Bundler.require require "sinatra/activerecord/rake" +require "rake/testtask" +Rake::TestTask.new do |t| + t.libs << "test" + t.test_files = FileList['test/*/*.rb'] + t.verbose = false + t.warning = false +end +task default: :test #<------ important namespace :sanitation do desc "Check line lengths & whitespace with Cane" task :lines do diff --git a/test/models/payload_request_test.rb b/test/models/payload_request_test.rb index 64eca9f8..dd9fd01f 100644 --- a/test/models/payload_request_test.rb +++ b/test/models/payload_request_test.rb @@ -4,19 +4,18 @@ class PayloadRequestTest < Minitest::Test include TestHelpers - -def test_that_you_can_create_payload_request - payload = PayloadRequest.create(url_id:2, - requested_at:"2013-02-16 21:38:28 -0700", - responded_in:37, - referred_by:2, - request_type:2, - user_agent: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1309.0 Safari/537.17", - resolution_id:4, - ip:2) - assert_equal 4, payload.resolution_id - assert_equal "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1309.0 Safari/537.17", payload.user_agent -end + def test_that_you_can_create_payload_request + payload = PayloadRequest.create(url_id:2, + requested_at:"2013-02-16 21:38:28 -0700", + responded_in:37, + referred_by:2, + request_type:2, + user_agent: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1309.0 Safari/537.17", + resolution_id:4, + ip:2) + assert_equal 4, payload.resolution_id + assert_equal "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1309.0 Safari/537.17", payload.user_agent + end def test_find_average PayloadRequest.create(responded_in:10) @@ -25,5 +24,19 @@ def test_find_average assert_equal 110, PayloadRequest.average(:responded_in).to_i end + def test_max_response_time + PayloadRequest.create(responded_in:10) + PayloadRequest.create(responded_in:220) + PayloadRequest.create(responded_in:100) + + assert_equal 220, PayloadRequest.maximum(:responded_in) +end + + def test_min_response_time + PayloadRequest.create(responded_in:10) + PayloadRequest.create(responded_in:220) + PayloadRequest.create(responded_in:100) + assert_equal 10, PayloadRequest.minimum(:responded_in) + end end diff --git a/test/test_helper.rb b/test/test_helper.rb index 49bdf4e5..5f134ad3 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -1,5 +1,8 @@ ENV["RACK_ENV"] ||= "test" +require 'simplecov' +SimpleCov.start + require 'bundler' Bundler.require @@ -7,19 +10,23 @@ require 'minitest/autorun' require 'minitest/pride' require 'capybara/dsl' +require 'database_cleaner' +require 'useragent' +DatabaseCleaner.strategy = :truncation Capybara.app = RushHour::Server module TestHelpers - def payload_requests - PayloadRequest.new + def setup + DatabaseCleaner.start + super end def teardown - PayloadRequest.destroy_all + DatabaseCleaner.clean super end end From 4fb93d6ce829007b2d3b762fc4f317a0bf23ffb1 Mon Sep 17 00:00:00 2001 From: Nicole Marino Date: Thu, 7 Jul 2016 17:33:51 -0600 Subject: [PATCH 06/11] fixed realtionships --- app/models/ip.rb | 2 +- app/models/payload_request.rb | 29 +++++++-------- app/models/{referrers.rb => referrer.rb} | 2 + app/models/request_type.rb | 6 +++ app/models/resolution.rb | 3 ++ app/models/software_agent.rb | 6 +++ app/models/url.rb | 2 + .../20160707204237_create_software_agent.rb | 10 +++++ ...1923_change_names_of_tables_and_columns.rb | 9 +++++ db/schema.rb | 17 ++++++--- test/models/payload_request_test.rb | 37 +++++++------------ .../{refferres_test.rb => referrer_test.rb} | 0 test/models/software_agent_test.rb | 16 ++++++++ test/test_helper.rb | 28 ++++++++++++++ 14 files changed, 123 insertions(+), 44 deletions(-) rename app/models/{referrers.rb => referrer.rb} (62%) create mode 100644 app/models/software_agent.rb create mode 100644 db/migrate/20160707204237_create_software_agent.rb create mode 100644 db/migrate/20160707211923_change_names_of_tables_and_columns.rb rename test/models/{refferres_test.rb => referrer_test.rb} (100%) create mode 100644 test/models/software_agent_test.rb diff --git a/app/models/ip.rb b/app/models/ip.rb index 2dc603de..d8b6652a 100644 --- a/app/models/ip.rb +++ b/app/models/ip.rb @@ -1,5 +1,5 @@ class Ip < ActiveRecord::Base - # validates :ip, presence: true + validates :address, presence: true has_many :payload_requests end diff --git a/app/models/payload_request.rb b/app/models/payload_request.rb index 4bfddfd1..303ad55a 100644 --- a/app/models/payload_request.rb +++ b/app/models/payload_request.rb @@ -1,18 +1,17 @@ class PayloadRequest < ActiveRecord::Base - # validates :url_id, presence: true - # validates :requested_at, presence: true - # validates :responded_in, presence: true - # validates :referred_by, presence: true - # validates :request_type, presence: true - # validates :user_agent, presence: true - # validates :resolution_id, presence: true - # validates :ip, presence: true + validates :url_id, presence: true + validates :requested_at, presence: true + validates :responded_in, presence: true + validates :referred_by_id, presence: true + validates :request_type_id, presence: true + validates :software_agent_id, presence: true + validates :ip_id, presence: true + validates :resolution_id, presence: true - belongs_to :urls - # belongs_to :requested_at - belongs_to :referrers - belongs_to :request_types - # belongs_to :user_agent - belongs_to :resolutions - belongs_to :ips + belongs_to :url + belongs_to :referrer + belongs_to :request_type + belongs_to :software_agent + belongs_to :resolution + belongs_to :ip end diff --git a/app/models/referrers.rb b/app/models/referrer.rb similarity index 62% rename from app/models/referrers.rb rename to app/models/referrer.rb index 399bfd4a..2be72606 100644 --- a/app/models/referrers.rb +++ b/app/models/referrer.rb @@ -1,3 +1,5 @@ class Referrer < ActiveRecord::Base + validates :address, presence: true + has_many :payload_requests end diff --git a/app/models/request_type.rb b/app/models/request_type.rb index 56e79a35..d9455a73 100644 --- a/app/models/request_type.rb +++ b/app/models/request_type.rb @@ -1,3 +1,9 @@ class RequestType < ActiveRecord::Base + validates :verb, presence: true + has_many :payload_requests + + def most_frequest_type + + end end diff --git a/app/models/resolution.rb b/app/models/resolution.rb index 38809de1..2dace873 100644 --- a/app/models/resolution.rb +++ b/app/models/resolution.rb @@ -1,3 +1,6 @@ class Resolution< ActiveRecord::Base + validates :height, presence: true + validates :width, presence:true + has_many :payload_requests end diff --git a/app/models/software_agent.rb b/app/models/software_agent.rb new file mode 100644 index 00000000..f9c273a1 --- /dev/null +++ b/app/models/software_agent.rb @@ -0,0 +1,6 @@ +class SoftwareAgent < ActiveRecord::Base + validates :os, presence:true + validates :browser, presence:true + + has_many :payload_requests +end diff --git a/app/models/url.rb b/app/models/url.rb index 3050e324..b31c1055 100644 --- a/app/models/url.rb +++ b/app/models/url.rb @@ -1,3 +1,5 @@ class Url < ActiveRecord::Base + validates :address, presence:true + has_many :payload_requests end diff --git a/db/migrate/20160707204237_create_software_agent.rb b/db/migrate/20160707204237_create_software_agent.rb new file mode 100644 index 00000000..daec2627 --- /dev/null +++ b/db/migrate/20160707204237_create_software_agent.rb @@ -0,0 +1,10 @@ +class CreateSoftwareAgent < ActiveRecord::Migration + def change + create_table :software_agent do |t| + t.string :os + t.string :browser + + t.timestamps null: false + end + end +end diff --git a/db/migrate/20160707211923_change_names_of_tables_and_columns.rb b/db/migrate/20160707211923_change_names_of_tables_and_columns.rb new file mode 100644 index 00000000..e02320f8 --- /dev/null +++ b/db/migrate/20160707211923_change_names_of_tables_and_columns.rb @@ -0,0 +1,9 @@ +class ChangeNamesOfTablesAndColumns < ActiveRecord::Migration + def change + rename_column :payload_requests, :referred_by, :referred_by_id + rename_column :payload_requests, :user_agent, :software_agent_id + rename_column :payload_requests, :request_type, :request_type_id + rename_column :payload_requests, :ip, :ip_id + rename_table :software_agent, :software_agents + end +end diff --git a/db/schema.rb b/db/schema.rb index c9804b45..d2f282db 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20160707031612) do +ActiveRecord::Schema.define(version: 20160707211923) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -23,10 +23,10 @@ t.integer "url_id" t.datetime "requested_at" t.integer "responded_in" - t.integer "referred_by" - t.integer "request_type" - t.string "user_agent" - t.integer "ip" + t.integer "referred_by_id" + t.integer "request_type_id" + t.string "software_agent_id" + t.integer "ip_id" t.integer "resolution_id" end @@ -43,6 +43,13 @@ t.string "height" end + create_table "software_agents", force: :cascade do |t| + t.string "os" + t.string "browser" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + create_table "urls", force: :cascade do |t| t.string "address" end diff --git a/test/models/payload_request_test.rb b/test/models/payload_request_test.rb index 7ee29592..dcb47f2d 100644 --- a/test/models/payload_request_test.rb +++ b/test/models/payload_request_test.rb @@ -5,39 +5,30 @@ class PayloadRequestTest < Minitest::Test include TestHelpers def test_that_you_can_create_payload_request - payload = PayloadRequest.create(url_id:2, - requested_at:"2013-02-16 21:38:28 -0700", - responded_in:37, - referred_by:2, - request_type:2, - user_agent: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1309.0 Safari/537.17", - resolution_id:4, - ip:2) - assert_equal 4, payload.resolution_id - assert_equal "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1309.0 Safari/537.17", payload.user_agent + payload = create_payload + assert_equal 1, payload.resolution_id + assert_equal 1, payload.referred_by_id end def test_find_average - PayloadRequest.create(responded_in:10) - PayloadRequest.create(responded_in:220) - PayloadRequest.create(responded_in:100) + PayloadRequest.create(url_id:1, requested_at: Time.now,responded_in:50,referred_by_id:1,request_type_id:1,software_agent_id:1,ip_id:1,resolution_id:1) + PayloadRequest.create(url_id:1, requested_at: Time.now,responded_in:150,referred_by_id:1,request_type_id:1,software_agent_id:1,ip_id:1,resolution_id:1) + PayloadRequest.create(url_id:1, requested_at: Time.now,responded_in:100,referred_by_id:1,request_type_id:1,software_agent_id:1,ip_id:1,resolution_id:1) - assert_equal 110, PayloadRequest.average(:responded_in) + assert_equal 100, PayloadRequest.average(:responded_in) end def test_max_response_time - PayloadRequest.create(responded_in:10) - PayloadRequest.create(responded_in:220) - PayloadRequest.create(responded_in:100) - - assert_equal 220, PayloadRequest.maximum(:responded_in) + PayloadRequest.create(url_id:1, requested_at: Time.now,responded_in:10,referred_by_id:1,request_type_id:1,software_agent_id:1,ip_id:1,resolution_id:1) + PayloadRequest.create(url_id:1, requested_at: Time.now,responded_in:20,referred_by_id:1,request_type_id:1,software_agent_id:1,ip_id:1,resolution_id:1) + PayloadRequest.create(url_id:1, requested_at: Time.now,responded_in:30,referred_by_id:1,request_type_id:1,software_agent_id:1,ip_id:1,resolution_id:1) + assert_equal 30, PayloadRequest.maximum(:responded_in) end def test_min_response_time PayloadRequest.create(responded_in:10) - PayloadRequest.create(responded_in:220) - PayloadRequest.create(responded_in:100) - assert_equal 10, PayloadRequest.minimum(:responded_in) + PayloadRequest.create(url_id:1, requested_at: Time.now,responded_in:30,referred_by_id:1,request_type_id:1,software_agent_id:1,ip_id:1,resolution_id:1) + PayloadRequest.create(url_id:1, requested_at: Time.now,responded_in:40,referred_by_id:1,request_type_id:1,software_agent_id:1,ip_id:1,resolution_id:1) + assert_equal 30, PayloadRequest.minimum(:responded_in) end - end diff --git a/test/models/refferres_test.rb b/test/models/referrer_test.rb similarity index 100% rename from test/models/refferres_test.rb rename to test/models/referrer_test.rb diff --git a/test/models/software_agent_test.rb b/test/models/software_agent_test.rb new file mode 100644 index 00000000..7892d0c0 --- /dev/null +++ b/test/models/software_agent_test.rb @@ -0,0 +1,16 @@ +require_relative '../test_helper' +require 'pry' + +class SoftwareAgentTest < Minitest::Test + include TestHelpers + + def test_it_creates_user_agent + user_agent = create_software_agent + + assert user_agent.valid? + + assert_equal "OS X 10.8.2", software_agent.os + assert_equal "Chrome", software_agent.browser + end + +end diff --git a/test/test_helper.rb b/test/test_helper.rb index c57c6668..ab4eed5f 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -17,6 +17,34 @@ Capybara.app = RushHour::Server module TestHelpers + def software_agent(path = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1309.0 Safari/537.17") + + UserAgent.parse(path) + + end + + def create_software_agent + SoftwareAgent.create( + browser: software_agent.browser, + os: software_agent.platform + ) + end + + def create_payload + + url = Url.create(address: "http://jumpstartlab.com/blog") + requested_at = Time.now + request_type = RequestType.create(verb: "GET") + resolution = Resolution.create(width: "1920", height: "1280") + referrer = Referrer.create(address: "http://jumpstartlab.com") + software_agent = SoftwareAgent.create(os: "OSX 10.11.5", browser: "Chrome") + ip = Ip.create(address: "63.29.38.211") + + payload_request = PayloadRequest.create(url_id: url.id, requested_at: requested_at, responded_in: 5, + referred_by_id: referrer.id, request_type_id: request_type.id, + software_agent_id: software_agent.id, resolution_id: resolution.id, + ip_id: ip.id) + end def setup DatabaseCleaner.start From 6737f6b1f9488ca6bd6d357a6e0e21c7eabc3d53 Mon Sep 17 00:00:00 2001 From: Nicole Marino Date: Thu, 7 Jul 2016 18:05:02 -0600 Subject: [PATCH 07/11] http request methods and tests --- app/models/request_type.rb | 8 +++++--- test/models/request_type_test.rb | 18 ++++++++++++++++++ 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/app/models/request_type.rb b/app/models/request_type.rb index d9455a73..31cccc20 100644 --- a/app/models/request_type.rb +++ b/app/models/request_type.rb @@ -1,9 +1,11 @@ class RequestType < ActiveRecord::Base validates :verb, presence: true - - has_many :payload_requests - def most_frequest_type + has_many :payload_requests + def self.most_frequent_type + values = RequestType.pluck(:verb) + values.group_by(&:itself).values.max_by(&:size).first end + end diff --git a/test/models/request_type_test.rb b/test/models/request_type_test.rb index 6a7a60ec..0f3007bd 100644 --- a/test/models/request_type_test.rb +++ b/test/models/request_type_test.rb @@ -1,9 +1,27 @@ require_relative '../test_helper' class RequestTypeTest < Minitest::Test + include TestHelpers def test_it_can_create_request_type type = RequestType.create(verb: "GET") assert_equal "GET", type.verb end + + def test_most_common_type_of_request + RequestType.create(verb: "GET") + RequestType.create(verb: "GET") + RequestType.create(verb: "GET") + RequestType.create(verb: "POST") + assert_equal "GET", RequestType.most_frequent_type + end + + def test_list_of_http_verbs_used + RequestType.create(verb: "GET") + RequestType.create(verb: "GET") + RequestType.create(verb: "GET") + RequestType.create(verb: "POST") + assert_equal ["GET", "GET", "GET", "POST"], RequestType.pluck(:verb) + end + end From 279d29576c55ea6cff692d9f1167f1e2f7102f2f Mon Sep 17 00:00:00 2001 From: Trent Whitinger Date: Fri, 8 Jul 2016 10:07:55 -0600 Subject: [PATCH 08/11] json parser, test helper payload, software agent model --- app/models/parser.rb | 25 +++++++++++++ app/models/software_agent.rb | 16 +++++++++ test/models/parser_test.rb | 35 ++++++++++++++++++ test/models/payload_request_test.rb | 55 +++++++++++++++++------------ test/models/software_agent_test.rb | 11 ++++-- test/test_helper.rb | 44 ++++++++++++----------- 6 files changed, 142 insertions(+), 44 deletions(-) create mode 100644 app/models/parser.rb create mode 100644 test/models/parser_test.rb diff --git a/app/models/parser.rb b/app/models/parser.rb new file mode 100644 index 00000000..ac4c3a3d --- /dev/null +++ b/app/models/parser.rb @@ -0,0 +1,25 @@ +require 'pry' + +class Parser + + def self.parse_json(json) + JSON.parse(json) + end + + def self.parse_payload(payload) + parsed_json = parse_json(payload) + {"url" => parsed_json["url"], + "requestedAt" => parsed_json["requestedAt"], + "respondedIn" => parsed_json["respondedIn"], + "referredBy" => parsed_json["referredBy"], + "requestType" => parsed_json["requestType"], + "software_agent" => parse_user_agent(parsed_json["userAgent"]), + "resolutionWidth" => parsed_json["resolutionWidth"], + "resolutionHeight" => parsed_json["resolutionHeight"], + "ip" => parsed_json["ip"]} + end + + def self.parse_user_agent(user_agent) + UserAgent.parse(user_agent) + end +end diff --git a/app/models/software_agent.rb b/app/models/software_agent.rb index f9c273a1..43cb15a4 100644 --- a/app/models/software_agent.rb +++ b/app/models/software_agent.rb @@ -1,6 +1,22 @@ class SoftwareAgent < ActiveRecord::Base + validates :os, presence:true validates :browser, presence:true has_many :payload_requests + + def self.web_browser_breakdown + user_agent_id = PayloadRequest.distinct.pluck(:software_agent_id) + user_agent_id.map do |id| + SoftwareAgent.find(id).browser + end + end + + def self.web_platform_breakdown + software_agent_id = PayloadRequest.distinct.pluck(:software_agent_id) + software_agent_id.map do |id| + SoftwareAgent.find(id).os + end + end + end diff --git a/test/models/parser_test.rb b/test/models/parser_test.rb new file mode 100644 index 00000000..679ea7a6 --- /dev/null +++ b/test/models/parser_test.rb @@ -0,0 +1,35 @@ +require_relative '../test_helper' + +class ParserTest < Minitest::Test + + def test_user_agent_gem_parses + user_agent_string = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.56 Safari/536.5' + result = Parser.parse_user_agent(user_agent_string) + + assert_equal "Chrome", result.browser + assert_equal "Macintosh", result.platform + end + + def test_it_can_parse_json + json_string = '{"key": "value"}' + result = Parser.parse_json(json_string) + + assert_equal "value", result["key"] + end + + def test_it_can_parse_a_raw_json_payload + payload = '{"url":"http://jumpstartlab.com/blog","requestedAt":"2013-02-16 21:38:28 -0700","respondedIn":37,"referredBy":"http://jumpstartlab.com","requestType":"GET","parameters":[],"eventName":"socialLogin","userAgent":"Mozilla/5.0 (Macintosh%3B Intel Mac OS X 10_8_2) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1309.0 Safari/537.17","resolutionWidth":"1920","resolutionHeight":"1280","ip":"63.29.38.211"}' + result = Parser.parse_payload(payload) + + assert_equal "http://jumpstartlab.com/blog", result["url"] + assert_equal "2013-02-16 21:38:28 -0700", result["requestedAt"] + assert_equal 37, result["respondedIn"] + assert_equal "http://jumpstartlab.com", result["referredBy"] + assert_equal "GET", result["requestType"] + assert_equal "Chrome", result["software_agent"].browser + assert_equal "Macintosh%3B Intel Mac OS X 10_8_2", result["software_agent"].platform + assert_equal "1920", result["resolutionWidth"] + assert_equal "1280", result["resolutionHeight"] + end + +end diff --git a/test/models/payload_request_test.rb b/test/models/payload_request_test.rb index dcb47f2d..164044f1 100644 --- a/test/models/payload_request_test.rb +++ b/test/models/payload_request_test.rb @@ -4,31 +4,42 @@ class PayloadRequestTest < Minitest::Test include TestHelpers - def test_that_you_can_create_payload_request - payload = create_payload + def test_it_creates_a_payload_request_with_valid_attributes + payload = create_payload(1) + payload = PayloadRequest.find(1) + + assert_equal 1, payload.id assert_equal 1, payload.resolution_id assert_equal 1, payload.referred_by_id - end - - def test_find_average - PayloadRequest.create(url_id:1, requested_at: Time.now,responded_in:50,referred_by_id:1,request_type_id:1,software_agent_id:1,ip_id:1,resolution_id:1) - PayloadRequest.create(url_id:1, requested_at: Time.now,responded_in:150,referred_by_id:1,request_type_id:1,software_agent_id:1,ip_id:1,resolution_id:1) - PayloadRequest.create(url_id:1, requested_at: Time.now,responded_in:100,referred_by_id:1,request_type_id:1,software_agent_id:1,ip_id:1,resolution_id:1) + assert_equal "http://jumpstartlab.com/blog0", payload.url.address + # assert_equal "http://jumpstartlab.com0", payload.referrer.address + assert_equal "GET 0", payload.request_type.verb + assert_equal "Chrome0", payload.software_agent.browser + assert_equal "OSX 10.11.50", payload.software_agent.os + assert_equal "19200", payload.resolution.width + assert_equal "12800", payload.resolution.height + assert_equal 0, payload.responded_in + assert_equal "63.29.38.2110", payload.ip.address +end +def test_find_average + PayloadRequest.create(url_id:1, requested_at: Time.now,responded_in:50,referred_by_id:1,request_type_id:1,software_agent_id:1,ip_id:1,resolution_id:1) + PayloadRequest.create(url_id:1, requested_at: Time.now,responded_in:150,referred_by_id:1,request_type_id:1,software_agent_id:1,ip_id:1,resolution_id:1) + PayloadRequest.create(url_id:1, requested_at: Time.now,responded_in:100,referred_by_id:1,request_type_id:1,software_agent_id:1,ip_id:1,resolution_id:1) - assert_equal 100, PayloadRequest.average(:responded_in) - end + assert_equal 100, PayloadRequest.average(:responded_in) +end - def test_max_response_time - PayloadRequest.create(url_id:1, requested_at: Time.now,responded_in:10,referred_by_id:1,request_type_id:1,software_agent_id:1,ip_id:1,resolution_id:1) - PayloadRequest.create(url_id:1, requested_at: Time.now,responded_in:20,referred_by_id:1,request_type_id:1,software_agent_id:1,ip_id:1,resolution_id:1) - PayloadRequest.create(url_id:1, requested_at: Time.now,responded_in:30,referred_by_id:1,request_type_id:1,software_agent_id:1,ip_id:1,resolution_id:1) - assert_equal 30, PayloadRequest.maximum(:responded_in) - end +def test_max_response_time + PayloadRequest.create(url_id:1, requested_at: Time.now,responded_in:10,referred_by_id:1,request_type_id:1,software_agent_id:1,ip_id:1,resolution_id:1) + PayloadRequest.create(url_id:1, requested_at: Time.now,responded_in:20,referred_by_id:1,request_type_id:1,software_agent_id:1,ip_id:1,resolution_id:1) + PayloadRequest.create(url_id:1, requested_at: Time.now,responded_in:30,referred_by_id:1,request_type_id:1,software_agent_id:1,ip_id:1,resolution_id:1) + assert_equal 30, PayloadRequest.maximum(:responded_in) +end - def test_min_response_time - PayloadRequest.create(responded_in:10) - PayloadRequest.create(url_id:1, requested_at: Time.now,responded_in:30,referred_by_id:1,request_type_id:1,software_agent_id:1,ip_id:1,resolution_id:1) - PayloadRequest.create(url_id:1, requested_at: Time.now,responded_in:40,referred_by_id:1,request_type_id:1,software_agent_id:1,ip_id:1,resolution_id:1) - assert_equal 30, PayloadRequest.minimum(:responded_in) - end +def test_min_response_time + PayloadRequest.create(responded_in:10) + PayloadRequest.create(url_id:1, requested_at: Time.now,responded_in:30,referred_by_id:1,request_type_id:1,software_agent_id:1,ip_id:1,resolution_id:1) + PayloadRequest.create(url_id:1, requested_at: Time.now,responded_in:40,referred_by_id:1,request_type_id:1,software_agent_id:1,ip_id:1,resolution_id:1) + assert_equal 30, PayloadRequest.minimum(:responded_in) +end end diff --git a/test/models/software_agent_test.rb b/test/models/software_agent_test.rb index 7892d0c0..3ea709af 100644 --- a/test/models/software_agent_test.rb +++ b/test/models/software_agent_test.rb @@ -1,16 +1,23 @@ require_relative '../test_helper' -require 'pry' class SoftwareAgentTest < Minitest::Test include TestHelpers def test_it_creates_user_agent user_agent = create_software_agent - assert user_agent.valid? assert_equal "OS X 10.8.2", software_agent.os assert_equal "Chrome", software_agent.browser end + def test_browser_breakdown_returns_browser_with_count + create_payload(2) + assert_equal ["Chrome1", "Chrome0"], SoftwareAgent.web_browser_breakdown + end + + def test_platform_breakdown_returns_platform_with_count + create_payload(2) + assert_equal ["OSX 10.11.51", "OSX 10.11.50"], SoftwareAgent.web_platform_breakdown + end end diff --git a/test/test_helper.rb b/test/test_helper.rb index ab4eed5f..1c359a88 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -17,10 +17,13 @@ Capybara.app = RushHour::Server module TestHelpers - def software_agent(path = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1309.0 Safari/537.17") + def setup + DatabaseCleaner.start + super + end + def software_agent(path = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1309.0 Safari/537.17") UserAgent.parse(path) - end def create_software_agent @@ -30,25 +33,26 @@ def create_software_agent ) end - def create_payload - - url = Url.create(address: "http://jumpstartlab.com/blog") + def create_payload(integer) + integer.times do |i| + url = Url.create(address: "http://jumpstartlab.com/blog#{i}") requested_at = Time.now - request_type = RequestType.create(verb: "GET") - resolution = Resolution.create(width: "1920", height: "1280") - referrer = Referrer.create(address: "http://jumpstartlab.com") - software_agent = SoftwareAgent.create(os: "OSX 10.11.5", browser: "Chrome") - ip = Ip.create(address: "63.29.38.211") - - payload_request = PayloadRequest.create(url_id: url.id, requested_at: requested_at, responded_in: 5, - referred_by_id: referrer.id, request_type_id: request_type.id, - software_agent_id: software_agent.id, resolution_id: resolution.id, - ip_id: ip.id) - end - - def setup - DatabaseCleaner.start - super + request_type = RequestType.create(verb: "GET #{i}") + resolution = Resolution.create(width: "1920#{i}", height: "1280#{i}") + referrer = Referrer.create(address: "http://jumpstartlab.com#{i}") + software_agent = SoftwareAgent.create(os: "OSX 10.11.5#{i}", browser: "Chrome#{i}") + ip = Ip.create(address: "63.29.38.211#{i}") + + PayloadRequest.find_or_create_by({ + :url_id => url.id, + :requested_at => requested_at, + :responded_in => i, + :request_type_id => request_type.id, + :resolution_id => resolution.id, + :referred_by_id => referrer.id, + :software_agent_id => software_agent.id, + :ip_id => ip.id }) + end end def teardown From 6a3fc1d7b9cb9fe2225861085d6b5e5b60efd75b Mon Sep 17 00:00:00 2001 From: Kris Sparks Date: Fri, 8 Jul 2016 11:30:29 -0600 Subject: [PATCH 09/11] Additional tests --- app/models/resolution.rb | 6 ++++++ app/models/url.rb | 6 ++++++ test/models/resolution_test.rb | 18 +++++++++++++++--- test/models/url_test.rb | 13 +++++++++++++ 4 files changed, 40 insertions(+), 3 deletions(-) diff --git a/app/models/resolution.rb b/app/models/resolution.rb index 2dace873..e944b75b 100644 --- a/app/models/resolution.rb +++ b/app/models/resolution.rb @@ -3,4 +3,10 @@ class Resolution< ActiveRecord::Base validates :width, presence:true has_many :payload_requests + + def self.all_screen_resolutions_across_all_requests + res = Resolution.pluck(:width, :height) + res.map { |r| r.join(" x ") }.join(", ") + end + end diff --git a/app/models/url.rb b/app/models/url.rb index b31c1055..1b783009 100644 --- a/app/models/url.rb +++ b/app/models/url.rb @@ -2,4 +2,10 @@ class Url < ActiveRecord::Base validates :address, presence:true has_many :payload_requests + + def self.urls_from_most_to_least_requested + urls = Url.pluck(:address) + frequency = urls.inject(Hash.new(0)) { |hash , value | hash[value] += 1; hash } + urls.max_by { |value| frequency[value] } + end end diff --git a/test/models/resolution_test.rb b/test/models/resolution_test.rb index 7b648212..7460ae72 100644 --- a/test/models/resolution_test.rb +++ b/test/models/resolution_test.rb @@ -1,10 +1,22 @@ require_relative '../test_helper' class ResolutionTest < Minitest::Test + include TestHelpers def test_it_can_create_resolution - nums = Resolution.create(height: "15px", width:"20px") - assert_equal "15px", nums.height - assert_equal "20px", nums.width + res = Resolution.create(height: "15px", width:"20px") + + assert_equal "15px", res.height + assert_equal "20px", res.width + end + + def test_all_screen_resolutions_across_all_requests + res = Resolution.create(height: "1366px", width:"768px") + res = Resolution.create(height: "1920px", width:"1080px") + res = Resolution.create(height: "1280px", width:"80px") + res = Resolution.create(height: "320px", width:"568px") + + expected = "768px x 1366px, 1080px x 1920px, 80px x 1280px, 568px x 320px" + assert_equal expected, Resolution.all_screen_resolutions_across_all_requests end end diff --git a/test/models/url_test.rb b/test/models/url_test.rb index d5c65c2d..75332eb9 100644 --- a/test/models/url_test.rb +++ b/test/models/url_test.rb @@ -1,9 +1,22 @@ require_relative '../test_helper' class UrlTest < Minitest::Test + include TestHelpers def test_it_can_create_url url = Url.create(address:"Turing.io") assert_equal "Turing.io", url.address end + + def test_urls_from_most_requested_to_least_requested + url = Url.create(address:"http://www.turing.io") + url = Url.create(address:"http://www.turing.io") + url = Url.create(address:"http://www.foragoodstrftime.com/") + url = Url.create(address:"http://www.foragoodstrftime.com/") + url = Url.create(address:"http://www.turing.io") + url = Url.create(address:"http://www.galvanize.com") + + expected = "http://www.turing.io" + assert_equal expected, Url.urls_from_most_to_least_requested + end end From b93371d04f10fb72f80dae3b2d4c9ef435f7fc51 Mon Sep 17 00:00:00 2001 From: Kris Sparks Date: Fri, 8 Jul 2016 13:00:37 -0600 Subject: [PATCH 10/11] Test refactoring --- app/models/payload_request.rb | 12 ++++++++ test/models/payload_request_test.rb | 44 ++++++++++++++++------------- test/test_helper.rb | 34 +++++++++++----------- 3 files changed, 53 insertions(+), 37 deletions(-) diff --git a/app/models/payload_request.rb b/app/models/payload_request.rb index 303ad55a..d6c460e2 100644 --- a/app/models/payload_request.rb +++ b/app/models/payload_request.rb @@ -1,4 +1,5 @@ class PayloadRequest < ActiveRecord::Base + validates :url_id, presence: true validates :requested_at, presence: true validates :responded_in, presence: true @@ -14,4 +15,15 @@ class PayloadRequest < ActiveRecord::Base belongs_to :software_agent belongs_to :resolution belongs_to :ip + + def referrer + Referrer.find(self.referred_by_id) + end + + # def self.find_max_response_by_url(url) + # Url.find(address: url) + # # hey urls what is the id for this url + # # hey payload give me max for this url + # end + end diff --git a/test/models/payload_request_test.rb b/test/models/payload_request_test.rb index 164044f1..ffcdf8f1 100644 --- a/test/models/payload_request_test.rb +++ b/test/models/payload_request_test.rb @@ -5,14 +5,14 @@ class PayloadRequestTest < Minitest::Test include TestHelpers def test_it_creates_a_payload_request_with_valid_attributes - payload = create_payload(1) + create_payload(1) payload = PayloadRequest.find(1) assert_equal 1, payload.id assert_equal 1, payload.resolution_id assert_equal 1, payload.referred_by_id assert_equal "http://jumpstartlab.com/blog0", payload.url.address - # assert_equal "http://jumpstartlab.com0", payload.referrer.address + assert_equal "http://jumpstartlab.com0", payload.referrer.address assert_equal "GET 0", payload.request_type.verb assert_equal "Chrome0", payload.software_agent.browser assert_equal "OSX 10.11.50", payload.software_agent.os @@ -21,25 +21,29 @@ def test_it_creates_a_payload_request_with_valid_attributes assert_equal 0, payload.responded_in assert_equal "63.29.38.2110", payload.ip.address end -def test_find_average - PayloadRequest.create(url_id:1, requested_at: Time.now,responded_in:50,referred_by_id:1,request_type_id:1,software_agent_id:1,ip_id:1,resolution_id:1) - PayloadRequest.create(url_id:1, requested_at: Time.now,responded_in:150,referred_by_id:1,request_type_id:1,software_agent_id:1,ip_id:1,resolution_id:1) - PayloadRequest.create(url_id:1, requested_at: Time.now,responded_in:100,referred_by_id:1,request_type_id:1,software_agent_id:1,ip_id:1,resolution_id:1) - assert_equal 100, PayloadRequest.average(:responded_in) -end + def test_find_average + create_payload(3) -def test_max_response_time - PayloadRequest.create(url_id:1, requested_at: Time.now,responded_in:10,referred_by_id:1,request_type_id:1,software_agent_id:1,ip_id:1,resolution_id:1) - PayloadRequest.create(url_id:1, requested_at: Time.now,responded_in:20,referred_by_id:1,request_type_id:1,software_agent_id:1,ip_id:1,resolution_id:1) - PayloadRequest.create(url_id:1, requested_at: Time.now,responded_in:30,referred_by_id:1,request_type_id:1,software_agent_id:1,ip_id:1,resolution_id:1) - assert_equal 30, PayloadRequest.maximum(:responded_in) -end + assert_equal 1, PayloadRequest.average(:responded_in).to_i + end -def test_min_response_time - PayloadRequest.create(responded_in:10) - PayloadRequest.create(url_id:1, requested_at: Time.now,responded_in:30,referred_by_id:1,request_type_id:1,software_agent_id:1,ip_id:1,resolution_id:1) - PayloadRequest.create(url_id:1, requested_at: Time.now,responded_in:40,referred_by_id:1,request_type_id:1,software_agent_id:1,ip_id:1,resolution_id:1) - assert_equal 30, PayloadRequest.minimum(:responded_in) -end + def test_max_response_time + create_payload(3) + + assert_equal 2, PayloadRequest.maximum(:responded_in) + end + + def test_min_response_time + create_payload(3) + + assert_equal 0, PayloadRequest.minimum(:responded_in) + end + + # def test_find_max_response_by_url + # create_payload(3) + # binding.pry + # + # assert_equal 89, PayloadRequest.find_max_response_by_url("http://www.googleit.com") + # end end diff --git a/test/test_helper.rb b/test/test_helper.rb index 1c359a88..1bd1b0c3 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -35,23 +35,23 @@ def create_software_agent def create_payload(integer) integer.times do |i| - url = Url.create(address: "http://jumpstartlab.com/blog#{i}") - requested_at = Time.now - request_type = RequestType.create(verb: "GET #{i}") - resolution = Resolution.create(width: "1920#{i}", height: "1280#{i}") - referrer = Referrer.create(address: "http://jumpstartlab.com#{i}") - software_agent = SoftwareAgent.create(os: "OSX 10.11.5#{i}", browser: "Chrome#{i}") - ip = Ip.create(address: "63.29.38.211#{i}") - - PayloadRequest.find_or_create_by({ - :url_id => url.id, - :requested_at => requested_at, - :responded_in => i, - :request_type_id => request_type.id, - :resolution_id => resolution.id, - :referred_by_id => referrer.id, - :software_agent_id => software_agent.id, - :ip_id => ip.id }) + url = Url.create(address: "http://jumpstartlab.com/blog#{i}") + requested_at = Time.now + request_type = RequestType.create(verb: "GET #{i}") + resolution = Resolution.create(width: "1920#{i}", height: "1280#{i}") + referrer = Referrer.create(address: "http://jumpstartlab.com#{i}") + software_agent = SoftwareAgent.create(os: "OSX 10.11.5#{i}", browser: "Chrome#{i}") + ip = Ip.create(address: "63.29.38.211#{i}") + + PayloadRequest.find_or_create_by({ + :url_id => url.id, + :requested_at => requested_at, + :responded_in => i, + :request_type_id => request_type.id, + :resolution_id => resolution.id, + :referred_by_id => referrer.id, + :software_agent_id => software_agent.id, + :ip_id => ip.id }) end end From 3b037ea96657d31488f1b25c547876de52d9a087 Mon Sep 17 00:00:00 2001 From: Kris Sparks Date: Fri, 8 Jul 2016 14:14:20 -0600 Subject: [PATCH 11/11] Min and max working --- app/models/payload_request.rb | 21 ++++++++++++++++----- test/models/payload_request_test.rb | 17 +++++++++++------ 2 files changed, 27 insertions(+), 11 deletions(-) diff --git a/app/models/payload_request.rb b/app/models/payload_request.rb index d6c460e2..fb54f680 100644 --- a/app/models/payload_request.rb +++ b/app/models/payload_request.rb @@ -20,10 +20,21 @@ def referrer Referrer.find(self.referred_by_id) end - # def self.find_max_response_by_url(url) - # Url.find(address: url) - # # hey urls what is the id for this url - # # hey payload give me max for this url - # end + def self.find_max_response_by_url(url) + id = Url.find_by_address(url).id + payloads = PayloadRequest.where(url_id: id) + responses = payloads.map do |payload| + payload.responded_in + end + responses.max + end + def self.find_min_response_by_url(url) + id = Url.find_by_address(url).id + payloads = PayloadRequest.where(url_id: id) + responses = payloads.map do |payload| + payload.responded_in + end + responses.min + end end diff --git a/test/models/payload_request_test.rb b/test/models/payload_request_test.rb index ffcdf8f1..055a66e7 100644 --- a/test/models/payload_request_test.rb +++ b/test/models/payload_request_test.rb @@ -40,10 +40,15 @@ def test_min_response_time assert_equal 0, PayloadRequest.minimum(:responded_in) end - # def test_find_max_response_by_url - # create_payload(3) - # binding.pry - # - # assert_equal 89, PayloadRequest.find_max_response_by_url("http://www.googleit.com") - # end + def test_find_max_response_by_url + create_payload(3) + + assert_equal 0, PayloadRequest.find_max_response_by_url("http://jumpstartlab.com/blog0") + end + + def test_find_min_response_by_url + create_payload(3) + + assert_equal 0, PayloadRequest.find_min_response_by_url("http://jumpstartlab.com/blog0") + end end