switchman 1.1.0 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (46) hide show
  1. checksums.yaml +8 -8
  2. data/app/models/switchman/shard.rb +10 -3
  3. data/lib/switchman/active_record/association.rb +36 -10
  4. data/lib/switchman/active_record/base.rb +9 -5
  5. data/lib/switchman/active_record/calculations.rb +12 -11
  6. data/lib/switchman/active_record/connection_handler.rb +102 -47
  7. data/lib/switchman/active_record/finder_methods.rb +1 -1
  8. data/lib/switchman/active_record/query_methods.rb +50 -25
  9. data/lib/switchman/active_record/relation.rb +4 -4
  10. data/lib/switchman/active_record/spawn_methods.rb +76 -29
  11. data/lib/switchman/connection_pool_proxy.rb +2 -1
  12. data/lib/switchman/database_server.rb +4 -2
  13. data/lib/switchman/engine.rb +1 -1
  14. data/lib/switchman/r_spec_helper.rb +14 -6
  15. data/lib/switchman/rails.rb +7 -9
  16. data/lib/switchman/test_helper.rb +4 -3
  17. data/lib/switchman/version.rb +1 -1
  18. data/spec/dummy/app/models/appendage.rb +2 -4
  19. data/spec/dummy/app/models/digit.rb +2 -4
  20. data/spec/dummy/app/models/feature.rb +0 -2
  21. data/spec/dummy/app/models/user.rb +0 -2
  22. data/spec/dummy/config/application.rb +0 -6
  23. data/spec/dummy/config/environments/development.rb +2 -9
  24. data/spec/dummy/config/environments/production.rb +2 -3
  25. data/spec/dummy/config/environments/test.rb +2 -11
  26. data/spec/dummy/config/routes.rb +2 -2
  27. data/spec/dummy/log/test.log +9947 -0
  28. data/spec/dummy/tmp/cache/375/530/shard%2F3200 +1 -0
  29. data/spec/dummy/tmp/cache/37A/590/shard%2F3214 +1 -0
  30. data/spec/dummy/tmp/cache/37E/620/shard%2F3182 +0 -0
  31. data/spec/dummy/tmp/cache/381/650/shard%2F3185 +1 -0
  32. data/spec/dummy/tmp/cache/382/650/shard%2F3177 +1 -0
  33. data/spec/dummy/tmp/cache/386/6B0/shard%2F3199 +1 -0
  34. data/spec/dummy/tmp/cache/3A6/F80/shard%2F13200 +1 -0
  35. data/spec/dummy/tmp/cache/3B0/080/shard%2F13183 +1 -0
  36. data/spec/dummy/tmp/cache/3B1/070/shard%2F13166 +1 -0
  37. data/spec/lib/active_record/association_spec.rb +21 -11
  38. data/spec/lib/active_record/finder_methods_spec.rb +1 -1
  39. data/spec/lib/active_record/query_cache_spec.rb +17 -17
  40. data/spec/lib/active_record/query_methods_spec.rb +6 -5
  41. data/spec/lib/active_record/relation_spec.rb +1 -1
  42. data/spec/lib/active_record/spawn_methods_spec.rb +5 -4
  43. data/spec/lib/connection_pool_proxy_spec.rb +2 -0
  44. data/spec/lib/database_server_spec.rb +12 -4
  45. data/spec/lib/shackles_spec.rb +8 -6
  46. metadata +61 -11
@@ -0,0 +1 @@
1
+ o: ActiveSupport::Cache::Entry: @value{ I"id:ETi� I" name;TI"switchman_test_shard_3200;TI"database_server_id;TI"1;TI" default;TF:@created_atf1395766435.695145:@expires_in0
@@ -0,0 +1 @@
1
+ o: ActiveSupport::Cache::Entry: @value:nil:@created_atf1395766435.522779:@expires_in0
@@ -0,0 +1 @@
1
+ o: ActiveSupport::Cache::Entry :@compressedF:@expires_in0:@created_atf1395766408.469534: @value" :nil
@@ -0,0 +1 @@
1
+ o: ActiveSupport::Cache::Entry :@compressedF:@expires_in0:@created_atf1395678017.3012779: @value" :nil
@@ -0,0 +1 @@
1
+ o: ActiveSupport::Cache::Entry: @value{ I"id:ETi I" name;TI"switchman_test_shard_3199;TI"database_server_id;TI" test;TI" default;TF:@created_atf1395766435.693439:@expires_in0
@@ -0,0 +1 @@
1
+ o: ActiveSupport::Cache::Entry: @value:nil:@created_atf1395766435.380675:@expires_in0
@@ -0,0 +1 @@
1
+ o: ActiveSupport::Cache::Entry :@compressedF:@expires_in0:@created_atf1395766408.394197: @value" :nil
@@ -0,0 +1 @@
1
+ o: ActiveSupport::Cache::Entry :@compressedF:@expires_in0:@created_atf1395678017.240988: @value" :nil
@@ -25,7 +25,8 @@ module Switchman
25
25
  end
26
26
 
27
27
  it "should set shard value to parent for association scope" do
28
- scope = @user1.appendages.scoped
28
+ scope = @user1.appendages
29
+ scope = ::Rails.version < '4' ? scope.scoped : scope.scope
29
30
  scope.shard_value.should == @user1
30
31
  scope.shard_source_value.should == :association
31
32
  end
@@ -39,9 +40,10 @@ module Switchman
39
40
 
40
41
  describe "transaction" do
41
42
  it "should activate the owner's shard and start the transaction on that shard" do
43
+ base_value = @user1.shard.activate { User.connection.open_transactions }
42
44
  @user1.appendages.transaction(:requires_new => true) do
43
45
  Shard.current.should == @shard1
44
- User.connection.open_transactions.should == 2
46
+ User.connection.open_transactions.should == base_value + 1
45
47
  end
46
48
  end
47
49
  end
@@ -66,7 +68,11 @@ module Switchman
66
68
  d1 = a1.digits.create!
67
69
  d1.shard.should == @shard1
68
70
 
69
- @user1.digits.scoped.shard_value.should == @user1
71
+ if ::Rails.version < '4'
72
+ @user1.digits.scoped.shard_value.should == @user1
73
+ else
74
+ @user1.digits.scope.shard_value.should == @user1
75
+ end
70
76
  @user1.digits.find(d1.id).should == d1
71
77
  end
72
78
 
@@ -99,9 +105,15 @@ module Switchman
99
105
  it "should properly set up a cross-shard-category query" do
100
106
  @shard1.activate(:mirror_universe) do
101
107
  mirror_user = MirrorUser.create!
102
- relation = mirror_user.association(:user).scoped
108
+ relation = mirror_user.association(:user)
109
+ relation = ::Rails.version < '4' ? relation.scoped : relation.scope
103
110
  relation.shard_value.should == Shard.default
104
- relation.where_values.first.right.should == mirror_user.global_id
111
+ if ::Rails.version < '4'
112
+ relation.where_values.first.right.should == mirror_user.global_id
113
+ else
114
+ relation.where_values.first.right.should be_a(Arel::Nodes::BindParam)
115
+ relation.bind_values.map(&:last).should == [mirror_user.global_id]
116
+ end
105
117
  end
106
118
  end
107
119
 
@@ -229,12 +241,10 @@ module Switchman
229
241
  user3 = User.create!
230
242
  user3.appendages.create!
231
243
 
232
- appendages = Appendage.all(:include => :user)
233
- appendages2 = Appendage.includes(:user).all
244
+ appendages = Appendage.includes(:user).to_a
234
245
  @user1.delete
235
246
 
236
247
  appendages.map(&:user).sort.should == [@user1, @user2, user3].sort
237
- appendages2.map(&:user).sort.should == [@user1, @user2, user3].sort
238
248
  end
239
249
 
240
250
  it "should preload belongs_to :through associations across shards" do
@@ -244,7 +254,7 @@ module Switchman
244
254
  a2 = @shard1.activate {Appendage.create!(:user => @user2) }
245
255
  d2 = Digit.create!(:appendage => a2)
246
256
 
247
- digits = Digit.includes(:user).all
257
+ digits = Digit.includes(:user).to_a
248
258
  @user1.delete
249
259
 
250
260
  digits.map(&:user).sort.should == [@user1, @user2].sort
@@ -258,7 +268,7 @@ module Switchman
258
268
  User.associated_shards_map = { @user1.global_id => [@shard1, @shard2] }
259
269
 
260
270
  begin
261
- users = User.where(:id => [@user1, @user2]).includes(:appendages).all
271
+ users = User.where(:id => [@user1, @user2]).includes(:appendages).to_a
262
272
  users.each {|u| u.appendages.loaded?.should be_true}
263
273
 
264
274
  u1 = users.detect {|u| u.id == @user1.id}
@@ -294,7 +304,7 @@ module Switchman
294
304
  Appendage.associated_shards_map = { a2.global_id => [@shard1, @shard2], a6.global_id => [@shard1] }
295
305
 
296
306
  begin
297
- users = User.where(:id => [@user1, @user2]).includes(:digits).all
307
+ users = User.where(:id => [@user1, @user2]).includes(:digits).to_a
298
308
  users.each {|u| u.digits.loaded?.should be_true}
299
309
 
300
310
  u1 = users.detect {|u| u.id == @user1.id}
@@ -43,7 +43,7 @@ module Switchman
43
43
 
44
44
  it "should work for a multi-shard scope" do
45
45
  user2 = @shard2.activate { User.create!(name: "multi-shard exists") }
46
- User.where(name: "multi-shard exists").shard(Shard.scoped).exists?.should be_true
46
+ User.where(name: "multi-shard exists").shard(::Rails.version < '4' ? Shard.scoped : Shard.all).exists?.should be_true
47
47
  end
48
48
  end
49
49
  end
@@ -52,7 +52,7 @@ module Switchman
52
52
  @shard3.activate do
53
53
  User.create!
54
54
  end
55
- @shard1.activate { User.all }.should_not == @shard3.activate { User.all }
55
+ @shard1.activate { User.all.to_a }.should_not == @shard3.activate { User.all.to_a }
56
56
  end
57
57
 
58
58
  describe "query_cache_enabled" do
@@ -167,13 +167,13 @@ module Switchman
167
167
  describe "select_all" do
168
168
  it "should cache when query cache enabled" do
169
169
  User.connection.enable_query_cache!
170
- User.all
170
+ User.all.to_a
171
171
  User.connection.query_cache.should_not be_empty
172
172
  end
173
173
 
174
174
  it "should not cache when query cache disabled" do
175
175
  User.connection.disable_query_cache!
176
- User.all
176
+ User.all.to_a
177
177
  User.connection.query_cache.should be_empty
178
178
  end
179
179
 
@@ -181,12 +181,12 @@ module Switchman
181
181
  User.connection.disable_query_cache!
182
182
  threaded(
183
183
  lambda{ |cc| User.connection.cache{ cc.call } },
184
- lambda{ User.all; User.connection.query_cache.should be_empty })
184
+ lambda{ User.all.to_a; User.connection.query_cache.should be_empty })
185
185
  end
186
186
 
187
187
  it "should not cache when query is locked" do
188
188
  User.connection.enable_query_cache!
189
- User.lock.all
189
+ User.lock.to_a
190
190
  User.connection.query_cache.should be_empty
191
191
  end
192
192
  end
@@ -194,14 +194,14 @@ module Switchman
194
194
  describe "insert" do
195
195
  it "should clear thread's query cache if enabled" do
196
196
  User.connection.enable_query_cache!
197
- User.all
197
+ User.all.to_a
198
198
  User.create!
199
199
  User.connection.query_cache.should be_empty
200
200
  end
201
201
 
202
202
  it "should not clear thread's query cache if disabled" do
203
203
  User.connection.enable_query_cache!
204
- User.all
204
+ User.all.to_a
205
205
  User.connection.disable_query_cache!
206
206
  User.create!
207
207
  User.connection.query_cache.should_not be_empty
@@ -209,7 +209,7 @@ module Switchman
209
209
 
210
210
  it "should not clear thread's query cache if disabled but other thread's enabled" do
211
211
  User.connection.enable_query_cache!
212
- User.all
212
+ User.all.to_a
213
213
  User.connection.disable_query_cache!
214
214
  threaded(
215
215
  lambda{ |cc| User.create!; cc.call },
@@ -218,7 +218,7 @@ module Switchman
218
218
 
219
219
  it "should not clear other thread's query cache" do
220
220
  User.connection.enable_query_cache!
221
- User.all
221
+ User.all.to_a
222
222
  User.connection.disable_query_cache!
223
223
  threaded(
224
224
  lambda{ |cc| User.create!; cc.call },
@@ -233,14 +233,14 @@ module Switchman
233
233
 
234
234
  it "should clear thread's query cache if enabled" do
235
235
  User.connection.enable_query_cache!
236
- User.all
236
+ User.all.to_a
237
237
  User.update_all(updated_at: Time.now)
238
238
  User.connection.query_cache.should be_empty
239
239
  end
240
240
 
241
241
  it "should not clear thread's query cache if disabled" do
242
242
  User.connection.enable_query_cache!
243
- User.all
243
+ User.all.to_a
244
244
  User.connection.disable_query_cache!
245
245
  User.update_all(updated_at: Time.now)
246
246
  User.connection.query_cache.should_not be_empty
@@ -257,7 +257,7 @@ module Switchman
257
257
 
258
258
  it "should not clear thread's query cache if disabled but other thread's enabled" do
259
259
  User.connection.enable_query_cache!
260
- User.all
260
+ User.all.to_a
261
261
  User.connection.disable_query_cache!
262
262
  threaded(
263
263
  lambda{ |cc| User.update_all(updated_at: Time.now); cc.call },
@@ -266,7 +266,7 @@ module Switchman
266
266
 
267
267
  it "should not clear other thread's query cache" do
268
268
  User.connection.enable_query_cache!
269
- User.all
269
+ User.all.to_a
270
270
  User.connection.disable_query_cache!
271
271
  threaded(
272
272
  lambda{ |cc| User.update_all(updated_at: Time.now); cc.call },
@@ -282,14 +282,14 @@ module Switchman
282
282
 
283
283
  it "should clear thread's query cache if enabled" do
284
284
  User.connection.enable_query_cache!
285
- User.all
285
+ User.all.to_a
286
286
  User.delete_all
287
287
  User.connection.query_cache.should be_empty
288
288
  end
289
289
 
290
290
  it "should not clear thread's query cache if disabled" do
291
291
  User.connection.enable_query_cache!
292
- User.all
292
+ User.all.to_a
293
293
  User.connection.disable_query_cache!
294
294
  User.delete_all
295
295
  User.connection.query_cache.should_not be_empty
@@ -306,7 +306,7 @@ module Switchman
306
306
 
307
307
  it "should not clear thread's query cache if disabled but other thread's enabled" do
308
308
  User.connection.enable_query_cache!
309
- User.all
309
+ User.all.to_a
310
310
  User.connection.disable_query_cache!
311
311
  threaded(
312
312
  lambda{ |cc| User.delete_all; cc.call },
@@ -315,7 +315,7 @@ module Switchman
315
315
 
316
316
  it "should not clear other thread's query cache" do
317
317
  User.connection.enable_query_cache!
318
- User.all
318
+ User.all.to_a
319
319
  User.connection.disable_query_cache!
320
320
  threaded(
321
321
  lambda{ |cc| User.delete_all; cc.call },
@@ -31,22 +31,22 @@ module Switchman
31
31
  end
32
32
 
33
33
  it "should be the default shard if it's a scope of Shard" do
34
- User.shard(Shard.scoped).primary_shard.should == Shard.default
34
+ User.shard(::Rails.version < '4' ? Shard.scoped : Shard.all).primary_shard.should == Shard.default
35
35
  @shard1.activate do
36
- User.shard(Shard.scoped).primary_shard.should == Shard.default
36
+ User.shard(::Rails.version < '4' ? Shard.scoped : Shard.all).primary_shard.should == Shard.default
37
37
  end
38
38
  end
39
39
  end
40
40
 
41
41
  it "should default to the current shard" do
42
- relation = User.scoped
42
+ relation = ::Rails.version < '4' ? User.scoped : User.all
43
43
  relation.shard_value.should == Shard.default
44
44
  relation.shard_source_value.should == :implicit
45
45
 
46
46
  @shard1.activate do
47
47
  relation.shard_value.should == Shard.default
48
48
 
49
- relation = User.scoped
49
+ relation = ::Rails.version < '4' ? User.scoped : User.all
50
50
  relation.shard_value.should == @shard1
51
51
  relation.shard_source_value.should == :implicit
52
52
  end
@@ -145,7 +145,8 @@ module Switchman
145
145
  grandchild = child.children.create!
146
146
  child.reload.parent.should == @user1
147
147
 
148
- relation = @user1.association(:grandchildren).scoped
148
+ relation = @user1.association(:grandchildren)
149
+ relation = ::Rails.version < '4' ? relation.scoped : relation.scope
149
150
 
150
151
  attribute = relation.where_values.first.left
151
152
  attribute.name.to_s.should == 'parent_id'
@@ -16,7 +16,7 @@ module Switchman
16
16
  end
17
17
 
18
18
  it "should activate multiple shards if necessary" do
19
- User.where(:id => [@user1.id, @user2.id]).all.sort_by(&:id).should == [@user1, @user2].sort_by(&:id)
19
+ User.where(:id => [@user1.id, @user2.id]).sort_by(&:id).should == [@user1, @user2].sort_by(&:id)
20
20
  end
21
21
  end
22
22
 
@@ -20,20 +20,21 @@ module Switchman
20
20
  end
21
21
 
22
22
  it "should ignore implicit shard value lhs" do
23
- result = User.scoped.merge(User.shard(@shard1))
23
+ scope = ::Rails.version < '4' ? User.scoped : User.all
24
+ result = scope.merge(User.shard(@shard1))
24
25
  result.shard_value.should == @shard1
25
26
  result.shard_source_value.should == :explicit
26
27
  end
27
28
 
28
29
  it "should ignore implicit shard value rhs" do
29
- result = User.shard(@shard1).merge(User.scoped)
30
+ result = User.shard(@shard1).merge(::Rails.version < '4' ? User.scoped : User.all)
30
31
  result.shard_value.should == @shard1
31
32
  result.shard_source_value.should == :explicit
32
33
  end
33
34
 
34
35
  it "should take lhs shard_value for double implicit" do
35
- scope1 = @shard2.activate { User.scoped }
36
- result = scope1.merge(User.scoped)
36
+ scope1 = @shard2.activate { ::Rails.version < '4' ? User.scoped : User.all }
37
+ result = scope1.merge(::Rails.version < '4' ? User.scoped : User.all)
37
38
  result.shard_value.should == @shard2
38
39
  result.shard_source_value.should == :implicit
39
40
  end
@@ -2,6 +2,8 @@ require "spec_helper"
2
2
 
3
3
  module Switchman
4
4
  describe ConnectionPoolProxy do
5
+ include RSpecHelper
6
+
5
7
  it "should not share connections for sqlite shards on the same db" do
6
8
  @db = DatabaseServer.create(:config => { :adapter => 'sqlite3', :database => ':memory:' })
7
9
  @sqlite_shard1 = @db.shards.create!
@@ -66,8 +66,12 @@ module Switchman
66
66
  end
67
67
 
68
68
  it "should be able to create a new sqlite shard from a given server" do
69
- @db = DatabaseServer.create(:config => { :adapter => 'sqlite3', :database => '%{shard_name}', :shard_name => ':memory:' })
70
- create_shard(@db)
69
+ db = DatabaseServer.create(:config => { :adapter => 'sqlite3', :database => '%{shard_name}', :shard_name => ':memory:' })
70
+ begin
71
+ create_shard(db)
72
+ ensure
73
+ db.destroy
74
+ end
71
75
  end
72
76
 
73
77
  context "non-transactional" do
@@ -83,8 +87,12 @@ module Switchman
83
87
  pending 'A "real" database"' unless %w{MySQL Mysql2 PostgreSQL}.include?(adapter)
84
88
 
85
89
  # So, it's really the same server, but we want separate connections
86
- server = DatabaseServer.create(:config => Shard.default.database_server.config)
87
- create_shard(server)
90
+ db = DatabaseServer.create(:config => Shard.default.database_server.config)
91
+ begin
92
+ create_shard(db)
93
+ ensure
94
+ db.destroy
95
+ end
88
96
  end
89
97
 
90
98
  class MyException < Exception; end
@@ -23,11 +23,13 @@ module Switchman
23
23
  end
24
24
 
25
25
  it "should correctly set up pools for sharding categories" do
26
- models = ::ActiveRecord::Base.connection_handler.connection_pools
27
- default_pools = Hash[models.map { |k, v| [k, v.current_pool] }]
26
+ models = ::ActiveRecord::Base.connection_handler.send(:class_to_pool)
27
+ default_pools = {}
28
+ models.each_pair { |k, v| default_pools[k] = v.current_pool }
28
29
  ::Shackles.activate(:slave_that_no_one_else_uses) do
29
- models = ::ActiveRecord::Base.connection_handler.connection_pools
30
- pools = Hash[models.map { |k, v| [k, v.current_pool] }]
30
+ models = ::ActiveRecord::Base.connection_handler.send(:class_to_pool)
31
+ pools = {}
32
+ models.each_pair { |k, v| pools[k] = v.current_pool }
31
33
  default_pools.keys.sort.should == pools.keys.sort
32
34
  default_pools.keys.each do |model|
33
35
  default_pools[model].should_not == pools[model]
@@ -71,7 +73,7 @@ module Switchman
71
73
 
72
74
  u = User.create!
73
75
  Shard.default.database_server.expects(:unshackle).once.returns([])
74
- User.scoped(lock: true).first
76
+ User.lock.first
75
77
  Shard.default.database_server.expects(:unshackle).once.returns([])
76
78
  lambda { u.lock! }.should raise_error(::ActiveRecord::RecordNotFound)
77
79
  ensure
@@ -143,7 +145,7 @@ module Switchman
143
145
  end
144
146
 
145
147
  def actual_connection_count
146
- ::ActiveRecord::Base.connection_pool.current_pool.instance_variable_get(:@reserved_connections).length
148
+ ::ActiveRecord::Base.connection_pool.current_pool.instance_variable_get(:@reserved_connections).size
147
149
  end
148
150
 
149
151
  it "should really return active connections to the pool in all envs" do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: switchman
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cody Cutrer
@@ -10,36 +10,68 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2014-03-21 00:00:00.000000000 Z
13
+ date: 2014-03-25 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
- name: rails
16
+ name: railties
17
17
  requirement: !ruby/object:Gem::Requirement
18
18
  requirements:
19
- - - ~>
19
+ - - ! '>='
20
20
  - !ruby/object:Gem::Version
21
- version: 3.2.13
21
+ version: '3.2'
22
+ - - <
23
+ - !ruby/object:Gem::Version
24
+ version: '4.1'
22
25
  type: :runtime
23
26
  prerelease: false
24
27
  version_requirements: !ruby/object:Gem::Requirement
25
28
  requirements:
26
- - - ~>
29
+ - - ! '>='
30
+ - !ruby/object:Gem::Version
31
+ version: '3.2'
32
+ - - <
27
33
  - !ruby/object:Gem::Version
28
- version: 3.2.13
34
+ version: '4.1'
35
+ - !ruby/object:Gem::Dependency
36
+ name: activerecord
37
+ requirement: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ! '>='
40
+ - !ruby/object:Gem::Version
41
+ version: '3.2'
42
+ - - <
43
+ - !ruby/object:Gem::Version
44
+ version: '4.1'
45
+ type: :runtime
46
+ prerelease: false
47
+ version_requirements: !ruby/object:Gem::Requirement
48
+ requirements:
49
+ - - ! '>='
50
+ - !ruby/object:Gem::Version
51
+ version: '3.2'
52
+ - - <
53
+ - !ruby/object:Gem::Version
54
+ version: '4.1'
29
55
  - !ruby/object:Gem::Dependency
30
56
  name: shackles
31
57
  requirement: !ruby/object:Gem::Requirement
32
58
  requirements:
33
- - - ~>
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: 1.0.3
62
+ - - <
34
63
  - !ruby/object:Gem::Version
35
- version: 1.0.2
64
+ version: '2'
36
65
  type: :runtime
37
66
  prerelease: false
38
67
  version_requirements: !ruby/object:Gem::Requirement
39
68
  requirements:
40
- - - ~>
69
+ - - ! '>='
70
+ - !ruby/object:Gem::Version
71
+ version: 1.0.3
72
+ - - <
41
73
  - !ruby/object:Gem::Version
42
- version: 1.0.2
74
+ version: '2'
43
75
  - !ruby/object:Gem::Dependency
44
76
  name: debugger
45
77
  requirement: !ruby/object:Gem::Requirement
@@ -383,6 +415,7 @@ files:
383
415
  - spec/dummy/tmp/cache/374/490/shard%2F1012
384
416
  - spec/dummy/tmp/cache/375/4C0/shard%2F2003
385
417
  - spec/dummy/tmp/cache/375/510/shard%2F1400
418
+ - spec/dummy/tmp/cache/375/530/shard%2F3200
386
419
  - spec/dummy/tmp/cache/376/4E0/shard%2F1041
387
420
  - spec/dummy/tmp/cache/376/4E0/shard%2F1203
388
421
  - spec/dummy/tmp/cache/376/4F0/shard%2F1212
@@ -449,6 +482,7 @@ files:
449
482
  - spec/dummy/tmp/cache/37A/580/shard%2F1261
450
483
  - spec/dummy/tmp/cache/37A/580/shard%2F3043
451
484
  - spec/dummy/tmp/cache/37A/590/shard%2F3052
485
+ - spec/dummy/tmp/cache/37A/590/shard%2F3214
452
486
  - spec/dummy/tmp/cache/37A/5A0/shard%2F3061
453
487
  - spec/dummy/tmp/cache/37A/5B0/shard%2F3070
454
488
  - spec/dummy/tmp/cache/37A/5C0/shard%2F1702
@@ -543,6 +577,7 @@ files:
543
577
  - spec/dummy/tmp/cache/37E/610/shard%2F2606
544
578
  - spec/dummy/tmp/cache/37E/620/shard%2F1805
545
579
  - spec/dummy/tmp/cache/37E/620/shard%2F2615
580
+ - spec/dummy/tmp/cache/37E/620/shard%2F3182
546
581
  - spec/dummy/tmp/cache/37E/630/shard%2F2624
547
582
  - spec/dummy/tmp/cache/37E/630/shard%2F2705
548
583
  - spec/dummy/tmp/cache/37E/640/shard%2F1661
@@ -614,6 +649,7 @@ files:
614
649
  - spec/dummy/tmp/cache/381/640/shard%2F2609
615
650
  - spec/dummy/tmp/cache/381/640/shard%2F3095
616
651
  - spec/dummy/tmp/cache/381/650/shard%2F1565
652
+ - spec/dummy/tmp/cache/381/650/shard%2F3185
617
653
  - spec/dummy/tmp/cache/381/660/shard%2F1493
618
654
  - spec/dummy/tmp/cache/381/660/shard%2F2627
619
655
  - spec/dummy/tmp/cache/381/670/shard%2F1745
@@ -637,6 +673,7 @@ files:
637
673
  - spec/dummy/tmp/cache/382/640/shard%2F2196
638
674
  - spec/dummy/tmp/cache/382/650/shard%2F1557
639
675
  - spec/dummy/tmp/cache/382/650/shard%2F3096
676
+ - spec/dummy/tmp/cache/382/650/shard%2F3177
640
677
  - spec/dummy/tmp/cache/382/660/shard%2F2376
641
678
  - spec/dummy/tmp/cache/382/670/shard%2F2628
642
679
  - spec/dummy/tmp/cache/382/690/shard%2F1674
@@ -681,6 +718,7 @@ files:
681
718
  - spec/dummy/tmp/cache/385/6F0/shard%2F2595
682
719
  - spec/dummy/tmp/cache/385/710/shard%2F2694
683
720
  - spec/dummy/tmp/cache/386/690/shard%2F1399
721
+ - spec/dummy/tmp/cache/386/6B0/shard%2F3199
684
722
  - spec/dummy/tmp/cache/386/6C0/shard%2F2479
685
723
  - spec/dummy/tmp/cache/386/6D0/shard%2F1759
686
724
  - spec/dummy/tmp/cache/386/6F0/shard%2F1858
@@ -700,6 +738,7 @@ files:
700
738
  - spec/dummy/tmp/cache/3A5/ED0/shard%2F10031
701
739
  - spec/dummy/tmp/cache/3A6/EB0/shard%2F10005
702
740
  - spec/dummy/tmp/cache/3A6/ED0/shard%2F10104
741
+ - spec/dummy/tmp/cache/3A6/F80/shard%2F13200
703
742
  - spec/dummy/tmp/cache/3A7/EC0/shard%2F10006
704
743
  - spec/dummy/tmp/cache/3A7/F10/shard%2F10051
705
744
  - spec/dummy/tmp/cache/3A8/F50/shard%2F10322
@@ -752,6 +791,7 @@ files:
752
791
  - spec/dummy/tmp/cache/3B0/010/shard%2F12229
753
792
  - spec/dummy/tmp/cache/3B0/040/shard%2F10636
754
793
  - spec/dummy/tmp/cache/3B0/060/shard%2F11626
794
+ - spec/dummy/tmp/cache/3B0/080/shard%2F13183
755
795
  - spec/dummy/tmp/cache/3B0/0A0/shard%2F12634
756
796
  - spec/dummy/tmp/cache/3B0/0B0/shard%2F10942
757
797
  - spec/dummy/tmp/cache/3B0/FC0/shard%2F10159
@@ -760,6 +800,7 @@ files:
760
800
  - spec/dummy/tmp/cache/3B1/050/shard%2F11609
761
801
  - spec/dummy/tmp/cache/3B1/070/shard%2F10574
762
802
  - spec/dummy/tmp/cache/3B1/070/shard%2F11465
803
+ - spec/dummy/tmp/cache/3B1/070/shard%2F13166
763
804
  - spec/dummy/tmp/cache/3B1/090/shard%2F12536
764
805
  - spec/dummy/tmp/cache/3B1/0A0/shard%2F11492
765
806
  - spec/dummy/tmp/cache/3B1/0A0/shard%2F11654
@@ -1212,6 +1253,7 @@ test_files:
1212
1253
  - spec/dummy/tmp/cache/374/490/shard%2F1012
1213
1254
  - spec/dummy/tmp/cache/375/4C0/shard%2F2003
1214
1255
  - spec/dummy/tmp/cache/375/510/shard%2F1400
1256
+ - spec/dummy/tmp/cache/375/530/shard%2F3200
1215
1257
  - spec/dummy/tmp/cache/376/4E0/shard%2F1041
1216
1258
  - spec/dummy/tmp/cache/376/4E0/shard%2F1203
1217
1259
  - spec/dummy/tmp/cache/376/4F0/shard%2F1212
@@ -1278,6 +1320,7 @@ test_files:
1278
1320
  - spec/dummy/tmp/cache/37A/580/shard%2F1261
1279
1321
  - spec/dummy/tmp/cache/37A/580/shard%2F3043
1280
1322
  - spec/dummy/tmp/cache/37A/590/shard%2F3052
1323
+ - spec/dummy/tmp/cache/37A/590/shard%2F3214
1281
1324
  - spec/dummy/tmp/cache/37A/5A0/shard%2F3061
1282
1325
  - spec/dummy/tmp/cache/37A/5B0/shard%2F3070
1283
1326
  - spec/dummy/tmp/cache/37A/5C0/shard%2F1702
@@ -1372,6 +1415,7 @@ test_files:
1372
1415
  - spec/dummy/tmp/cache/37E/610/shard%2F2606
1373
1416
  - spec/dummy/tmp/cache/37E/620/shard%2F1805
1374
1417
  - spec/dummy/tmp/cache/37E/620/shard%2F2615
1418
+ - spec/dummy/tmp/cache/37E/620/shard%2F3182
1375
1419
  - spec/dummy/tmp/cache/37E/630/shard%2F2624
1376
1420
  - spec/dummy/tmp/cache/37E/630/shard%2F2705
1377
1421
  - spec/dummy/tmp/cache/37E/640/shard%2F1661
@@ -1443,6 +1487,7 @@ test_files:
1443
1487
  - spec/dummy/tmp/cache/381/640/shard%2F2609
1444
1488
  - spec/dummy/tmp/cache/381/640/shard%2F3095
1445
1489
  - spec/dummy/tmp/cache/381/650/shard%2F1565
1490
+ - spec/dummy/tmp/cache/381/650/shard%2F3185
1446
1491
  - spec/dummy/tmp/cache/381/660/shard%2F1493
1447
1492
  - spec/dummy/tmp/cache/381/660/shard%2F2627
1448
1493
  - spec/dummy/tmp/cache/381/670/shard%2F1745
@@ -1466,6 +1511,7 @@ test_files:
1466
1511
  - spec/dummy/tmp/cache/382/640/shard%2F2196
1467
1512
  - spec/dummy/tmp/cache/382/650/shard%2F1557
1468
1513
  - spec/dummy/tmp/cache/382/650/shard%2F3096
1514
+ - spec/dummy/tmp/cache/382/650/shard%2F3177
1469
1515
  - spec/dummy/tmp/cache/382/660/shard%2F2376
1470
1516
  - spec/dummy/tmp/cache/382/670/shard%2F2628
1471
1517
  - spec/dummy/tmp/cache/382/690/shard%2F1674
@@ -1510,6 +1556,7 @@ test_files:
1510
1556
  - spec/dummy/tmp/cache/385/6F0/shard%2F2595
1511
1557
  - spec/dummy/tmp/cache/385/710/shard%2F2694
1512
1558
  - spec/dummy/tmp/cache/386/690/shard%2F1399
1559
+ - spec/dummy/tmp/cache/386/6B0/shard%2F3199
1513
1560
  - spec/dummy/tmp/cache/386/6C0/shard%2F2479
1514
1561
  - spec/dummy/tmp/cache/386/6D0/shard%2F1759
1515
1562
  - spec/dummy/tmp/cache/386/6F0/shard%2F1858
@@ -1529,6 +1576,7 @@ test_files:
1529
1576
  - spec/dummy/tmp/cache/3A5/ED0/shard%2F10031
1530
1577
  - spec/dummy/tmp/cache/3A6/EB0/shard%2F10005
1531
1578
  - spec/dummy/tmp/cache/3A6/ED0/shard%2F10104
1579
+ - spec/dummy/tmp/cache/3A6/F80/shard%2F13200
1532
1580
  - spec/dummy/tmp/cache/3A7/EC0/shard%2F10006
1533
1581
  - spec/dummy/tmp/cache/3A7/F10/shard%2F10051
1534
1582
  - spec/dummy/tmp/cache/3A8/F50/shard%2F10322
@@ -1581,6 +1629,7 @@ test_files:
1581
1629
  - spec/dummy/tmp/cache/3B0/010/shard%2F12229
1582
1630
  - spec/dummy/tmp/cache/3B0/040/shard%2F10636
1583
1631
  - spec/dummy/tmp/cache/3B0/060/shard%2F11626
1632
+ - spec/dummy/tmp/cache/3B0/080/shard%2F13183
1584
1633
  - spec/dummy/tmp/cache/3B0/0A0/shard%2F12634
1585
1634
  - spec/dummy/tmp/cache/3B0/0B0/shard%2F10942
1586
1635
  - spec/dummy/tmp/cache/3B0/FC0/shard%2F10159
@@ -1589,6 +1638,7 @@ test_files:
1589
1638
  - spec/dummy/tmp/cache/3B1/050/shard%2F11609
1590
1639
  - spec/dummy/tmp/cache/3B1/070/shard%2F10574
1591
1640
  - spec/dummy/tmp/cache/3B1/070/shard%2F11465
1641
+ - spec/dummy/tmp/cache/3B1/070/shard%2F13166
1592
1642
  - spec/dummy/tmp/cache/3B1/090/shard%2F12536
1593
1643
  - spec/dummy/tmp/cache/3B1/0A0/shard%2F11492
1594
1644
  - spec/dummy/tmp/cache/3B1/0A0/shard%2F11654