split 3.3.2 → 4.0.0.pre2

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