split 3.3.2 → 4.0.0.pre2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. checksums.yaml +4 -4
  2. data/.eslintrc +1 -1
  3. data/.github/FUNDING.yml +1 -0
  4. data/.github/ISSUE_TEMPLATE/bug_report.md +24 -0
  5. data/.github/dependabot.yml +7 -0
  6. data/.github/workflows/ci.yml +61 -0
  7. data/.rspec +1 -0
  8. data/.rubocop.yml +71 -1044
  9. data/.rubocop_todo.yml +226 -0
  10. data/Appraisals +1 -1
  11. data/CHANGELOG.md +62 -0
  12. data/CODE_OF_CONDUCT.md +3 -3
  13. data/Gemfile +2 -0
  14. data/README.md +40 -18
  15. data/Rakefile +2 -0
  16. data/gemfiles/6.0.gemfile +1 -1
  17. data/lib/split/algorithms/block_randomization.rb +2 -0
  18. data/lib/split/algorithms/weighted_sample.rb +2 -1
  19. data/lib/split/algorithms/whiplash.rb +3 -2
  20. data/lib/split/alternative.rb +4 -3
  21. data/lib/split/cache.rb +28 -0
  22. data/lib/split/combined_experiments_helper.rb +2 -1
  23. data/lib/split/configuration.rb +13 -14
  24. data/lib/split/dashboard/helpers.rb +1 -0
  25. data/lib/split/dashboard/pagination_helpers.rb +3 -3
  26. data/lib/split/dashboard/paginator.rb +1 -0
  27. data/lib/split/dashboard/public/dashboard.js +10 -0
  28. data/lib/split/dashboard/public/style.css +5 -0
  29. data/lib/split/dashboard/views/_controls.erb +13 -0
  30. data/lib/split/dashboard/views/layout.erb +1 -1
  31. data/lib/split/dashboard.rb +19 -1
  32. data/lib/split/encapsulated_helper.rb +3 -2
  33. data/lib/split/engine.rb +7 -4
  34. data/lib/split/exceptions.rb +1 -0
  35. data/lib/split/experiment.rb +98 -65
  36. data/lib/split/experiment_catalog.rb +1 -3
  37. data/lib/split/extensions/string.rb +1 -0
  38. data/lib/split/goals_collection.rb +2 -0
  39. data/lib/split/helper.rb +28 -8
  40. data/lib/split/metric.rb +2 -1
  41. data/lib/split/persistence/cookie_adapter.rb +6 -1
  42. data/lib/split/persistence/dual_adapter.rb +54 -12
  43. data/lib/split/persistence/redis_adapter.rb +5 -0
  44. data/lib/split/persistence/session_adapter.rb +1 -0
  45. data/lib/split/persistence.rb +4 -2
  46. data/lib/split/redis_interface.rb +9 -28
  47. data/lib/split/trial.rb +21 -11
  48. data/lib/split/user.rb +20 -4
  49. data/lib/split/version.rb +2 -4
  50. data/lib/split/zscore.rb +1 -0
  51. data/lib/split.rb +9 -3
  52. data/spec/alternative_spec.rb +1 -1
  53. data/spec/cache_spec.rb +88 -0
  54. data/spec/configuration_spec.rb +17 -15
  55. data/spec/dashboard/pagination_helpers_spec.rb +3 -1
  56. data/spec/dashboard_helpers_spec.rb +2 -2
  57. data/spec/dashboard_spec.rb +78 -17
  58. data/spec/encapsulated_helper_spec.rb +2 -2
  59. data/spec/experiment_spec.rb +116 -12
  60. data/spec/goals_collection_spec.rb +1 -1
  61. data/spec/helper_spec.rb +186 -112
  62. data/spec/persistence/cookie_adapter_spec.rb +1 -1
  63. data/spec/persistence/dual_adapter_spec.rb +160 -68
  64. data/spec/persistence/redis_adapter_spec.rb +9 -0
  65. data/spec/redis_interface_spec.rb +0 -69
  66. data/spec/spec_helper.rb +5 -6
  67. data/spec/trial_spec.rb +45 -19
  68. data/spec/user_spec.rb +45 -3
  69. data/split.gemspec +8 -9
  70. metadata +28 -36
  71. data/.travis.yml +0 -66
  72. data/gemfiles/4.2.gemfile +0 -9
@@ -60,6 +60,15 @@ describe Split::Persistence::RedisAdapter do
60
60
  end
61
61
  end
62
62
 
63
+ describe '#find' do
64
+ before { Split::Persistence::RedisAdapter.with_config(:lookup_by => proc{'frag'}, :namespace => 'a_namespace') }
65
+
66
+ it "should create and user from a given key" do
67
+ adapter = Split::Persistence::RedisAdapter.find(2)
68
+ expect(adapter.redis_key).to eq("a_namespace:2")
69
+ end
70
+ end
71
+
63
72
  context 'functional tests' do
64
73
  before { Split::Persistence::RedisAdapter.with_config(:lookup_by => 'lookup') }
65
74
 
@@ -29,75 +29,6 @@ describe Split::RedisInterface do
29
29
  end
30
30
  end
31
31
 
32
- describe '#add_to_list' do
33
- subject(:add_to_list) do
34
- interface.add_to_list(list_name, 'y')
35
- interface.add_to_list(list_name, 'z')
36
- end
37
-
38
- specify do
39
- add_to_list
40
- expect(Split.redis.lindex(list_name, 0)).to eq 'y'
41
- expect(Split.redis.lindex(list_name, 1)).to eq 'z'
42
- expect(Split.redis.llen(list_name)).to eq 2
43
- end
44
- end
45
-
46
- describe '#set_list_index' do
47
- subject(:set_list_index) do
48
- interface.add_to_list(list_name, 'y')
49
- interface.add_to_list(list_name, 'z')
50
- interface.set_list_index(list_name, 0, 'a')
51
- end
52
-
53
- specify do
54
- set_list_index
55
- expect(Split.redis.lindex(list_name, 0)).to eq 'a'
56
- expect(Split.redis.lindex(list_name, 1)).to eq 'z'
57
- expect(Split.redis.llen(list_name)).to eq 2
58
- end
59
- end
60
-
61
- describe '#list_length' do
62
- subject(:list_length) do
63
- interface.add_to_list(list_name, 'y')
64
- interface.add_to_list(list_name, 'z')
65
- interface.list_length(list_name)
66
- end
67
-
68
- specify do
69
- expect(list_length).to eq 2
70
- end
71
- end
72
-
73
- describe '#remove_last_item_from_list' do
74
- subject(:remove_last_item_from_list) do
75
- interface.add_to_list(list_name, 'y')
76
- interface.add_to_list(list_name, 'z')
77
- interface.remove_last_item_from_list(list_name)
78
- end
79
-
80
- specify do
81
- remove_last_item_from_list
82
- expect(Split.redis.lindex(list_name, 0)).to eq 'y'
83
- expect(Split.redis.llen(list_name)).to eq 1
84
- end
85
- end
86
-
87
- describe '#make_list_length' do
88
- subject(:make_list_length) do
89
- interface.add_to_list(list_name, 'y')
90
- interface.add_to_list(list_name, 'z')
91
- interface.make_list_length(list_name, 1)
92
- end
93
-
94
- specify do
95
- make_list_length
96
- expect(Split.redis.lindex(list_name, 0)).to eq 'y'
97
- expect(Split.redis.llen(list_name)).to eq 1
98
- end
99
- end
100
-
101
32
  describe '#add_to_set' do
102
33
  subject(:add_to_set) do
103
34
  interface.add_to_set(set_name, 'something')
data/spec/spec_helper.rb CHANGED
@@ -13,17 +13,16 @@ require 'yaml'
13
13
 
14
14
  Dir['./spec/support/*.rb'].each { |f| require f }
15
15
 
16
- require "fakeredis"
17
-
18
- G_fakeredis = Redis.new
19
-
20
16
  module GlobalSharedContext
21
17
  extend RSpec::SharedContext
22
18
  let(:mock_user){ Split::User.new(double(session: {})) }
19
+
23
20
  before(:each) do
24
21
  Split.configuration = Split::Configuration.new
25
- Split.redis = G_fakeredis
26
- Split.redis.flushall
22
+ Split.redis = Redis.new
23
+ Split.redis.select(10)
24
+ Split.redis.flushdb
25
+ Split::Cache.clear
27
26
  @ab_user = mock_user
28
27
  params = nil
29
28
  end
data/spec/trial_spec.rb CHANGED
@@ -198,42 +198,68 @@ describe Split::Trial do
198
198
  expect(trial.alternative.name).to_not be_empty
199
199
  Split.configuration.on_trial_choose = nil
200
200
  end
201
+
202
+ it "assigns user to an alternative" do
203
+ trial.choose! context
204
+
205
+ expect(alternatives).to include(user[experiment.name])
206
+ end
207
+
208
+ context "when cohorting is disabled" do
209
+ before(:each) { allow(experiment).to receive(:cohorting_disabled?).and_return(true) }
210
+
211
+ it "picks the control and does not run on_trial callbacks" do
212
+ Split.configuration.on_trial = :on_trial_callback
213
+
214
+ expect(experiment).to_not receive(:next_alternative)
215
+ expect(context).not_to receive(:on_trial_callback)
216
+ expect_alternative(trial, 'basket')
217
+
218
+ Split.configuration.enabled = true
219
+ Split.configuration.on_trial = nil
220
+ end
221
+
222
+ it "user is not assigned an alternative" do
223
+ trial.choose! context
224
+
225
+ expect(user[experiment]).to eq(nil)
226
+ end
227
+ end
201
228
  end
202
229
  end
203
230
 
204
231
  describe "#complete!" do
205
- let(:trial) { Split::Trial.new(:user => user, :experiment => experiment) }
206
232
  context 'when there are no goals' do
233
+ let(:trial) { Split::Trial.new(:user => user, :experiment => experiment) }
207
234
  it 'should complete the trial' do
208
235
  trial.choose!
209
236
  old_completed_count = trial.alternative.completed_count
210
237
  trial.complete!
211
- expect(trial.alternative.completed_count).to be(old_completed_count+1)
238
+ expect(trial.alternative.completed_count).to eq(old_completed_count + 1)
212
239
  end
213
240
  end
214
241
 
215
- context 'when there are many goals' do
216
- let(:goals) { ['first', 'second'] }
242
+ context "when there are many goals" do
243
+ let(:goals) { [ "goal1", "goal2" ] }
217
244
  let(:trial) { Split::Trial.new(:user => user, :experiment => experiment, :goals => goals) }
218
- shared_examples_for "goal completion" do
219
- it 'should not complete the trial' do
220
- trial.choose!
221
- old_completed_count = trial.alternative.completed_count
222
- trial.complete!(goal)
223
- expect(trial.alternative.completed_count).to_not be(old_completed_count+1)
224
- end
225
- end
226
245
 
227
- describe 'Array of Goals' do
228
- let(:goal) { [goals.first] }
229
- it_behaves_like 'goal completion'
246
+ it "increments the completed count corresponding to the goals" do
247
+ trial.choose!
248
+ old_completed_counts = goals.map{ |goal| [goal, trial.alternative.completed_count(goal)] }.to_h
249
+ trial.complete!
250
+ goals.each { | goal | expect(trial.alternative.completed_count(goal)).to eq(old_completed_counts[goal] + 1) }
230
251
  end
252
+ end
231
253
 
232
- describe 'String of Goal' do
233
- let(:goal) { goals.first }
234
- it_behaves_like 'goal completion'
254
+ context "when there is 1 goal of type string" do
255
+ let(:goal) { "goal" }
256
+ let(:trial) { Split::Trial.new(:user => user, :experiment => experiment, :goals => goal) }
257
+ it "increments the completed count corresponding to the goal" do
258
+ trial.choose!
259
+ old_completed_count = trial.alternative.completed_count(goal)
260
+ trial.complete!
261
+ expect(trial.alternative.completed_count(goal)).to eq(old_completed_count + 1)
235
262
  end
236
-
237
263
  end
238
264
  end
239
265
 
data/spec/user_spec.rb CHANGED
@@ -17,11 +17,25 @@ describe Split::User do
17
17
  end
18
18
 
19
19
  context '#cleanup_old_versions!' do
20
- let(:user_keys) { { 'link_color:1' => 'blue' } }
20
+ let(:experiment_version) { "#{experiment.name}:1" }
21
+ let(:second_experiment_version) { "#{experiment.name}_another:1" }
22
+ let(:third_experiment_version) { "variation_of_#{experiment.name}:1" }
23
+ let(:user_keys) do
24
+ {
25
+ experiment_version => 'blue',
26
+ second_experiment_version => 'red',
27
+ third_experiment_version => 'yellow'
28
+ }
29
+ end
30
+
31
+ before(:each) { @subject.cleanup_old_versions!(experiment) }
21
32
 
22
33
  it 'removes key if old experiment is found' do
23
- @subject.cleanup_old_versions!(experiment)
24
- expect(@subject.keys).to be_empty
34
+ expect(@subject.keys).not_to include(experiment_version)
35
+ end
36
+
37
+ it 'does not remove other keys' do
38
+ expect(@subject.keys).to include(second_experiment_version, third_experiment_version)
25
39
  end
26
40
  end
27
41
 
@@ -59,6 +73,34 @@ describe Split::User do
59
73
  expect(@subject.keys).to include("link_color:finished")
60
74
  end
61
75
  end
76
+
77
+ context 'when already cleaned up' do
78
+ before do
79
+ @subject.cleanup_old_experiments!
80
+ end
81
+
82
+ it 'does not clean up again' do
83
+ expect(@subject).to_not receive(:keys_without_finished)
84
+ @subject.cleanup_old_experiments!
85
+ end
86
+ end
87
+ end
88
+
89
+ context 'allows user to be loaded from adapter' do
90
+ it 'loads user from adapter (RedisAdapter)' do
91
+ user = Split::Persistence::RedisAdapter.new(nil, 112233)
92
+ user['foo'] = 'bar'
93
+
94
+ ab_user = Split::User.find(112233, :redis)
95
+
96
+ expect(ab_user['foo']).to eql('bar')
97
+ end
98
+
99
+ it 'returns nil if adapter does not implement a finder method' do
100
+ ab_user = Split::User.find(112233, :dual_adapter)
101
+ expect(ab_user).to be_nil
102
+ end
103
+
62
104
  end
63
105
 
64
106
  context "instantiated with custom adapter" do
data/split.gemspec CHANGED
@@ -1,4 +1,6 @@
1
1
  # -*- encoding: utf-8 -*-
2
+ # frozen_string_literal: true
3
+
2
4
  $:.push File.expand_path("../lib", __FILE__)
3
5
  require "split/version"
4
6
 
@@ -21,25 +23,22 @@ Gem::Specification.new do |s|
21
23
  "mailing_list_uri" => "https://groups.google.com/d/forum/split-ruby"
22
24
  }
23
25
 
24
- s.required_ruby_version = '>= 1.9.3'
26
+ s.required_ruby_version = '>= 2.5.0'
25
27
  s.required_rubygems_version = '>= 2.0.0'
26
28
 
27
- s.rubyforge_project = "split"
28
-
29
29
  s.files = `git ls-files`.split("\n")
30
30
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
31
31
  s.require_paths = ["lib"]
32
32
 
33
- s.add_dependency 'redis', '>= 2.1'
33
+ s.add_dependency 'redis', '>= 4.2'
34
34
  s.add_dependency 'sinatra', '>= 1.2.6'
35
- s.add_dependency 'simple-random', '>= 0.9.3'
35
+ s.add_dependency 'rubystats', '>= 0.3.0'
36
36
 
37
37
  s.add_development_dependency 'bundler', '>= 1.17'
38
38
  s.add_development_dependency 'simplecov', '~> 0.15'
39
- s.add_development_dependency 'rack-test', '~> 0.6'
40
- s.add_development_dependency 'rake', '~> 12'
39
+ s.add_development_dependency 'rack-test', '~> 1.1'
40
+ s.add_development_dependency 'rake', '~> 13'
41
41
  s.add_development_dependency 'rspec', '~> 3.7'
42
42
  s.add_development_dependency 'pry', '~> 0.10'
43
- s.add_development_dependency 'fakeredis', '~> 0.7'
44
- s.add_development_dependency 'rails', '>= 4.2'
43
+ s.add_development_dependency 'rails', '>= 5.0'
45
44
  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: 3.3.2
4
+ version: 4.0.0.pre2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Nesbitt
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-04-12 00:00:00.000000000 Z
11
+ date: 2021-11-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: redis
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '2.1'
19
+ version: '4.2'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '2.1'
26
+ version: '4.2'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: sinatra
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -39,19 +39,19 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: 1.2.6
41
41
  - !ruby/object:Gem::Dependency
42
- name: simple-random
42
+ name: rubystats
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: 0.9.3
47
+ version: 0.3.0
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
- version: 0.9.3
54
+ version: 0.3.0
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: bundler
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -86,28 +86,28 @@ dependencies:
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: '0.6'
89
+ version: '1.1'
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: '0.6'
96
+ version: '1.1'
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: rake
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: '12'
103
+ version: '13'
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: '12'
110
+ version: '13'
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: rspec
113
113
  requirement: !ruby/object:Gem::Requirement
@@ -136,35 +136,21 @@ dependencies:
136
136
  - - "~>"
137
137
  - !ruby/object:Gem::Version
138
138
  version: '0.10'
139
- - !ruby/object:Gem::Dependency
140
- name: fakeredis
141
- requirement: !ruby/object:Gem::Requirement
142
- requirements:
143
- - - "~>"
144
- - !ruby/object:Gem::Version
145
- version: '0.7'
146
- type: :development
147
- prerelease: false
148
- version_requirements: !ruby/object:Gem::Requirement
149
- requirements:
150
- - - "~>"
151
- - !ruby/object:Gem::Version
152
- version: '0.7'
153
139
  - !ruby/object:Gem::Dependency
154
140
  name: rails
155
141
  requirement: !ruby/object:Gem::Requirement
156
142
  requirements:
157
143
  - - ">="
158
144
  - !ruby/object:Gem::Version
159
- version: '4.2'
145
+ version: '5.0'
160
146
  type: :development
161
147
  prerelease: false
162
148
  version_requirements: !ruby/object:Gem::Requirement
163
149
  requirements:
164
150
  - - ">="
165
151
  - !ruby/object:Gem::Version
166
- version: '4.2'
167
- description:
152
+ version: '5.0'
153
+ description:
168
154
  email:
169
155
  - andrewnez@gmail.com
170
156
  executables: []
@@ -175,9 +161,14 @@ files:
175
161
  - ".csslintrc"
176
162
  - ".eslintignore"
177
163
  - ".eslintrc"
164
+ - ".github/FUNDING.yml"
165
+ - ".github/ISSUE_TEMPLATE/bug_report.md"
166
+ - ".github/dependabot.yml"
167
+ - ".github/workflows/ci.yml"
178
168
  - ".gitignore"
169
+ - ".rspec"
179
170
  - ".rubocop.yml"
180
- - ".travis.yml"
171
+ - ".rubocop_todo.yml"
181
172
  - Appraisals
182
173
  - CHANGELOG.md
183
174
  - CODE_OF_CONDUCT.md
@@ -186,7 +177,6 @@ files:
186
177
  - LICENSE
187
178
  - README.md
188
179
  - Rakefile
189
- - gemfiles/4.2.gemfile
190
180
  - gemfiles/5.0.gemfile
191
181
  - gemfiles/5.1.gemfile
192
182
  - gemfiles/5.2.gemfile
@@ -196,6 +186,7 @@ files:
196
186
  - lib/split/algorithms/weighted_sample.rb
197
187
  - lib/split/algorithms/whiplash.rb
198
188
  - lib/split/alternative.rb
189
+ - lib/split/cache.rb
199
190
  - lib/split/combined_experiments_helper.rb
200
191
  - lib/split/configuration.rb
201
192
  - lib/split/dashboard.rb
@@ -235,6 +226,7 @@ files:
235
226
  - spec/algorithms/weighted_sample_spec.rb
236
227
  - spec/algorithms/whiplash_spec.rb
237
228
  - spec/alternative_spec.rb
229
+ - spec/cache_spec.rb
238
230
  - spec/combined_experiments_helper_spec.rb
239
231
  - spec/configuration_spec.rb
240
232
  - spec/dashboard/pagination_helpers_spec.rb
@@ -269,7 +261,7 @@ metadata:
269
261
  bug_tracker_uri: https://github.com/splitrb/split/issues
270
262
  wiki_uri: https://github.com/splitrb/split/wiki
271
263
  mailing_list_uri: https://groups.google.com/d/forum/split-ruby
272
- post_install_message:
264
+ post_install_message:
273
265
  rdoc_options: []
274
266
  require_paths:
275
267
  - lib
@@ -277,16 +269,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
277
269
  requirements:
278
270
  - - ">="
279
271
  - !ruby/object:Gem::Version
280
- version: 1.9.3
272
+ version: 2.5.0
281
273
  required_rubygems_version: !ruby/object:Gem::Requirement
282
274
  requirements:
283
275
  - - ">="
284
276
  - !ruby/object:Gem::Version
285
277
  version: 2.0.0
286
278
  requirements: []
287
- rubyforge_project: split
288
- rubygems_version: 2.7.6
289
- signing_key:
279
+ rubygems_version: 3.1.4
280
+ signing_key:
290
281
  specification_version: 4
291
282
  summary: Rack based split testing framework
292
283
  test_files:
@@ -294,6 +285,7 @@ test_files:
294
285
  - spec/algorithms/weighted_sample_spec.rb
295
286
  - spec/algorithms/whiplash_spec.rb
296
287
  - spec/alternative_spec.rb
288
+ - spec/cache_spec.rb
297
289
  - spec/combined_experiments_helper_spec.rb
298
290
  - spec/configuration_spec.rb
299
291
  - spec/dashboard/pagination_helpers_spec.rb
data/.travis.yml DELETED
@@ -1,66 +0,0 @@
1
- language: ruby
2
- rvm:
3
- - 1.9.3
4
- - 2.0
5
- - 2.1.10
6
- - 2.2.0
7
- - 2.2.2
8
- - 2.4.5
9
- - 2.5.3
10
- - 2.6.0
11
-
12
- gemfile:
13
- - gemfiles/4.2.gemfile
14
- - gemfiles/5.0.gemfile
15
- - gemfiles/5.1.gemfile
16
- - gemfiles/5.2.gemfile
17
- - gemfiles/6.0.gemfile
18
-
19
-
20
- matrix:
21
- exclude:
22
- - rvm: 1.9.3
23
- gemfile: gemfiles/5.0.gemfile
24
- - rvm: 1.9.3
25
- gemfile: gemfiles/5.1.gemfile
26
- - rvm: 1.9.3
27
- gemfile: gemfiles/5.2.gemfile
28
- - rvm: 1.9.3
29
- gemfile: gemfiles/6.0.gemfile
30
- - rvm: 2.0
31
- gemfile: gemfiles/5.0.gemfile
32
- - rvm: 2.0
33
- gemfile: gemfiles/5.1.gemfile
34
- - rvm: 2.0
35
- gemfile: gemfiles/5.2.gemfile
36
- - rvm: 2.0
37
- gemfile: gemfiles/6.0.gemfile
38
- - rvm: 2.1.10
39
- gemfile: gemfiles/5.0.gemfile
40
- - rvm: 2.1.10
41
- gemfile: gemfiles/5.1.gemfile
42
- - rvm: 2.1.10
43
- gemfile: gemfiles/5.2.gemfile
44
- - rvm: 2.1.10
45
- gemfile: gemfiles/6.0.gemfile
46
- - rvm: 2.2.0
47
- gemfile: gemfiles/5.0.gemfile
48
- - rvm: 2.2.0
49
- gemfile: gemfiles/5.1.gemfile
50
- - rvm: 2.2.0
51
- gemfile: gemfiles/5.2.gemfile
52
- - rvm: 2.2.0
53
- gemfile: gemfiles/6.0.gemfile
54
- - rvm: 2.2.2
55
- gemfile: gemfiles/6.0.gemfile
56
- - rvm: 2.4.5
57
- gemfile: gemfiles/6.0.gemfile
58
-
59
- before_install:
60
- - gem install bundler --version=1.17.3
61
-
62
- script:
63
- - RAILS_ENV=test bundle exec rake spec && bundle exec codeclimate-test-reporter
64
-
65
- cache: bundler
66
- sudo: false
data/gemfiles/4.2.gemfile DELETED
@@ -1,9 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "https://rubygems.org"
4
-
5
- gem "appraisal"
6
- gem "codeclimate-test-reporter"
7
- gem "rails", "~> 4.2"
8
-
9
- gemspec path: "../"