switchman 1.1.0 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/app/models/switchman/shard.rb +10 -3
- data/lib/switchman/active_record/association.rb +36 -10
- data/lib/switchman/active_record/base.rb +9 -5
- data/lib/switchman/active_record/calculations.rb +12 -11
- data/lib/switchman/active_record/connection_handler.rb +102 -47
- data/lib/switchman/active_record/finder_methods.rb +1 -1
- data/lib/switchman/active_record/query_methods.rb +50 -25
- data/lib/switchman/active_record/relation.rb +4 -4
- data/lib/switchman/active_record/spawn_methods.rb +76 -29
- data/lib/switchman/connection_pool_proxy.rb +2 -1
- data/lib/switchman/database_server.rb +4 -2
- data/lib/switchman/engine.rb +1 -1
- data/lib/switchman/r_spec_helper.rb +14 -6
- data/lib/switchman/rails.rb +7 -9
- data/lib/switchman/test_helper.rb +4 -3
- data/lib/switchman/version.rb +1 -1
- data/spec/dummy/app/models/appendage.rb +2 -4
- data/spec/dummy/app/models/digit.rb +2 -4
- data/spec/dummy/app/models/feature.rb +0 -2
- data/spec/dummy/app/models/user.rb +0 -2
- data/spec/dummy/config/application.rb +0 -6
- data/spec/dummy/config/environments/development.rb +2 -9
- data/spec/dummy/config/environments/production.rb +2 -3
- data/spec/dummy/config/environments/test.rb +2 -11
- data/spec/dummy/config/routes.rb +2 -2
- data/spec/dummy/log/test.log +9947 -0
- data/spec/dummy/tmp/cache/375/530/shard%2F3200 +1 -0
- data/spec/dummy/tmp/cache/37A/590/shard%2F3214 +1 -0
- data/spec/dummy/tmp/cache/37E/620/shard%2F3182 +0 -0
- data/spec/dummy/tmp/cache/381/650/shard%2F3185 +1 -0
- data/spec/dummy/tmp/cache/382/650/shard%2F3177 +1 -0
- data/spec/dummy/tmp/cache/386/6B0/shard%2F3199 +1 -0
- data/spec/dummy/tmp/cache/3A6/F80/shard%2F13200 +1 -0
- data/spec/dummy/tmp/cache/3B0/080/shard%2F13183 +1 -0
- data/spec/dummy/tmp/cache/3B1/070/shard%2F13166 +1 -0
- data/spec/lib/active_record/association_spec.rb +21 -11
- data/spec/lib/active_record/finder_methods_spec.rb +1 -1
- data/spec/lib/active_record/query_cache_spec.rb +17 -17
- data/spec/lib/active_record/query_methods_spec.rb +6 -5
- data/spec/lib/active_record/relation_spec.rb +1 -1
- data/spec/lib/active_record/spawn_methods_spec.rb +5 -4
- data/spec/lib/connection_pool_proxy_spec.rb +2 -0
- data/spec/lib/database_server_spec.rb +12 -4
- data/spec/lib/shackles_spec.rb +8 -6
- 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
|
Binary file
|
@@ -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:ETiI" 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
|
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 ==
|
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
|
-
|
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)
|
108
|
+
relation = mirror_user.association(:user)
|
109
|
+
relation = ::Rails.version < '4' ? relation.scoped : relation.scope
|
103
110
|
relation.shard_value.should == Shard.default
|
104
|
-
|
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.
|
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).
|
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).
|
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).
|
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.
|
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)
|
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]).
|
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
|
-
|
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
|
-
|
70
|
-
|
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
|
-
|
87
|
-
|
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
|
data/spec/lib/shackles_spec.rb
CHANGED
@@ -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.
|
27
|
-
default_pools =
|
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.
|
30
|
-
pools =
|
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.
|
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).
|
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.
|
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-
|
13
|
+
date: 2014-03-25 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
|
-
name:
|
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
|
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:
|
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:
|
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:
|
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
|