split 0.7.2 → 0.7.3
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.
- checksums.yaml +4 -4
- data/.travis.yml +1 -0
- data/Appraisals +1 -5
- data/CHANGELOG.mdown +34 -2
- data/README.mdown +18 -5
- data/gemfiles/3.0.gemfile +1 -2
- data/gemfiles/3.0.gemfile.lock +59 -31
- data/gemfiles/3.1.gemfile +1 -2
- data/gemfiles/3.1.gemfile.lock +56 -31
- data/gemfiles/3.2.gemfile +1 -2
- data/gemfiles/4.0.gemfile +1 -2
- data/lib/split/dashboard/helpers.rb +4 -0
- data/lib/split/dashboard/views/_experiment.erb +1 -1
- data/lib/split/helper.rb +11 -3
- data/lib/split/version.rb +1 -1
- data/spec/algorithms/weighted_sample_spec.rb +4 -4
- data/spec/algorithms/whiplash_spec.rb +8 -8
- data/spec/alternative_spec.rb +51 -51
- data/spec/configuration_spec.rb +26 -26
- data/spec/dashboard_helpers_spec.rb +7 -7
- data/spec/dashboard_spec.rb +21 -20
- data/spec/experiment_spec.rb +63 -63
- data/spec/helper_spec.rb +164 -145
- data/spec/metric_spec.rb +3 -3
- data/spec/persistence/cookie_adapter_spec.rb +5 -5
- data/spec/persistence/redis_adapter_spec.rb +7 -7
- data/spec/persistence/session_adapter_spec.rb +4 -4
- data/spec/persistence_spec.rb +8 -8
- data/spec/trial_spec.rb +14 -14
- data/split.gemspec +3 -3
- metadata +8 -10
- data/gemfiles/3.2.gemfile.lock +0 -123
- data/gemfiles/4.0.gemfile.lock +0 -118
data/spec/metric_spec.rb
CHANGED
@@ -5,7 +5,7 @@ describe Split::Metric do
|
|
5
5
|
describe 'possible experiments' do
|
6
6
|
it "should load the experiment if there is one, but no metric" do
|
7
7
|
experiment = Split::Experiment.find_or_create('color', 'red', 'blue')
|
8
|
-
Split::Metric.possible_experiments('color').
|
8
|
+
expect(Split::Metric.possible_experiments('color')).to eq([experiment])
|
9
9
|
end
|
10
10
|
|
11
11
|
it "should load the experiments in a metric" do
|
@@ -14,7 +14,7 @@ describe Split::Metric do
|
|
14
14
|
|
15
15
|
metric = Split::Metric.new(:name => 'purchase', :experiments => [experiment1, experiment2])
|
16
16
|
metric.save
|
17
|
-
Split::Metric.possible_experiments('purchase').
|
17
|
+
expect(Split::Metric.possible_experiments('purchase')).to include(experiment1, experiment2)
|
18
18
|
end
|
19
19
|
|
20
20
|
it "should load both the metric experiments and an experiment with the same name" do
|
@@ -23,7 +23,7 @@ describe Split::Metric do
|
|
23
23
|
|
24
24
|
metric = Split::Metric.new(:name => 'purchase', :experiments => [experiment2])
|
25
25
|
metric.save
|
26
|
-
Split::Metric.possible_experiments('purchase').
|
26
|
+
expect(Split::Metric.possible_experiments('purchase')).to include(experiment1, experiment2)
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
@@ -8,7 +8,7 @@ describe Split::Persistence::CookieAdapter do
|
|
8
8
|
describe "#[] and #[]=" do
|
9
9
|
it "should set and return the value for given key" do
|
10
10
|
subject["my_key"] = "my_value"
|
11
|
-
subject["my_key"].
|
11
|
+
expect(subject["my_key"]).to eq("my_value")
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
@@ -16,7 +16,7 @@ describe Split::Persistence::CookieAdapter do
|
|
16
16
|
it "should delete the given key" do
|
17
17
|
subject["my_key"] = "my_value"
|
18
18
|
subject.delete("my_key")
|
19
|
-
subject["my_key"].
|
19
|
+
expect(subject["my_key"]).to be_nil
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
@@ -24,15 +24,15 @@ describe Split::Persistence::CookieAdapter do
|
|
24
24
|
it "should return an array of the session's stored keys" do
|
25
25
|
subject["my_key"] = "my_value"
|
26
26
|
subject["my_second_key"] = "my_second_value"
|
27
|
-
subject.keys.
|
27
|
+
expect(subject.keys).to match(["my_key", "my_second_key"])
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
31
31
|
it "handles invalid JSON" do
|
32
32
|
context.cookies[:split] = { :value => '{"foo":2,', :expires => Time.now }
|
33
|
-
subject["my_key"].
|
33
|
+
expect(subject["my_key"]).to be_nil
|
34
34
|
subject["my_key"] = "my_value"
|
35
|
-
subject["my_key"].
|
35
|
+
expect(subject["my_key"]).to eq("my_value")
|
36
36
|
end
|
37
37
|
|
38
38
|
end
|
@@ -20,7 +20,7 @@ describe Split::Persistence::RedisAdapter do
|
|
20
20
|
before { Split::Persistence::RedisAdapter.with_config(:lookup_by => proc{'block'}) }
|
21
21
|
|
22
22
|
it 'should be "persistence:block"' do
|
23
|
-
subject.redis_key.
|
23
|
+
expect(subject.redis_key).to eq('persistence:block')
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
@@ -29,7 +29,7 @@ describe Split::Persistence::RedisAdapter do
|
|
29
29
|
let(:context) { double(:test => 'block') }
|
30
30
|
|
31
31
|
it 'should be "persistence:block"' do
|
32
|
-
subject.redis_key.
|
32
|
+
expect(subject.redis_key).to eq('persistence:block')
|
33
33
|
end
|
34
34
|
end
|
35
35
|
|
@@ -38,7 +38,7 @@ describe Split::Persistence::RedisAdapter do
|
|
38
38
|
let(:context) { double(:method_name => 'val') }
|
39
39
|
|
40
40
|
it 'should be "persistence:bar"' do
|
41
|
-
subject.redis_key.
|
41
|
+
expect(subject.redis_key).to eq('persistence:val')
|
42
42
|
end
|
43
43
|
end
|
44
44
|
|
@@ -46,7 +46,7 @@ describe Split::Persistence::RedisAdapter do
|
|
46
46
|
before { Split::Persistence::RedisAdapter.with_config(:lookup_by => proc{'frag'}, :namespace => 'namer') }
|
47
47
|
|
48
48
|
it 'should be "namer"' do
|
49
|
-
subject.redis_key.
|
49
|
+
expect(subject.redis_key).to eq('namer:frag')
|
50
50
|
end
|
51
51
|
end
|
52
52
|
end
|
@@ -57,7 +57,7 @@ describe Split::Persistence::RedisAdapter do
|
|
57
57
|
describe "#[] and #[]=" do
|
58
58
|
it "should set and return the value for given key" do
|
59
59
|
subject["my_key"] = "my_value"
|
60
|
-
subject["my_key"].
|
60
|
+
expect(subject["my_key"]).to eq("my_value")
|
61
61
|
end
|
62
62
|
end
|
63
63
|
|
@@ -65,7 +65,7 @@ describe Split::Persistence::RedisAdapter do
|
|
65
65
|
it "should delete the given key" do
|
66
66
|
subject["my_key"] = "my_value"
|
67
67
|
subject.delete("my_key")
|
68
|
-
subject["my_key"].
|
68
|
+
expect(subject["my_key"]).to be_nil
|
69
69
|
end
|
70
70
|
end
|
71
71
|
|
@@ -73,7 +73,7 @@ describe Split::Persistence::RedisAdapter do
|
|
73
73
|
it "should return an array of the user's stored keys" do
|
74
74
|
subject["my_key"] = "my_value"
|
75
75
|
subject["my_second_key"] = "my_second_value"
|
76
|
-
subject.keys.
|
76
|
+
expect(subject.keys).to match(["my_key", "my_second_key"])
|
77
77
|
end
|
78
78
|
end
|
79
79
|
|
@@ -8,7 +8,7 @@ describe Split::Persistence::SessionAdapter do
|
|
8
8
|
describe "#[] and #[]=" do
|
9
9
|
it "should set and return the value for given key" do
|
10
10
|
subject["my_key"] = "my_value"
|
11
|
-
subject["my_key"].
|
11
|
+
expect(subject["my_key"]).to eq("my_value")
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
@@ -16,7 +16,7 @@ describe Split::Persistence::SessionAdapter do
|
|
16
16
|
it "should delete the given key" do
|
17
17
|
subject["my_key"] = "my_value"
|
18
18
|
subject.delete("my_key")
|
19
|
-
subject["my_key"].
|
19
|
+
expect(subject["my_key"]).to be_nil
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
@@ -24,8 +24,8 @@ describe Split::Persistence::SessionAdapter do
|
|
24
24
|
it "should return an array of the session's stored keys" do
|
25
25
|
subject["my_key"] = "my_value"
|
26
26
|
subject["my_second_key"] = "my_second_value"
|
27
|
-
subject.keys.
|
27
|
+
expect(subject.keys).to match(["my_key", "my_second_key"])
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
31
|
-
end
|
31
|
+
end
|
data/spec/persistence_spec.rb
CHANGED
@@ -7,27 +7,27 @@ describe Split::Persistence do
|
|
7
7
|
describe ".adapter" do
|
8
8
|
context "when the persistence config is a symbol" do
|
9
9
|
it "should return the appropriate adapter for the symbol" do
|
10
|
-
Split.configuration.
|
11
|
-
subject.adapter.
|
10
|
+
expect(Split.configuration).to receive(:persistence).twice.and_return(:cookie)
|
11
|
+
expect(subject.adapter).to eq(Split::Persistence::CookieAdapter)
|
12
12
|
end
|
13
13
|
|
14
14
|
it "should return an adapter whose class is present in Split::Persistence::ADAPTERS" do
|
15
|
-
Split.configuration.
|
16
|
-
Split::Persistence::ADAPTERS.values.
|
15
|
+
expect(Split.configuration).to receive(:persistence).twice.and_return(:cookie)
|
16
|
+
expect(Split::Persistence::ADAPTERS.values).to include(subject.adapter)
|
17
17
|
end
|
18
18
|
|
19
19
|
it "should raise if the adapter cannot be found" do
|
20
|
-
Split.configuration.
|
20
|
+
expect(Split.configuration).to receive(:persistence).twice.and_return(:something_weird)
|
21
21
|
expect { subject.adapter }.to raise_error
|
22
22
|
end
|
23
23
|
end
|
24
24
|
context "when the persistence config is a class" do
|
25
25
|
let(:custom_adapter_class) { MyCustomAdapterClass = Class.new }
|
26
26
|
it "should return that class" do
|
27
|
-
Split.configuration.
|
28
|
-
subject.adapter.
|
27
|
+
expect(Split.configuration).to receive(:persistence).twice.and_return(custom_adapter_class)
|
28
|
+
expect(subject.adapter).to eq(MyCustomAdapterClass)
|
29
29
|
end
|
30
30
|
end
|
31
31
|
end
|
32
32
|
|
33
|
-
end
|
33
|
+
end
|
data/spec/trial_spec.rb
CHANGED
@@ -6,17 +6,17 @@ describe Split::Trial do
|
|
6
6
|
experiment = double('experiment')
|
7
7
|
alternative = double('alternative', :kind_of? => Split::Alternative)
|
8
8
|
trial = Split::Trial.new(:experiment => experiment, :alternative => alternative)
|
9
|
-
trial.experiment.
|
10
|
-
trial.alternative.
|
11
|
-
trial.goals.
|
9
|
+
expect(trial.experiment).to eq(experiment)
|
10
|
+
expect(trial.alternative).to eq(alternative)
|
11
|
+
expect(trial.goals).to eq([])
|
12
12
|
end
|
13
13
|
|
14
14
|
describe "alternative" do
|
15
15
|
it "should use the alternative if specified" do
|
16
16
|
alternative = double('alternative', :kind_of? => Split::Alternative)
|
17
17
|
trial = Split::Trial.new(:experiment => experiment = double('experiment'), :alternative => alternative)
|
18
|
-
trial.
|
19
|
-
trial.alternative.
|
18
|
+
expect(trial).not_to receive(:choose)
|
19
|
+
expect(trial.alternative).to eq(alternative)
|
20
20
|
end
|
21
21
|
|
22
22
|
it "should populate alternative with a full alternative object after calling choose" do
|
@@ -24,8 +24,8 @@ describe Split::Trial do
|
|
24
24
|
experiment.save
|
25
25
|
trial = Split::Trial.new(:experiment => experiment)
|
26
26
|
trial.choose
|
27
|
-
trial.alternative.class.
|
28
|
-
['basket', 'cart'].
|
27
|
+
expect(trial.alternative.class).to eq(Split::Alternative)
|
28
|
+
expect(['basket', 'cart']).to include(trial.alternative.name)
|
29
29
|
end
|
30
30
|
|
31
31
|
it "should populate an alternative when only one option is offerred" do
|
@@ -33,20 +33,20 @@ describe Split::Trial do
|
|
33
33
|
experiment.save
|
34
34
|
trial = Split::Trial.new(:experiment => experiment)
|
35
35
|
trial.choose
|
36
|
-
trial.alternative.class.
|
37
|
-
trial.alternative.name.
|
36
|
+
expect(trial.alternative.class).to eq(Split::Alternative)
|
37
|
+
expect(trial.alternative.name).to eq('basket')
|
38
38
|
end
|
39
39
|
|
40
40
|
|
41
41
|
it "should choose from the available alternatives" do
|
42
42
|
trial = Split::Trial.new(:experiment => experiment = double('experiment'))
|
43
43
|
alternative = double('alternative', :kind_of? => Split::Alternative)
|
44
|
-
experiment.
|
45
|
-
alternative.
|
46
|
-
experiment.
|
44
|
+
expect(experiment).to receive(:next_alternative).and_return(alternative)
|
45
|
+
expect(alternative).to receive(:increment_participation)
|
46
|
+
expect(experiment).to receive(:winner).at_most(1).times.and_return(nil)
|
47
47
|
trial.choose!
|
48
48
|
|
49
|
-
trial.alternative.
|
49
|
+
expect(trial.alternative).to eq(alternative)
|
50
50
|
end
|
51
51
|
end
|
52
52
|
|
@@ -56,7 +56,7 @@ describe Split::Trial do
|
|
56
56
|
experiment.save
|
57
57
|
|
58
58
|
trial = Split::Trial.new(:experiment => experiment, :alternative => 'basket')
|
59
|
-
trial.alternative.name.
|
59
|
+
expect(trial.alternative.name).to eq('basket')
|
60
60
|
end
|
61
61
|
end
|
62
62
|
end
|
data/split.gemspec
CHANGED
@@ -29,8 +29,8 @@ Gem::Specification.new do |s|
|
|
29
29
|
end
|
30
30
|
|
31
31
|
s.add_development_dependency 'rake'
|
32
|
-
s.add_development_dependency 'bundler', '~> 1.
|
33
|
-
s.add_development_dependency 'rspec', '~>
|
34
|
-
s.add_development_dependency 'rack-test'
|
32
|
+
s.add_development_dependency 'bundler', '~> 1.6'
|
33
|
+
s.add_development_dependency 'rspec', '~> 3.0'
|
34
|
+
s.add_development_dependency 'rack-test'
|
35
35
|
s.add_development_dependency 'coveralls'
|
36
36
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: split
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.7.
|
4
|
+
version: 0.7.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrew Nesbitt
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-09-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: redis
|
@@ -86,42 +86,42 @@ dependencies:
|
|
86
86
|
requirements:
|
87
87
|
- - "~>"
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version: '1.
|
89
|
+
version: '1.6'
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
94
|
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version: '1.
|
96
|
+
version: '1.6'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: rspec
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
101
|
- - "~>"
|
102
102
|
- !ruby/object:Gem::Version
|
103
|
-
version: '
|
103
|
+
version: '3.0'
|
104
104
|
type: :development
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
108
|
- - "~>"
|
109
109
|
- !ruby/object:Gem::Version
|
110
|
-
version: '
|
110
|
+
version: '3.0'
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
112
|
name: rack-test
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
115
|
- - ">="
|
116
116
|
- !ruby/object:Gem::Version
|
117
|
-
version: 0
|
117
|
+
version: '0'
|
118
118
|
type: :development
|
119
119
|
prerelease: false
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
122
122
|
- - ">="
|
123
123
|
- !ruby/object:Gem::Version
|
124
|
-
version: 0
|
124
|
+
version: '0'
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
126
|
name: coveralls
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
@@ -157,9 +157,7 @@ files:
|
|
157
157
|
- gemfiles/3.1.gemfile
|
158
158
|
- gemfiles/3.1.gemfile.lock
|
159
159
|
- gemfiles/3.2.gemfile
|
160
|
-
- gemfiles/3.2.gemfile.lock
|
161
160
|
- gemfiles/4.0.gemfile
|
162
|
-
- gemfiles/4.0.gemfile.lock
|
163
161
|
- lib/split.rb
|
164
162
|
- lib/split/algorithms.rb
|
165
163
|
- lib/split/algorithms/weighted_sample.rb
|
data/gemfiles/3.2.gemfile.lock
DELETED
@@ -1,123 +0,0 @@
|
|
1
|
-
PATH
|
2
|
-
remote: /Users/andrew/code/split
|
3
|
-
specs:
|
4
|
-
split (0.6.1)
|
5
|
-
redis (>= 2.1)
|
6
|
-
redis-namespace (>= 1.1.0)
|
7
|
-
simple-random
|
8
|
-
sinatra (>= 1.2.6)
|
9
|
-
|
10
|
-
GEM
|
11
|
-
remote: https://rubygems.org/
|
12
|
-
specs:
|
13
|
-
actionmailer (3.2.13)
|
14
|
-
actionpack (= 3.2.13)
|
15
|
-
mail (~> 2.5.3)
|
16
|
-
actionpack (3.2.13)
|
17
|
-
activemodel (= 3.2.13)
|
18
|
-
activesupport (= 3.2.13)
|
19
|
-
builder (~> 3.0.0)
|
20
|
-
erubis (~> 2.7.0)
|
21
|
-
journey (~> 1.0.4)
|
22
|
-
rack (~> 1.4.5)
|
23
|
-
rack-cache (~> 1.2)
|
24
|
-
rack-test (~> 0.6.1)
|
25
|
-
sprockets (~> 2.2.1)
|
26
|
-
activemodel (3.2.13)
|
27
|
-
activesupport (= 3.2.13)
|
28
|
-
builder (~> 3.0.0)
|
29
|
-
activerecord (3.2.13)
|
30
|
-
activemodel (= 3.2.13)
|
31
|
-
activesupport (= 3.2.13)
|
32
|
-
arel (~> 3.0.2)
|
33
|
-
tzinfo (~> 0.3.29)
|
34
|
-
activeresource (3.2.13)
|
35
|
-
activemodel (= 3.2.13)
|
36
|
-
activesupport (= 3.2.13)
|
37
|
-
activesupport (3.2.13)
|
38
|
-
i18n (= 0.6.1)
|
39
|
-
multi_json (~> 1.0)
|
40
|
-
appraisal (0.5.2)
|
41
|
-
bundler
|
42
|
-
rake
|
43
|
-
arel (3.0.2)
|
44
|
-
builder (3.0.4)
|
45
|
-
diff-lcs (1.2.4)
|
46
|
-
erubis (2.7.0)
|
47
|
-
hike (1.2.2)
|
48
|
-
i18n (0.6.1)
|
49
|
-
journey (1.0.4)
|
50
|
-
json (1.7.7)
|
51
|
-
mail (2.5.3)
|
52
|
-
i18n (>= 0.4.0)
|
53
|
-
mime-types (~> 1.16)
|
54
|
-
treetop (~> 1.4.8)
|
55
|
-
mime-types (1.23)
|
56
|
-
multi_json (1.7.2)
|
57
|
-
polyglot (0.3.3)
|
58
|
-
rack (1.4.5)
|
59
|
-
rack-cache (1.2)
|
60
|
-
rack (>= 0.4)
|
61
|
-
rack-protection (1.5.0)
|
62
|
-
rack
|
63
|
-
rack-ssl (1.3.3)
|
64
|
-
rack
|
65
|
-
rack-test (0.6.2)
|
66
|
-
rack (>= 1.0)
|
67
|
-
rails (3.2.13)
|
68
|
-
actionmailer (= 3.2.13)
|
69
|
-
actionpack (= 3.2.13)
|
70
|
-
activerecord (= 3.2.13)
|
71
|
-
activeresource (= 3.2.13)
|
72
|
-
activesupport (= 3.2.13)
|
73
|
-
bundler (~> 1.0)
|
74
|
-
railties (= 3.2.13)
|
75
|
-
railties (3.2.13)
|
76
|
-
actionpack (= 3.2.13)
|
77
|
-
activesupport (= 3.2.13)
|
78
|
-
rack-ssl (~> 1.3.2)
|
79
|
-
rake (>= 0.8.7)
|
80
|
-
rdoc (~> 3.4)
|
81
|
-
thor (>= 0.14.6, < 2.0)
|
82
|
-
rake (10.0.4)
|
83
|
-
rdoc (3.12.2)
|
84
|
-
json (~> 1.4)
|
85
|
-
redis (3.0.4)
|
86
|
-
redis-namespace (1.3.0)
|
87
|
-
redis (~> 3.0.0)
|
88
|
-
rspec (2.13.0)
|
89
|
-
rspec-core (~> 2.13.0)
|
90
|
-
rspec-expectations (~> 2.13.0)
|
91
|
-
rspec-mocks (~> 2.13.0)
|
92
|
-
rspec-core (2.13.1)
|
93
|
-
rspec-expectations (2.13.0)
|
94
|
-
diff-lcs (>= 1.1.3, < 2.0)
|
95
|
-
rspec-mocks (2.13.1)
|
96
|
-
simple-random (0.9.3)
|
97
|
-
sinatra (1.3.4)
|
98
|
-
rack (~> 1.4)
|
99
|
-
rack-protection (~> 1.3)
|
100
|
-
tilt (~> 1.3, >= 1.3.3)
|
101
|
-
sprockets (2.2.2)
|
102
|
-
hike (~> 1.2)
|
103
|
-
multi_json (~> 1.0)
|
104
|
-
rack (~> 1.0)
|
105
|
-
tilt (~> 1.1, != 1.3.0)
|
106
|
-
thor (0.18.1)
|
107
|
-
tilt (1.4.0)
|
108
|
-
treetop (1.4.12)
|
109
|
-
polyglot
|
110
|
-
polyglot (>= 0.3.1)
|
111
|
-
tzinfo (0.3.37)
|
112
|
-
|
113
|
-
PLATFORMS
|
114
|
-
ruby
|
115
|
-
|
116
|
-
DEPENDENCIES
|
117
|
-
appraisal
|
118
|
-
bundler (~> 1.3)
|
119
|
-
rack-test (>= 0.5.7)
|
120
|
-
rails (~> 3.2.13)
|
121
|
-
rake
|
122
|
-
rspec (~> 2.12)
|
123
|
-
split!
|