i_wonder 0.0.3 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. data/README.rdoc +9 -97
  2. data/app/assets/javascripts/i_wonder/ab_tests.js +2 -0
  3. data/app/assets/javascripts/i_wonder/application.js +15 -0
  4. data/app/assets/stylesheets/i_wonder/ab_tests.css.scss +22 -0
  5. data/app/assets/stylesheets/i_wonder/application.css.scss +1 -0
  6. data/app/controllers/i_wonder/ab_tests_controller.rb +48 -0
  7. data/app/controllers/i_wonder/application_controller.rb +4 -4
  8. data/app/controllers/i_wonder/metrics_controller.rb +33 -34
  9. data/app/helpers/i_wonder/ab_tests_helper.rb +4 -0
  10. data/app/models/i_wonder/ab_test.rb +101 -0
  11. data/app/models/i_wonder/ab_test_goal.rb +49 -0
  12. data/app/models/i_wonder/event.rb +5 -2
  13. data/app/models/i_wonder/test_group_membership.rb +12 -0
  14. data/app/views/i_wonder/ab_tests/_ab_test_goal_row.html.erb +23 -0
  15. data/app/views/i_wonder/ab_tests/_ab_test_goals.html.erb +13 -0
  16. data/app/views/i_wonder/ab_tests/_ab_test_group_row.html.erb +5 -0
  17. data/app/views/i_wonder/ab_tests/_ab_test_groups.html.erb +9 -0
  18. data/app/views/i_wonder/ab_tests/_form.html.erb +50 -0
  19. data/app/views/i_wonder/ab_tests/_show_not_started.html.erb +18 -0
  20. data/app/views/i_wonder/ab_tests/_show_report.html.erb +26 -0
  21. data/app/views/i_wonder/ab_tests/edit.html.erb +7 -0
  22. data/app/views/i_wonder/ab_tests/index.html.erb +20 -0
  23. data/app/views/i_wonder/ab_tests/new.html.erb +7 -0
  24. data/app/views/i_wonder/ab_tests/show.html.erb +20 -0
  25. data/app/views/i_wonder/reports/_form.html.erb +9 -5
  26. data/app/views/layouts/i_wonder.html.erb +1 -0
  27. data/config/routes.rb +1 -0
  28. data/db/migrate/20111022230720_i_wonder_migrations.rb +35 -26
  29. data/lib/i_wonder/ab_testing/action_controller_mixins.rb +20 -0
  30. data/lib/i_wonder/engine.rb +2 -0
  31. data/lib/i_wonder/logging/{mixins/action_controller_mixins.rb → action_controller_mixins.rb} +3 -3
  32. data/lib/i_wonder/logging/{mixins/active_record_mixins.rb → active_record_mixins.rb} +0 -0
  33. data/lib/i_wonder/version.rb +1 -1
  34. data/lib/i_wonder.rb +7 -3
  35. data/test/dummy/app/controllers/application_controller.rb +7 -7
  36. data/test/dummy/db/schema.rb +33 -0
  37. data/test/dummy/log/development.log +16012 -0
  38. data/test/dummy/log/test.log +30206 -0
  39. data/test/dummy/tmp/cache/assets/C7B/1F0/sprockets%2F69ce38b6f0a103527048612c29753c1f +0 -0
  40. data/test/dummy/tmp/cache/assets/C81/600/sprockets%2F30b4f9798169b0d0157b48c09ea23472 +0 -0
  41. data/test/dummy/tmp/cache/assets/CB1/1C0/sprockets%2F0677230b357317e47dffaff9013e0377 +0 -0
  42. data/test/dummy/tmp/cache/assets/CE6/720/sprockets%2F9718b522ff20c58a59b179b7759ca20b +0 -0
  43. data/test/dummy/tmp/cache/assets/D20/120/sprockets%2F73fcb7f2f97642793feb2c3d871c1482 +0 -0
  44. data/test/dummy/tmp/cache/assets/D2F/9D0/sprockets%2F50ce229bd4200bed47618724bcab6c73 +0 -0
  45. data/test/dummy/tmp/cache/assets/D37/100/sprockets%2F4e900e2ccfdda5075214028c89e25f0e +0 -0
  46. data/test/dummy/tmp/cache/assets/D79/600/sprockets%2Fc2a1e7e47cead78810554cc9c0de9388 +0 -0
  47. data/test/dummy/tmp/cache/assets/D84/210/sprockets%2Fabd0103ccec2b428ac62c94e4c40b384 +0 -0
  48. data/test/dummy/tmp/cache/assets/D8E/250/sprockets%2Fefe57e932e1d26c3b6af42a5311f0a1c +0 -0
  49. data/test/dummy/tmp/cache/assets/DA7/BA0/sprockets%2F463a9dd811f2418d96fa72cfe05fb8cd +0 -0
  50. data/test/dummy/tmp/cache/assets/DAD/040/sprockets%2Fc59fd78ac2642a5f3c1b6ef899d50cf3 +0 -0
  51. data/test/dummy/tmp/cache/assets/DD1/B10/sprockets%2F85b9bce1c5bc3fb86a83d8c8c34e05e0 +0 -0
  52. data/test/dummy/tmp/cache/assets/DDF/BA0/sprockets%2F187ad995e2ff3588c339fdbecceba119 +0 -0
  53. data/test/dummy/tmp/cache/assets/DF9/5C0/sprockets%2Fd711a81a91fcc3cd1a30798dd94fdcbd +0 -0
  54. data/test/dummy/tmp/cache/assets/E04/890/sprockets%2F2f5173deea6c795b8fdde723bb4b63af +0 -0
  55. data/test/dummy/tmp/pids/server.pid +1 -0
  56. data/test/functional/ab_controller_mixins_test.rb +80 -0
  57. data/test/functional/{test_controller_test.rb → logging_controller_mixins_test.rb} +4 -3
  58. data/test/integration/i_wonder/dashboard_controller_test.rb +10 -3
  59. data/test/integration/middleware_test.rb +4 -0
  60. data/test/unit/helpers/i_wonder/ab_tests_helper_test.rb +6 -0
  61. data/test/unit/i_wonder/ab_test_test.rb +37 -0
  62. data/test/unit/i_wonder/event_test.rb +5 -3
  63. data/test/unit/i_wonder/test_group_membership_test.rb +9 -0
  64. metadata +65 -24
@@ -0,0 +1 @@
1
+ 12461
@@ -0,0 +1,80 @@
1
+ require File.expand_path("../test_helper.rb", File.dirname(__FILE__))
2
+
3
+ class ABControllerMixinsTest < ActionController::TestCase
4
+ tests TestController
5
+
6
+ def setup
7
+ @controller.instance_eval do
8
+ cookies[IWonder::COOKIE_KEY+IWonder::Logging::SESSION_KEY_NAME] = "2"
9
+ i_wonder_for_user_id("3")
10
+ i_wonder_for_account_id("4")
11
+ end
12
+ end
13
+
14
+ test "fetching the correct group" do
15
+ @ab_test = IWonder::AbTest.create(:name => "Blah Test", :sym => "blah", :test_group_names => ["Options 1", "Options 2"], :ab_test_goals_attributes => {"0" => {:event_type => "success"}})
16
+ @ab_test.update_attribute(:test_applies_to, "session")
17
+ assert_valid @ab_test
18
+
19
+ # add a random sesison, user and account to groups in this test
20
+ @ab_test.test_group_memberships.create!(:member_type => "account", :member_id => "random_1", :test_group_name => "Options 1")
21
+ @ab_test.test_group_memberships.create!(:member_type => "user", :member_id => "random_2", :test_group_name => "Options 1")
22
+ @ab_test.test_group_memberships.create!(:member_type => "session", :member_id => "random_3", :test_group_name => "Options 1")
23
+
24
+ assert_nil @ab_test.send(:get_current_group, @controller)
25
+
26
+ t1 = @ab_test.test_group_memberships.create!(:member_type => "session", :member_id => "2", :test_group_name => "Option 2")
27
+ assert_equal t1, @ab_test.send(:get_current_group, @controller)
28
+
29
+ @ab_test.update_attribute(:test_applies_to, "user")
30
+ assert_nil @ab_test.send(:get_current_group, @controller)
31
+ t2 = @ab_test.test_group_memberships.create!(:member_type => "user", :member_id => "3", :test_group_name => "Option 2")
32
+ assert_equal t2, @ab_test.send(:get_current_group, @controller)
33
+
34
+ @ab_test.update_attribute(:test_applies_to, "account")
35
+ assert_nil @ab_test.send(:get_current_group, @controller)
36
+ t3 = @ab_test.test_group_memberships.create!(:member_type => "account", :member_id => "4", :test_group_name => "Option 2")
37
+ assert_equal t3, @ab_test.send(:get_current_group, @controller)
38
+ end
39
+
40
+ test "adding to test groups" do
41
+ @ab_test = IWonder::AbTest.create(:name => "Blah Test", :sym => "blah", :test_group_names => ["Options 1", "Options 2"], :ab_test_goals_attributes => {"0" => {:event_type => "success"}})
42
+ @ab_test.update_attribute(:test_applies_to, "session")
43
+ assert_valid @ab_test
44
+
45
+ assert_nil @ab_test.test_group_memberships.where(:member_type => "session", :member_id => "2", :test_group_name => "Option 2").first
46
+ @ab_test.send(:add_to_test_group, "Option 2", @controller)
47
+ assert @ab_test.test_group_memberships.where(:member_type => "session", :member_id => "2", :test_group_name => "Option 2").first
48
+
49
+ @ab_test.update_attribute(:test_applies_to, "user")
50
+ assert_nil @ab_test.test_group_memberships.where(:member_type => "user", :member_id => "3", :test_group_name => "Option 2").first
51
+ @ab_test.send(:add_to_test_group, "Option 2", @controller)
52
+ assert @ab_test.test_group_memberships.where(:member_type => "user", :member_id => "3", :test_group_name => "Option 2").first
53
+
54
+ @ab_test.update_attribute(:test_applies_to, "account")
55
+ assert_nil @ab_test.test_group_memberships.where(:member_type => "account", :member_id => "4", :test_group_name => "Option 2").first
56
+ @ab_test.send(:add_to_test_group, "Option 2", @controller)
57
+ assert @ab_test.test_group_memberships.where(:member_type => "account", :member_id => "4", :test_group_name => "Option 2").first
58
+ end
59
+
60
+ test "if which_test_group works" do
61
+ @ab_test = IWonder::AbTest.create(:name => "Blah Test", :sym => "blah", :test_group_names => ["Options 1", "Options 2"], :ab_test_goals_attributes => {"0" => {:event_type => "success"}})
62
+ @ab_test.update_attribute(:test_applies_to, "session")
63
+
64
+ assert_equal 0, @ab_test.test_group_memberships.count
65
+
66
+ # first time shouldn't be in a group yet. Will get placed in one.
67
+ first_group = @controller.which_test_group?("blah")
68
+ assert_include @ab_test.test_group_names, first_group
69
+ assert_equal 1, @ab_test.test_group_memberships.count
70
+
71
+ second_group = @controller.which_test_group?("blah")
72
+ assert_include first_group, second_group
73
+ assert_equal 1, @ab_test.test_group_memberships.count
74
+ end
75
+
76
+ test "the element the test applies to is not available" do
77
+ pending
78
+ end
79
+
80
+ end
@@ -1,14 +1,15 @@
1
1
  require File.expand_path("../test_helper.rb", File.dirname(__FILE__))
2
2
 
3
- class TestControllerTest < ActionController::TestCase
3
+ class LoggingControllerMixinsTest < ActionController::TestCase
4
+ tests TestController
4
5
 
5
6
  test "setting user and account" do
6
7
  session[:user_credentials_id] = 1
7
8
  get :test_without_report
8
9
 
9
10
  assert @request.env["i_wonder"]
10
- assert_equal 2, @request.env["i_wonder"]["user_id"]
11
- assert_equal 3, @request.env["i_wonder"]["account_id"]
11
+ assert_equal "2", @request.env["i_wonder"]["user_id"]
12
+ assert_equal "3", @request.env["i_wonder"]["account_id"]
12
13
  end
13
14
 
14
15
 
@@ -4,8 +4,15 @@ require File.expand_path("../../test_helper.rb", File.dirname(__FILE__))
4
4
 
5
5
  module IWonder
6
6
  class DashboardControllerTest < ActionDispatch::IntegrationTest
7
- # test "the truth" do
8
- # assert true
9
- # end
7
+
8
+ # The before_Filter is in the dummy application
9
+ test "before_filter security from main_app" do
10
+ get "/i_wonder"
11
+ assert_response :success
12
+
13
+ get "/i_wonder", :block_this => true
14
+ assert_redirected_to "/"
15
+ end
16
+
10
17
  end
11
18
  end
@@ -85,4 +85,8 @@ class MiddlewareTest < ActionDispatch::IntegrationTest
85
85
  assert_equal 0, IWonder::Event.count
86
86
  end
87
87
 
88
+ test "return_visit_gets set correctly" do
89
+ pending "not implemented yet"
90
+ end
91
+
88
92
  end
@@ -0,0 +1,6 @@
1
+ require 'test_helper'
2
+
3
+ module IWonder
4
+ class AbTestsHelperTest < ActionView::TestCase
5
+ end
6
+ end
@@ -0,0 +1,37 @@
1
+ require File.expand_path("../../test_helper.rb", File.dirname(__FILE__))
2
+
3
+ # NOTE: a bunch of the group gathering tests can be found in functional tests because they require chekcing the cookie for the session
4
+
5
+ module IWonder
6
+ class AbTestTest < ActiveSupport::TestCase
7
+
8
+ test "counting results" do
9
+ @ab_test = IWonder::AbTest.create(:name => "Blah Test", :sym => "blah", :test_group_names => ["Options 1", "Options 2"], :ab_test_goals_attributes => {"0" => {:event_type => "success"}}, :test_applies_to => "session")
10
+ assert_valid @ab_test
11
+ ab_test_goal = @ab_test.ab_test_goals.first
12
+
13
+ Timecop.travel(Time.zone.now - 1.day) do
14
+ assert IWonder::Event.create(:event_type => "success", :session_id => "5") # this should be ignored
15
+ end
16
+
17
+ assert @ab_test.test_group_memberships.create(:member_type => "session", :member_id => "1", :test_group_name => "Option 1")
18
+ assert @ab_test.test_group_memberships.create(:member_type => "session", :member_id => "2", :test_group_name => "Option 2")
19
+ assert @ab_test.test_group_memberships.create(:member_type => "session", :member_id => "3", :test_group_name => "Option 2")
20
+ assert @ab_test.test_group_memberships.create(:member_type => "session", :member_id => "4", :test_group_name => "Option 2")
21
+ assert @ab_test.test_group_memberships.create(:member_type => "session", :member_id => "5", :test_group_name => "Option 1")
22
+
23
+ assert IWonder::Event.create(:event_type => "success", :session_id => "1")
24
+ assert IWonder::Event.create(:event_type => "random", :session_id => "2")
25
+ assert IWonder::Event.create(:event_type => "success", :session_id => "2")
26
+ assert IWonder::Event.create(:event_type => "success", :session_id => "3")
27
+ assert IWonder::Event.create(:event_type => "random", :session_id => "4")
28
+ assert IWonder::Event.create(:event_type => "success", :session_id => "6")
29
+
30
+ assert_equal 2, @ab_test.assigned_count("Option 1")
31
+ assert_equal 3, @ab_test.assigned_count("Option 2")
32
+ assert_equal 1, @ab_test.get_results_for("Option 1", ab_test_goal)
33
+ assert_equal 2, @ab_test.get_results_for("Option 2", ab_test_goal)
34
+ end
35
+
36
+ end
37
+ end
@@ -69,12 +69,14 @@ module IWonder
69
69
  @e21 = Event.create :event_type => "new_visitor", :session_id => "321"
70
70
  @e22 = Event.create :event_type => "hit", :session_id => "321"
71
71
  Event.merge_session_to_user("321", "1")
72
+ @e21.reload
72
73
 
73
- assert_equal 4, Event.where(:session_id => "123").count
74
+ assert_equal 5, Event.where(:session_id => "123").count
74
75
  assert_equal 1, Event.where(:session_id => "123", :event_type => "new_visitor").count
76
+ assert_equal "return_visit", @e21.event_type
77
+ assert_equal 1, Event.where(:session_id => "123", :event_type => "return_visit").count
75
78
  assert_equal 0, Event.where(:session_id => "321").count
76
- assert_equal 4, Event.where(:user_id => "1").count
77
-
79
+ assert_equal 5, Event.where(:user_id => "1").count
78
80
  end
79
81
 
80
82
  end
@@ -0,0 +1,9 @@
1
+ require 'test_helper'
2
+
3
+ module IWonder
4
+ class TestGroupMembershipTest < ActiveSupport::TestCase
5
+ # test "the truth" do
6
+ # assert true
7
+ # end
8
+ end
9
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: i_wonder
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-10-26 00:00:00.000000000Z
12
+ date: 2011-10-28 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
16
- requirement: &2165981860 !ruby/object:Gem::Requirement
16
+ requirement: &2165333060 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 3.1.1
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *2165981860
24
+ version_requirements: *2165333060
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: jquery-rails
27
- requirement: &2165981280 !ruby/object:Gem::Requirement
27
+ requirement: &2165332300 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *2165981280
35
+ version_requirements: *2165332300
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: delayed_job
38
- requirement: &2165980660 !ruby/object:Gem::Requirement
38
+ requirement: &2165331640 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '2.1'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *2165980660
46
+ version_requirements: *2165331640
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: hash_accessor
49
- requirement: &2165980000 !ruby/object:Gem::Requirement
49
+ requirement: &2165331100 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '0'
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *2165980000
57
+ version_requirements: *2165331100
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: factory_girl_rails
60
- requirement: &2165977920 !ruby/object:Gem::Requirement
60
+ requirement: &2165307720 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: '0'
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *2165977920
68
+ version_requirements: *2165307720
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: pg
71
- requirement: &2165977440 !ruby/object:Gem::Requirement
71
+ requirement: &2165307280 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ! '>='
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: '0'
77
77
  type: :development
78
78
  prerelease: false
79
- version_requirements: *2165977440
79
+ version_requirements: *2165307280
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: pry
82
- requirement: &2165976900 !ruby/object:Gem::Requirement
82
+ requirement: &2165306720 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ! '>='
@@ -87,10 +87,10 @@ dependencies:
87
87
  version: '0'
88
88
  type: :development
89
89
  prerelease: false
90
- version_requirements: *2165976900
90
+ version_requirements: *2165306720
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: sass
93
- requirement: &2165975900 !ruby/object:Gem::Requirement
93
+ requirement: &2165306060 !ruby/object:Gem::Requirement
94
94
  none: false
95
95
  requirements:
96
96
  - - ~>
@@ -98,10 +98,10 @@ dependencies:
98
98
  version: '3.1'
99
99
  type: :development
100
100
  prerelease: false
101
- version_requirements: *2165975900
101
+ version_requirements: *2165306060
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: timecop
104
- requirement: &2165968840 !ruby/object:Gem::Requirement
104
+ requirement: &2165305180 !ruby/object:Gem::Requirement
105
105
  none: false
106
106
  requirements:
107
107
  - - ! '>='
@@ -109,7 +109,7 @@ dependencies:
109
109
  version: '0'
110
110
  type: :development
111
111
  prerelease: false
112
- version_requirements: *2165968840
112
+ version_requirements: *2165305180
113
113
  description: Analytics and AB Testing awesomeness for rails.
114
114
  email:
115
115
  - development@forrestzeisler.com
@@ -118,32 +118,50 @@ extensions: []
118
118
  extra_rdoc_files:
119
119
  - README.rdoc
120
120
  files:
121
+ - app/assets/javascripts/i_wonder/ab_tests.js
121
122
  - app/assets/javascripts/i_wonder/application.js
122
123
  - app/assets/javascripts/i_wonder/dashboard.js
123
124
  - app/assets/javascripts/i_wonder/events.js
124
125
  - app/assets/javascripts/i_wonder/metrics.js
125
126
  - app/assets/javascripts/i_wonder/reports.js
126
127
  - app/assets/stylesheets/i_wonder/_shared.css.scss
128
+ - app/assets/stylesheets/i_wonder/ab_tests.css.scss
127
129
  - app/assets/stylesheets/i_wonder/application.css.scss
128
130
  - app/assets/stylesheets/i_wonder/dashboard.css.scss
129
131
  - app/assets/stylesheets/i_wonder/events.css.scss
130
132
  - app/assets/stylesheets/i_wonder/metrics.css.scss
131
133
  - app/assets/stylesheets/i_wonder/reports.css.scss
134
+ - app/controllers/i_wonder/ab_tests_controller.rb
132
135
  - app/controllers/i_wonder/application_controller.rb
133
136
  - app/controllers/i_wonder/dashboard_controller.rb
134
137
  - app/controllers/i_wonder/events_controller.rb
135
138
  - app/controllers/i_wonder/metrics_controller.rb
136
139
  - app/controllers/i_wonder/reports_controller.rb
140
+ - app/helpers/i_wonder/ab_tests_helper.rb
137
141
  - app/helpers/i_wonder/application_helper.rb
138
142
  - app/helpers/i_wonder/dashboard_helper.rb
139
143
  - app/helpers/i_wonder/events_helper.rb
140
144
  - app/helpers/i_wonder/metrics_helper.rb
141
145
  - app/helpers/i_wonder/reports_helper.rb
146
+ - app/models/i_wonder/ab_test.rb
147
+ - app/models/i_wonder/ab_test_goal.rb
142
148
  - app/models/i_wonder/event.rb
143
149
  - app/models/i_wonder/metric.rb
144
150
  - app/models/i_wonder/report.rb
145
151
  - app/models/i_wonder/report_membership.rb
146
152
  - app/models/i_wonder/snapshot.rb
153
+ - app/models/i_wonder/test_group_membership.rb
154
+ - app/views/i_wonder/ab_tests/_ab_test_goal_row.html.erb
155
+ - app/views/i_wonder/ab_tests/_ab_test_goals.html.erb
156
+ - app/views/i_wonder/ab_tests/_ab_test_group_row.html.erb
157
+ - app/views/i_wonder/ab_tests/_ab_test_groups.html.erb
158
+ - app/views/i_wonder/ab_tests/_form.html.erb
159
+ - app/views/i_wonder/ab_tests/_show_not_started.html.erb
160
+ - app/views/i_wonder/ab_tests/_show_report.html.erb
161
+ - app/views/i_wonder/ab_tests/edit.html.erb
162
+ - app/views/i_wonder/ab_tests/index.html.erb
163
+ - app/views/i_wonder/ab_tests/new.html.erb
164
+ - app/views/i_wonder/ab_tests/show.html.erb
147
165
  - app/views/i_wonder/dashboard/landing.html.erb
148
166
  - app/views/i_wonder/events/index.html.erb
149
167
  - app/views/i_wonder/events/show.html.erb
@@ -165,12 +183,13 @@ files:
165
183
  - app/views/layouts/i_wonder.html.erb
166
184
  - config/routes.rb
167
185
  - db/migrate/20111022230720_i_wonder_migrations.rb
186
+ - lib/i_wonder/ab_testing/action_controller_mixins.rb
168
187
  - lib/i_wonder/configuration.rb
169
188
  - lib/i_wonder/core_ext.rb
170
189
  - lib/i_wonder/engine.rb
190
+ - lib/i_wonder/logging/action_controller_mixins.rb
191
+ - lib/i_wonder/logging/active_record_mixins.rb
171
192
  - lib/i_wonder/logging/middleware.rb
172
- - lib/i_wonder/logging/mixins/action_controller_mixins.rb
173
- - lib/i_wonder/logging/mixins/active_record_mixins.rb
174
193
  - lib/i_wonder/version.rb
175
194
  - lib/i_wonder.rb
176
195
  - lib/tasks/i_wonder_tasks.rake
@@ -218,11 +237,14 @@ files:
218
237
  - test/dummy/tmp/cache/assets/C5B/140/sprockets%2F5605473920cc85586d2a795b1e2a7990
219
238
  - test/dummy/tmp/cache/assets/C78/210/sprockets%2F26c220614bd9237d671ec621f0428f19
220
239
  - test/dummy/tmp/cache/assets/C79/390/sprockets%2F7b9a6409d013f75c40390a26006885ae
240
+ - test/dummy/tmp/cache/assets/C7B/1F0/sprockets%2F69ce38b6f0a103527048612c29753c1f
221
241
  - test/dummy/tmp/cache/assets/C81/600/sprockets%2F30b4f9798169b0d0157b48c09ea23472
222
242
  - test/dummy/tmp/cache/assets/C94/140/sprockets%2F69a79619df29670102b726d3e7547c6f
223
243
  - test/dummy/tmp/cache/assets/CA6/380/sprockets%2Fe8e1b47410e6440341afc3903896bc23
244
+ - test/dummy/tmp/cache/assets/CB1/1C0/sprockets%2F0677230b357317e47dffaff9013e0377
224
245
  - test/dummy/tmp/cache/assets/CBF/EB0/sprockets%2F279e977af0f392b36126a520569ec7d7
225
246
  - test/dummy/tmp/cache/assets/CE5/650/sprockets%2F8ab512c9b33ac90e699b73469d71f061
247
+ - test/dummy/tmp/cache/assets/CE6/720/sprockets%2F9718b522ff20c58a59b179b7759ca20b
226
248
  - test/dummy/tmp/cache/assets/CE9/220/sprockets%2Fdf40ed258e785336580ff8d3f17504a2
227
249
  - test/dummy/tmp/cache/assets/CFE/130/sprockets%2Fa510c5643a4c0c59b74c1746df2c007e
228
250
  - test/dummy/tmp/cache/assets/D20/120/sprockets%2F73fcb7f2f97642793feb2c3d871c1482
@@ -230,6 +252,7 @@ files:
230
252
  - test/dummy/tmp/cache/assets/D2F/9D0/sprockets%2F50ce229bd4200bed47618724bcab6c73
231
253
  - test/dummy/tmp/cache/assets/D30/9C0/sprockets%2F3c0162b1955a8f419b14bfc9c21f1bc5
232
254
  - test/dummy/tmp/cache/assets/D32/A10/sprockets%2F13fe41fee1fe35b49d145bcc06610705
255
+ - test/dummy/tmp/cache/assets/D37/100/sprockets%2F4e900e2ccfdda5075214028c89e25f0e
233
256
  - test/dummy/tmp/cache/assets/D38/3B0/sprockets%2Fe28cd7db24b3e4719e539371a331cb3c
234
257
  - test/dummy/tmp/cache/assets/D3C/510/sprockets%2F59ddac34690f13d66d518c042e5af2a7
235
258
  - test/dummy/tmp/cache/assets/D41/880/sprockets%2Fb9fe431461f3a6a728e7c8b57e6201eb
@@ -238,6 +261,7 @@ files:
238
261
  - test/dummy/tmp/cache/assets/D58/7E0/sprockets%2Fc3fefb1d72d7614af02a38ac7071c040
239
262
  - test/dummy/tmp/cache/assets/D68/240/sprockets%2Fdeadb83d125366600d6a6a69d3f4a19c
240
263
  - test/dummy/tmp/cache/assets/D6F/B90/sprockets%2F81dd44ced51e0fe8f2615068bb619a5d
264
+ - test/dummy/tmp/cache/assets/D79/600/sprockets%2Fc2a1e7e47cead78810554cc9c0de9388
241
265
  - test/dummy/tmp/cache/assets/D84/210/sprockets%2Fabd0103ccec2b428ac62c94e4c40b384
242
266
  - test/dummy/tmp/cache/assets/D8E/250/sprockets%2Fefe57e932e1d26c3b6af42a5311f0a1c
243
267
  - test/dummy/tmp/cache/assets/D97/740/sprockets%2F9b6d08ad548c1934113d1bcbd8bdc0e9
@@ -252,12 +276,15 @@ files:
252
276
  - test/dummy/tmp/cache/assets/DC8/270/sprockets%2F3ff28a9f19a1be0c377fea3d02e066db
253
277
  - test/dummy/tmp/cache/assets/DD1/B10/sprockets%2F85b9bce1c5bc3fb86a83d8c8c34e05e0
254
278
  - test/dummy/tmp/cache/assets/DDF/BA0/sprockets%2F187ad995e2ff3588c339fdbecceba119
279
+ - test/dummy/tmp/cache/assets/DF9/5C0/sprockets%2Fd711a81a91fcc3cd1a30798dd94fdcbd
255
280
  - test/dummy/tmp/cache/assets/E04/890/sprockets%2F2f5173deea6c795b8fdde723bb4b63af
256
281
  - test/dummy/tmp/cache/assets/E8D/B70/sprockets%2Fd62ab1e993c1edcadba5317fe8c7dffb
282
+ - test/dummy/tmp/pids/server.pid
257
283
  - test/factories/metric_factory.rb
258
284
  - test/factories/report_factory.rb
259
285
  - test/factories/snapshot_factory.rb
260
- - test/functional/test_controller_test.rb
286
+ - test/functional/ab_controller_mixins_test.rb
287
+ - test/functional/logging_controller_mixins_test.rb
261
288
  - test/i_wonder_test.rb
262
289
  - test/integration/i_wonder/dashboard_controller_test.rb
263
290
  - test/integration/i_wonder/events_controller_test.rb
@@ -268,15 +295,18 @@ files:
268
295
  - test/support/extra_assertions.rb
269
296
  - test/test_helper.rb
270
297
  - test/unit/configuration_test.rb
298
+ - test/unit/helpers/i_wonder/ab_tests_helper_test.rb
271
299
  - test/unit/helpers/i_wonder/dashboard_helper_test.rb
272
300
  - test/unit/helpers/i_wonder/events_helper_test.rb
273
301
  - test/unit/helpers/i_wonder/metrics_helper_test.rb
274
302
  - test/unit/helpers/i_wonder/reports_helper_test.rb
303
+ - test/unit/i_wonder/ab_test_test.rb
275
304
  - test/unit/i_wonder/event_test.rb
276
305
  - test/unit/i_wonder/metric_collection_test.rb
277
306
  - test/unit/i_wonder/metric_creation_test.rb
278
307
  - test/unit/i_wonder/report_test.rb
279
308
  - test/unit/i_wonder/snapshot_test.rb
309
+ - test/unit/i_wonder/test_group_membership_test.rb
280
310
  homepage: http://github.com/forrest/i_wonder
281
311
  licenses: []
282
312
  post_install_message:
@@ -343,11 +373,14 @@ test_files:
343
373
  - test/dummy/tmp/cache/assets/C5B/140/sprockets%2F5605473920cc85586d2a795b1e2a7990
344
374
  - test/dummy/tmp/cache/assets/C78/210/sprockets%2F26c220614bd9237d671ec621f0428f19
345
375
  - test/dummy/tmp/cache/assets/C79/390/sprockets%2F7b9a6409d013f75c40390a26006885ae
376
+ - test/dummy/tmp/cache/assets/C7B/1F0/sprockets%2F69ce38b6f0a103527048612c29753c1f
346
377
  - test/dummy/tmp/cache/assets/C81/600/sprockets%2F30b4f9798169b0d0157b48c09ea23472
347
378
  - test/dummy/tmp/cache/assets/C94/140/sprockets%2F69a79619df29670102b726d3e7547c6f
348
379
  - test/dummy/tmp/cache/assets/CA6/380/sprockets%2Fe8e1b47410e6440341afc3903896bc23
380
+ - test/dummy/tmp/cache/assets/CB1/1C0/sprockets%2F0677230b357317e47dffaff9013e0377
349
381
  - test/dummy/tmp/cache/assets/CBF/EB0/sprockets%2F279e977af0f392b36126a520569ec7d7
350
382
  - test/dummy/tmp/cache/assets/CE5/650/sprockets%2F8ab512c9b33ac90e699b73469d71f061
383
+ - test/dummy/tmp/cache/assets/CE6/720/sprockets%2F9718b522ff20c58a59b179b7759ca20b
351
384
  - test/dummy/tmp/cache/assets/CE9/220/sprockets%2Fdf40ed258e785336580ff8d3f17504a2
352
385
  - test/dummy/tmp/cache/assets/CFE/130/sprockets%2Fa510c5643a4c0c59b74c1746df2c007e
353
386
  - test/dummy/tmp/cache/assets/D20/120/sprockets%2F73fcb7f2f97642793feb2c3d871c1482
@@ -355,6 +388,7 @@ test_files:
355
388
  - test/dummy/tmp/cache/assets/D2F/9D0/sprockets%2F50ce229bd4200bed47618724bcab6c73
356
389
  - test/dummy/tmp/cache/assets/D30/9C0/sprockets%2F3c0162b1955a8f419b14bfc9c21f1bc5
357
390
  - test/dummy/tmp/cache/assets/D32/A10/sprockets%2F13fe41fee1fe35b49d145bcc06610705
391
+ - test/dummy/tmp/cache/assets/D37/100/sprockets%2F4e900e2ccfdda5075214028c89e25f0e
358
392
  - test/dummy/tmp/cache/assets/D38/3B0/sprockets%2Fe28cd7db24b3e4719e539371a331cb3c
359
393
  - test/dummy/tmp/cache/assets/D3C/510/sprockets%2F59ddac34690f13d66d518c042e5af2a7
360
394
  - test/dummy/tmp/cache/assets/D41/880/sprockets%2Fb9fe431461f3a6a728e7c8b57e6201eb
@@ -363,6 +397,7 @@ test_files:
363
397
  - test/dummy/tmp/cache/assets/D58/7E0/sprockets%2Fc3fefb1d72d7614af02a38ac7071c040
364
398
  - test/dummy/tmp/cache/assets/D68/240/sprockets%2Fdeadb83d125366600d6a6a69d3f4a19c
365
399
  - test/dummy/tmp/cache/assets/D6F/B90/sprockets%2F81dd44ced51e0fe8f2615068bb619a5d
400
+ - test/dummy/tmp/cache/assets/D79/600/sprockets%2Fc2a1e7e47cead78810554cc9c0de9388
366
401
  - test/dummy/tmp/cache/assets/D84/210/sprockets%2Fabd0103ccec2b428ac62c94e4c40b384
367
402
  - test/dummy/tmp/cache/assets/D8E/250/sprockets%2Fefe57e932e1d26c3b6af42a5311f0a1c
368
403
  - test/dummy/tmp/cache/assets/D97/740/sprockets%2F9b6d08ad548c1934113d1bcbd8bdc0e9
@@ -377,12 +412,15 @@ test_files:
377
412
  - test/dummy/tmp/cache/assets/DC8/270/sprockets%2F3ff28a9f19a1be0c377fea3d02e066db
378
413
  - test/dummy/tmp/cache/assets/DD1/B10/sprockets%2F85b9bce1c5bc3fb86a83d8c8c34e05e0
379
414
  - test/dummy/tmp/cache/assets/DDF/BA0/sprockets%2F187ad995e2ff3588c339fdbecceba119
415
+ - test/dummy/tmp/cache/assets/DF9/5C0/sprockets%2Fd711a81a91fcc3cd1a30798dd94fdcbd
380
416
  - test/dummy/tmp/cache/assets/E04/890/sprockets%2F2f5173deea6c795b8fdde723bb4b63af
381
417
  - test/dummy/tmp/cache/assets/E8D/B70/sprockets%2Fd62ab1e993c1edcadba5317fe8c7dffb
418
+ - test/dummy/tmp/pids/server.pid
382
419
  - test/factories/metric_factory.rb
383
420
  - test/factories/report_factory.rb
384
421
  - test/factories/snapshot_factory.rb
385
- - test/functional/test_controller_test.rb
422
+ - test/functional/ab_controller_mixins_test.rb
423
+ - test/functional/logging_controller_mixins_test.rb
386
424
  - test/i_wonder_test.rb
387
425
  - test/integration/i_wonder/dashboard_controller_test.rb
388
426
  - test/integration/i_wonder/events_controller_test.rb
@@ -393,12 +431,15 @@ test_files:
393
431
  - test/support/extra_assertions.rb
394
432
  - test/test_helper.rb
395
433
  - test/unit/configuration_test.rb
434
+ - test/unit/helpers/i_wonder/ab_tests_helper_test.rb
396
435
  - test/unit/helpers/i_wonder/dashboard_helper_test.rb
397
436
  - test/unit/helpers/i_wonder/events_helper_test.rb
398
437
  - test/unit/helpers/i_wonder/metrics_helper_test.rb
399
438
  - test/unit/helpers/i_wonder/reports_helper_test.rb
439
+ - test/unit/i_wonder/ab_test_test.rb
400
440
  - test/unit/i_wonder/event_test.rb
401
441
  - test/unit/i_wonder/metric_collection_test.rb
402
442
  - test/unit/i_wonder/metric_creation_test.rb
403
443
  - test/unit/i_wonder/report_test.rb
404
444
  - test/unit/i_wonder/snapshot_test.rb
445
+ - test/unit/i_wonder/test_group_membership_test.rb