i_wonder 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
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