opawesome 0.0.1
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.
- data/MIT-LICENSE +20 -0
- data/README.rdoc +3 -0
- data/Rakefile +39 -0
- data/app/assets/javascripts/opawesome/cookies.js +141 -0
- data/app/assets/javascripts/opawesome.js +36 -0
- data/app/controllers/opawesome/sessions_controller.rb +16 -0
- data/app/controllers/opawesome/tests_controller.rb +31 -0
- data/app/helpers/opawesome/sessions_helper.rb +2 -0
- data/app/helpers/opawesome/tracker_helper.rb +56 -0
- data/app/models/opawesome/test.rb +47 -0
- data/app/models/opawesome/test_option.rb +19 -0
- data/app/models/opawesome.rb +5 -0
- data/app/views/opawesome/tests/_option_fields.html.erb +5 -0
- data/app/views/opawesome/tests/edit.html.erb +30 -0
- data/app/views/opawesome/tests/index.html.erb +11 -0
- data/app/views/opawesome/tests/show.html.erb +33 -0
- data/config/routes.rb +6 -0
- data/db/migrate/20130519180140_create_opawesome_tests.rb +13 -0
- data/db/migrate/20130519180402_create_opawesome_test_options.rb +12 -0
- data/lib/opawesome/engine.rb +14 -0
- data/lib/opawesome/version.rb +3 -0
- data/lib/opawesome.rb +7 -0
- data/lib/tasks/opawesome_tasks.rake +4 -0
- data/spec/controllers/opawesome/sessions_controller_spec.rb +50 -0
- data/spec/dummy/README.rdoc +261 -0
- data/spec/dummy/Rakefile +7 -0
- data/spec/dummy/app/assets/javascripts/application.js +15 -0
- data/spec/dummy/app/assets/stylesheets/application.css +13 -0
- data/spec/dummy/app/controllers/application_controller.rb +3 -0
- data/spec/dummy/app/helpers/application_helper.rb +2 -0
- data/spec/dummy/app/views/layouts/application.html.erb +14 -0
- data/spec/dummy/config/application.rb +65 -0
- data/spec/dummy/config/boot.rb +10 -0
- data/spec/dummy/config/database.yml +25 -0
- data/spec/dummy/config/environment.rb +5 -0
- data/spec/dummy/config/environments/development.rb +37 -0
- data/spec/dummy/config/environments/production.rb +67 -0
- data/spec/dummy/config/environments/test.rb +37 -0
- data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/dummy/config/initializers/inflections.rb +15 -0
- data/spec/dummy/config/initializers/mime_types.rb +5 -0
- data/spec/dummy/config/initializers/secret_token.rb +7 -0
- data/spec/dummy/config/initializers/session_store.rb +8 -0
- data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/spec/dummy/config/locales/en.yml +5 -0
- data/spec/dummy/config/routes.rb +58 -0
- data/spec/dummy/config.ru +4 -0
- data/spec/dummy/db/development.sqlite3 +0 -0
- data/spec/dummy/db/schema.rb +34 -0
- data/spec/dummy/db/test.sqlite3 +0 -0
- data/spec/dummy/log/development.log +155 -0
- data/spec/dummy/log/test.log +1258 -0
- data/spec/dummy/public/404.html +26 -0
- data/spec/dummy/public/422.html +26 -0
- data/spec/dummy/public/500.html +25 -0
- data/spec/dummy/public/favicon.ico +0 -0
- data/spec/dummy/script/rails +6 -0
- data/spec/factories/opawesome_test_options.rb +8 -0
- data/spec/factories/opawesome_tests.rb +8 -0
- data/spec/helpers/opawesome/tracker_helper_spec.rb +163 -0
- data/spec/models/opawesome/test_option_spec.rb +31 -0
- data/spec/models/opawesome/test_spec.rb +41 -0
- data/spec/spec_helper.rb +19 -0
- 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,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
|
data/spec/spec_helper.rb
ADDED
@@ -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
|