opawesome 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (64) hide show
  1. data/MIT-LICENSE +20 -0
  2. data/README.rdoc +3 -0
  3. data/Rakefile +39 -0
  4. data/app/assets/javascripts/opawesome/cookies.js +141 -0
  5. data/app/assets/javascripts/opawesome.js +36 -0
  6. data/app/controllers/opawesome/sessions_controller.rb +16 -0
  7. data/app/controllers/opawesome/tests_controller.rb +31 -0
  8. data/app/helpers/opawesome/sessions_helper.rb +2 -0
  9. data/app/helpers/opawesome/tracker_helper.rb +56 -0
  10. data/app/models/opawesome/test.rb +47 -0
  11. data/app/models/opawesome/test_option.rb +19 -0
  12. data/app/models/opawesome.rb +5 -0
  13. data/app/views/opawesome/tests/_option_fields.html.erb +5 -0
  14. data/app/views/opawesome/tests/edit.html.erb +30 -0
  15. data/app/views/opawesome/tests/index.html.erb +11 -0
  16. data/app/views/opawesome/tests/show.html.erb +33 -0
  17. data/config/routes.rb +6 -0
  18. data/db/migrate/20130519180140_create_opawesome_tests.rb +13 -0
  19. data/db/migrate/20130519180402_create_opawesome_test_options.rb +12 -0
  20. data/lib/opawesome/engine.rb +14 -0
  21. data/lib/opawesome/version.rb +3 -0
  22. data/lib/opawesome.rb +7 -0
  23. data/lib/tasks/opawesome_tasks.rake +4 -0
  24. data/spec/controllers/opawesome/sessions_controller_spec.rb +50 -0
  25. data/spec/dummy/README.rdoc +261 -0
  26. data/spec/dummy/Rakefile +7 -0
  27. data/spec/dummy/app/assets/javascripts/application.js +15 -0
  28. data/spec/dummy/app/assets/stylesheets/application.css +13 -0
  29. data/spec/dummy/app/controllers/application_controller.rb +3 -0
  30. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  31. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  32. data/spec/dummy/config/application.rb +65 -0
  33. data/spec/dummy/config/boot.rb +10 -0
  34. data/spec/dummy/config/database.yml +25 -0
  35. data/spec/dummy/config/environment.rb +5 -0
  36. data/spec/dummy/config/environments/development.rb +37 -0
  37. data/spec/dummy/config/environments/production.rb +67 -0
  38. data/spec/dummy/config/environments/test.rb +37 -0
  39. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  40. data/spec/dummy/config/initializers/inflections.rb +15 -0
  41. data/spec/dummy/config/initializers/mime_types.rb +5 -0
  42. data/spec/dummy/config/initializers/secret_token.rb +7 -0
  43. data/spec/dummy/config/initializers/session_store.rb +8 -0
  44. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  45. data/spec/dummy/config/locales/en.yml +5 -0
  46. data/spec/dummy/config/routes.rb +58 -0
  47. data/spec/dummy/config.ru +4 -0
  48. data/spec/dummy/db/development.sqlite3 +0 -0
  49. data/spec/dummy/db/schema.rb +34 -0
  50. data/spec/dummy/db/test.sqlite3 +0 -0
  51. data/spec/dummy/log/development.log +155 -0
  52. data/spec/dummy/log/test.log +1258 -0
  53. data/spec/dummy/public/404.html +26 -0
  54. data/spec/dummy/public/422.html +26 -0
  55. data/spec/dummy/public/500.html +25 -0
  56. data/spec/dummy/public/favicon.ico +0 -0
  57. data/spec/dummy/script/rails +6 -0
  58. data/spec/factories/opawesome_test_options.rb +8 -0
  59. data/spec/factories/opawesome_tests.rb +8 -0
  60. data/spec/helpers/opawesome/tracker_helper_spec.rb +163 -0
  61. data/spec/models/opawesome/test_option_spec.rb +31 -0
  62. data/spec/models/opawesome/test_spec.rb +41 -0
  63. data/spec/spec_helper.rb +19 -0
  64. metadata +250 -0
@@ -0,0 +1,26 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>The page you were looking for doesn't exist (404)</title>
5
+ <style type="text/css">
6
+ body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
7
+ div.dialog {
8
+ width: 25em;
9
+ padding: 0 4em;
10
+ margin: 4em auto 0 auto;
11
+ border: 1px solid #ccc;
12
+ border-right-color: #999;
13
+ border-bottom-color: #999;
14
+ }
15
+ h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <!-- This file lives in public/404.html -->
21
+ <div class="dialog">
22
+ <h1>The page you were looking for doesn't exist.</h1>
23
+ <p>You may have mistyped the address or the page may have moved.</p>
24
+ </div>
25
+ </body>
26
+ </html>
@@ -0,0 +1,26 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>The change you wanted was rejected (422)</title>
5
+ <style type="text/css">
6
+ body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
7
+ div.dialog {
8
+ width: 25em;
9
+ padding: 0 4em;
10
+ margin: 4em auto 0 auto;
11
+ border: 1px solid #ccc;
12
+ border-right-color: #999;
13
+ border-bottom-color: #999;
14
+ }
15
+ h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <!-- This file lives in public/422.html -->
21
+ <div class="dialog">
22
+ <h1>The change you wanted was rejected.</h1>
23
+ <p>Maybe you tried to change something you didn't have access to.</p>
24
+ </div>
25
+ </body>
26
+ </html>
@@ -0,0 +1,25 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>We're sorry, but something went wrong (500)</title>
5
+ <style type="text/css">
6
+ body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
7
+ div.dialog {
8
+ width: 25em;
9
+ padding: 0 4em;
10
+ margin: 4em auto 0 auto;
11
+ border: 1px solid #ccc;
12
+ border-right-color: #999;
13
+ border-bottom-color: #999;
14
+ }
15
+ h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <!-- This file lives in public/500.html -->
21
+ <div class="dialog">
22
+ <h1>We're sorry, but something went wrong.</h1>
23
+ </div>
24
+ </body>
25
+ </html>
File without changes
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+ # This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
3
+
4
+ APP_PATH = File.expand_path('../../config/application', __FILE__)
5
+ require File.expand_path('../../config/boot', __FILE__)
6
+ require 'rails/commands'
@@ -0,0 +1,8 @@
1
+ # Read about factories at https://github.com/thoughtbot/factory_girl
2
+
3
+ FactoryGirl.define do
4
+ factory :opawesome_test_option, :class => 'Opawesome::TestOption' do
5
+ test_id 1
6
+ value "MyString"
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ # Read about factories at https://github.com/thoughtbot/factory_girl
2
+
3
+ FactoryGirl.define do
4
+ factory :opawesome_test, class: 'Opawesome::Test' do
5
+ sequence(:key){ |n| "test_key#{n}" }
6
+ name "Test Name"
7
+ end
8
+ end
@@ -0,0 +1,163 @@
1
+ require 'spec_helper'
2
+
3
+ describe Opawesome::TrackerHelper do
4
+ before do
5
+ helper.stub(:logged_in?){ false }
6
+ end
7
+
8
+ describe "#opaw_select" do
9
+ context "when the user doesn't have a valid optimization session cookie" do
10
+ before do
11
+ @cookies = mock permanent: mock
12
+ @cookies.permanent.stub(:[]=)
13
+ @cookies.stub(:[])
14
+ @cookies.stub(:[]).with(:opaw_valid_session) { nil }
15
+ helper.stub(:cookies) { @cookies }
16
+ @option = mock_model Opawesome::TestOption, value: 'test_value', select!: true
17
+ @test = mock_model Opawesome::Test, options: [@test], select_option: @option
18
+ Opawesome::Test.stub(:where){ Opawesome::Test }
19
+ Opawesome::Test.stub(:first_or_initialize){ @test }
20
+ end
21
+
22
+ it "should not count the option selection yet" do
23
+ @option.should_not_receive(:select!)
24
+ helper.opaw_select(:test_key, '')
25
+ end
26
+ end
27
+
28
+ context "when a user has a tracking key for a test" do
29
+ before do
30
+ @cookies = mock permanent: mock
31
+ @cookies.permanent.stub(:[]=)
32
+
33
+ @option = mock_model Opawesome::TestOption, value: 'test_value'
34
+ @cookies.stub(:[]){ @option.id }
35
+ helper.stub(:cookies) { @cookies }
36
+ end
37
+
38
+ context "when the test option in the cookie exists" do
39
+ before do
40
+ Opawesome::TestOption.stub(:where) { Opawesome::TestOption }
41
+ Opawesome::TestOption.stub(:first){ @option }
42
+ end
43
+
44
+ it "should return the option's value" do
45
+ helper.opaw_select(:test_key, '').should eq(@option.value)
46
+ end
47
+ end
48
+
49
+ context "when the test option in the cookie doesn't exist" do
50
+ before do
51
+ Opawesome::TestOption.stub(:where) { Opawesome::TestOption }
52
+ Opawesome::TestOption.stub(:first){ nil }
53
+ end
54
+
55
+ it "should clear the cookie" do
56
+ @cookies.should_receive(:[]=).with("opaw_test_key", nil)
57
+ helper.opaw_select(:test_key, '')
58
+ end
59
+ end
60
+ end
61
+
62
+ context "when a user doesn't have a tracking key for a test" do
63
+ before do
64
+ @cookies = mock permanent: mock
65
+ @cookies.permanent.stub(:[]=)
66
+ @cookies.stub(:[])
67
+ @cookies.stub(:[]).with(:opaw_valid_session) { true }
68
+ helper.stub(:cookies) { @cookies }
69
+ end
70
+
71
+ context "when the test already exists" do
72
+ before do
73
+ @option = mock_model Opawesome::TestOption, value: 'test_value', select!: true
74
+ @test = mock_model Opawesome::Test, options: [@test], select_option: @option
75
+ Opawesome::Test.stub(:where){ Opawesome::Test }
76
+ Opawesome::Test.stub(:first_or_initialize){ @test }
77
+ end
78
+
79
+ it "should select an option" do
80
+ @option.should_receive(:select!)
81
+ helper.opaw_select(:test_key, '')
82
+ end
83
+
84
+ it "should set the user's tracking cookie for the test" do
85
+ @cookies.permanent.should_receive(:[]=).with("opaw_test_key", @option.id)
86
+ helper.opaw_select(:test_key, '')
87
+ end
88
+
89
+ it "should return the option value" do
90
+ helper.opaw_select(:test_key, '').should eq(@option.value)
91
+ end
92
+ end
93
+
94
+ context "when the test doesn't exist yet" do
95
+ before do
96
+ @option = mock_model(Opawesome::TestOption, value: 'test_value', select!: true).as_new_record
97
+ @test = mock_model(Opawesome::Test, options: [@test], select_option: @option, key: 'test_key', save!: true).as_new_record
98
+ @test.stub(:name=)
99
+ Opawesome::Test.stub(:where){ Opawesome::Test }
100
+ Opawesome::Test.stub(:first_or_initialize){ @test }
101
+ end
102
+
103
+ it "should set a default name based on the test key" do
104
+ @test.should_receive(:name=).with("Test key")
105
+ helper.opaw_select(:test_key, '')
106
+ end
107
+
108
+ it "should save the test" do
109
+ @test.should_receive(:save!)
110
+ helper.opaw_select(:test_key, '')
111
+ end
112
+
113
+ it "should create a default test option" do
114
+ Opawesome::TestOption.should_receive(:create!).with(hash_including(value: 'testing', test_id: @test.id))
115
+ helper.opaw_select(:test_key, 'testing')
116
+ end
117
+ end
118
+ end
119
+
120
+ it "should return the default option when no test exists yet" do
121
+ helper.opaw_select(:key, 'default name').should eq('default name')
122
+ end
123
+ end
124
+
125
+ describe "#opaw_convert!" do
126
+ context "when a user has a tracking key for a test" do
127
+ before do
128
+ @cookies = mock permanent: mock
129
+ @cookies.permanent.stub(:[]=)
130
+
131
+ @option = mock_model Opawesome::TestOption, value: 'test_value'
132
+ @cookies.stub(:[]){ nil }
133
+ @cookies.stub(:[]).with('opaw_test_key') { @option.id }
134
+ @cookies.stub(:[]).with(:opaw_valid_session) { true }
135
+ helper.stub(:cookies) { @cookies }
136
+ end
137
+
138
+ context "when the test option in the cookie exists" do
139
+ before do
140
+ Opawesome::TestOption.stub(:where){ Opawesome::TestOption }
141
+ Opawesome::TestOption.stub(:first){ @option }
142
+ end
143
+
144
+ it "should track a conversion" do
145
+ @option.should_receive(:convert!)
146
+ helper.opaw_convert!(:test_key)
147
+ end
148
+ end
149
+
150
+ context "when the test option in the cookie doesn't exist" do
151
+ before do
152
+ Opawesome::TestOption.stub(:where){ Opawesome::TestOption }
153
+ Opawesome::TestOption.stub(:first){ nil }
154
+ end
155
+
156
+ it "should clear the cookie" do
157
+ @cookies.should_receive(:[]=).with("opaw_test_key", nil)
158
+ helper.opaw_convert!(:test_key)
159
+ end
160
+ end
161
+ end
162
+ end
163
+ end
@@ -0,0 +1,31 @@
1
+ require 'spec_helper'
2
+
3
+ describe Opawesome::TestOption do
4
+ it { should belong_to :test }
5
+
6
+ describe "statistics" do
7
+ it "should return a conversion rate" do
8
+ Opawesome::TestOption.new(conversion_count: 10, selection_count: 20).conversion_rate.should eq(50.0)
9
+ end
10
+
11
+ it "should return zero conversion rate if there are no conversions or selections" do
12
+ Opawesome::TestOption.new(conversion_count: 0, selection_count: 20).conversion_rate.should eq(0)
13
+ Opawesome::TestOption.new(conversion_count: 10, selection_count: 0).conversion_rate.should eq(0)
14
+ end
15
+ end
16
+
17
+ describe "tracking" do
18
+ before do
19
+ @option = Opawesome::TestOption.new(conversion_count: 0, selection_count: 0)
20
+ @option.should_receive(:save!)
21
+ end
22
+
23
+ it "should increment the selection count when selected" do
24
+ proc { @option.select! }.should change(@option, :selection_count).by(1)
25
+ end
26
+
27
+ it "should increment the conversion count when converted" do
28
+ proc { @option.convert! }.should change(@option, :conversion_count).by(1)
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,41 @@
1
+ require 'spec_helper'
2
+
3
+ describe Opawesome::Test do
4
+ it { should have_many(:options) }
5
+
6
+ it { should validate_presence_of(:key) }
7
+ it { should validate_uniqueness_of(:key) }
8
+
9
+ describe "statistics" do
10
+ before do
11
+ @test = Opawesome::Test.new
12
+ @test.options << mock_model(Opawesome::TestOption, conversion_count: 8, selection_count: 10)
13
+ @test.options << mock_model(Opawesome::TestOption, conversion_count: 2, selection_count: 15)
14
+ end
15
+
16
+ it "should return the conversion count" do
17
+ @test.conversion_count.should eq(10)
18
+ end
19
+
20
+ it "should return the selection count" do
21
+ @test.selection_count.should eq(25)
22
+ end
23
+ end
24
+
25
+ describe "test options" do
26
+ before do
27
+ @test = Opawesome::Test.new
28
+ @option1 = mock_model(Opawesome::TestOption, conversion_count: 8, selection_count: 10, conversion_rate: 8.0/10 * 100)
29
+ @option2 = mock_model(Opawesome::TestOption, conversion_count: 2, selection_count: 15, conversion_rate: 2.0/15 * 100)
30
+ @test.options = [@option1, @option2]
31
+ end
32
+
33
+ it "should return the best option" do
34
+ @test.best_option.should eq(@option1)
35
+ end
36
+
37
+ it "should select an option" do
38
+ @test.select_option.should be_a_kind_of(Opawesome::TestOption)
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,19 @@
1
+ ENV['RAILS_ENV'] ||= 'test'
2
+
3
+ require File.expand_path("../dummy/config/environment.rb", __FILE__)
4
+ require 'rspec/rails'
5
+ require 'shoulda/matchers'
6
+ require 'rspec/autorun'
7
+ require 'factory_girl_rails'
8
+
9
+ Rails.backtrace_cleaner.remove_silencers!
10
+
11
+ # Load support files
12
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
13
+
14
+ RSpec.configure do |config|
15
+ config.mock_with :rspec
16
+ config.use_transactional_fixtures = true
17
+ config.infer_base_class_for_anonymous_controllers = false
18
+ config.order = "random"
19
+ end
metadata ADDED
@@ -0,0 +1,250 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: opawesome
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Alex Rehberg
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-05-21 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rails
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 3.2.13
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: 3.2.13
30
+ - !ruby/object:Gem::Dependency
31
+ name: sqlite3
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: rspec-rails
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: capybara
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: factory_girl_rails
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ type: :development
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ - !ruby/object:Gem::Dependency
95
+ name: shoulda-matchers
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ description: Website optimization for Rails apps
111
+ email:
112
+ - hi@alexrehberg.com
113
+ executables: []
114
+ extensions: []
115
+ extra_rdoc_files: []
116
+ files:
117
+ - app/assets/javascripts/opawesome/cookies.js
118
+ - app/assets/javascripts/opawesome.js
119
+ - app/controllers/opawesome/sessions_controller.rb
120
+ - app/controllers/opawesome/tests_controller.rb
121
+ - app/helpers/opawesome/sessions_helper.rb
122
+ - app/helpers/opawesome/tracker_helper.rb
123
+ - app/models/opawesome/test.rb
124
+ - app/models/opawesome/test_option.rb
125
+ - app/models/opawesome.rb
126
+ - app/views/opawesome/tests/_option_fields.html.erb
127
+ - app/views/opawesome/tests/edit.html.erb
128
+ - app/views/opawesome/tests/index.html.erb
129
+ - app/views/opawesome/tests/show.html.erb
130
+ - config/routes.rb
131
+ - db/migrate/20130519180140_create_opawesome_tests.rb
132
+ - db/migrate/20130519180402_create_opawesome_test_options.rb
133
+ - lib/opawesome/engine.rb
134
+ - lib/opawesome/version.rb
135
+ - lib/opawesome.rb
136
+ - lib/tasks/opawesome_tasks.rake
137
+ - MIT-LICENSE
138
+ - Rakefile
139
+ - README.rdoc
140
+ - spec/controllers/opawesome/sessions_controller_spec.rb
141
+ - spec/dummy/app/assets/javascripts/application.js
142
+ - spec/dummy/app/assets/stylesheets/application.css
143
+ - spec/dummy/app/controllers/application_controller.rb
144
+ - spec/dummy/app/helpers/application_helper.rb
145
+ - spec/dummy/app/views/layouts/application.html.erb
146
+ - spec/dummy/config/application.rb
147
+ - spec/dummy/config/boot.rb
148
+ - spec/dummy/config/database.yml
149
+ - spec/dummy/config/environment.rb
150
+ - spec/dummy/config/environments/development.rb
151
+ - spec/dummy/config/environments/production.rb
152
+ - spec/dummy/config/environments/test.rb
153
+ - spec/dummy/config/initializers/backtrace_silencers.rb
154
+ - spec/dummy/config/initializers/inflections.rb
155
+ - spec/dummy/config/initializers/mime_types.rb
156
+ - spec/dummy/config/initializers/secret_token.rb
157
+ - spec/dummy/config/initializers/session_store.rb
158
+ - spec/dummy/config/initializers/wrap_parameters.rb
159
+ - spec/dummy/config/locales/en.yml
160
+ - spec/dummy/config/routes.rb
161
+ - spec/dummy/config.ru
162
+ - spec/dummy/db/development.sqlite3
163
+ - spec/dummy/db/schema.rb
164
+ - spec/dummy/db/test.sqlite3
165
+ - spec/dummy/log/development.log
166
+ - spec/dummy/log/test.log
167
+ - spec/dummy/public/404.html
168
+ - spec/dummy/public/422.html
169
+ - spec/dummy/public/500.html
170
+ - spec/dummy/public/favicon.ico
171
+ - spec/dummy/Rakefile
172
+ - spec/dummy/README.rdoc
173
+ - spec/dummy/script/rails
174
+ - spec/factories/opawesome_test_options.rb
175
+ - spec/factories/opawesome_tests.rb
176
+ - spec/helpers/opawesome/tracker_helper_spec.rb
177
+ - spec/models/opawesome/test_option_spec.rb
178
+ - spec/models/opawesome/test_spec.rb
179
+ - spec/spec_helper.rb
180
+ homepage: https://github.com/arehberg/opawesome
181
+ licenses: []
182
+ post_install_message:
183
+ rdoc_options: []
184
+ require_paths:
185
+ - lib
186
+ required_ruby_version: !ruby/object:Gem::Requirement
187
+ none: false
188
+ requirements:
189
+ - - ! '>='
190
+ - !ruby/object:Gem::Version
191
+ version: '0'
192
+ segments:
193
+ - 0
194
+ hash: 4160377134662182425
195
+ required_rubygems_version: !ruby/object:Gem::Requirement
196
+ none: false
197
+ requirements:
198
+ - - ! '>='
199
+ - !ruby/object:Gem::Version
200
+ version: '0'
201
+ segments:
202
+ - 0
203
+ hash: 4160377134662182425
204
+ requirements: []
205
+ rubyforge_project:
206
+ rubygems_version: 1.8.25
207
+ signing_key:
208
+ specification_version: 3
209
+ summary: Website optimization for Rails apps
210
+ test_files:
211
+ - spec/controllers/opawesome/sessions_controller_spec.rb
212
+ - spec/dummy/app/assets/javascripts/application.js
213
+ - spec/dummy/app/assets/stylesheets/application.css
214
+ - spec/dummy/app/controllers/application_controller.rb
215
+ - spec/dummy/app/helpers/application_helper.rb
216
+ - spec/dummy/app/views/layouts/application.html.erb
217
+ - spec/dummy/config/application.rb
218
+ - spec/dummy/config/boot.rb
219
+ - spec/dummy/config/database.yml
220
+ - spec/dummy/config/environment.rb
221
+ - spec/dummy/config/environments/development.rb
222
+ - spec/dummy/config/environments/production.rb
223
+ - spec/dummy/config/environments/test.rb
224
+ - spec/dummy/config/initializers/backtrace_silencers.rb
225
+ - spec/dummy/config/initializers/inflections.rb
226
+ - spec/dummy/config/initializers/mime_types.rb
227
+ - spec/dummy/config/initializers/secret_token.rb
228
+ - spec/dummy/config/initializers/session_store.rb
229
+ - spec/dummy/config/initializers/wrap_parameters.rb
230
+ - spec/dummy/config/locales/en.yml
231
+ - spec/dummy/config/routes.rb
232
+ - spec/dummy/config.ru
233
+ - spec/dummy/db/development.sqlite3
234
+ - spec/dummy/db/schema.rb
235
+ - spec/dummy/db/test.sqlite3
236
+ - spec/dummy/log/development.log
237
+ - spec/dummy/log/test.log
238
+ - spec/dummy/public/404.html
239
+ - spec/dummy/public/422.html
240
+ - spec/dummy/public/500.html
241
+ - spec/dummy/public/favicon.ico
242
+ - spec/dummy/Rakefile
243
+ - spec/dummy/README.rdoc
244
+ - spec/dummy/script/rails
245
+ - spec/factories/opawesome_test_options.rb
246
+ - spec/factories/opawesome_tests.rb
247
+ - spec/helpers/opawesome/tracker_helper_spec.rb
248
+ - spec/models/opawesome/test_option_spec.rb
249
+ - spec/models/opawesome/test_spec.rb
250
+ - spec/spec_helper.rb