switchman 1.4.2 → 1.4.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (114) hide show
  1. checksums.yaml +4 -4
  2. data/app/models/switchman/shard.rb +3 -3
  3. data/lib/switchman/active_record/connection_handler.rb +2 -2
  4. data/lib/switchman/database_server.rb +11 -7
  5. data/lib/switchman/default_shard.rb +1 -1
  6. data/lib/switchman/engine.rb +0 -7
  7. data/lib/switchman/r_spec_helper.rb +1 -1
  8. data/lib/switchman/test_helper.rb +2 -2
  9. data/lib/switchman/version.rb +1 -1
  10. data/lib/tasks/switchman.rake +12 -6
  11. data/spec/dummy/config/environments/production.rb +1 -1
  12. data/spec/dummy/config/environments/test.rb +1 -1
  13. data/spec/dummy/db/shard_2203.sqlite3 +0 -0
  14. data/spec/dummy/db/shard_2256.sqlite3 +0 -0
  15. data/spec/dummy/db/shard_2301.sqlite3 +0 -0
  16. data/spec/dummy/db/shard_2336.sqlite3 +0 -0
  17. data/spec/dummy/db/shard_2360.sqlite3 +0 -0
  18. data/spec/dummy/db/shard_2385.sqlite3 +0 -0
  19. data/spec/dummy/db/shard_2406.sqlite3 +0 -0
  20. data/spec/dummy/db/shard_2452.sqlite3 +0 -0
  21. data/spec/dummy/db/shard_2465.sqlite3 +0 -0
  22. data/spec/dummy/db/shard_2507.sqlite3 +0 -0
  23. data/spec/dummy/db/shard_2515.sqlite3 +0 -0
  24. data/spec/dummy/db/shard_2557.sqlite3 +0 -0
  25. data/spec/dummy/db/shard_2580.sqlite3 +0 -0
  26. data/spec/dummy/db/shard_2598.sqlite3 +0 -0
  27. data/spec/dummy/db/shard_2626.sqlite3 +0 -0
  28. data/spec/dummy/db/shard_2672.sqlite3 +0 -0
  29. data/spec/dummy/db/shard_2681.sqlite3 +0 -0
  30. data/spec/dummy/db/shard_2754.sqlite3 +0 -0
  31. data/spec/dummy/db/shard_2790.sqlite3 +0 -0
  32. data/spec/dummy/db/shard_2803.sqlite3 +0 -0
  33. data/spec/dummy/db/shard_2834.sqlite3 +0 -0
  34. data/spec/dummy/db/shard_2862.sqlite3 +0 -0
  35. data/spec/dummy/db/shard_2897.sqlite3 +0 -0
  36. data/spec/dummy/db/shard_2928.sqlite3 +0 -0
  37. data/spec/dummy/db/shard_2951.sqlite3 +0 -0
  38. data/spec/dummy/db/shard_2970.sqlite3 +0 -0
  39. data/spec/dummy/db/shard_3009.sqlite3 +0 -0
  40. data/spec/dummy/log/test.log +114198 -0
  41. data/spec/dummy/tmp/cache/377/540/shard%2F2221 +1 -0
  42. data/spec/dummy/tmp/cache/379/540/shard%2F3015 +1 -0
  43. data/spec/dummy/tmp/cache/379/580/shard%2F2403 +1 -0
  44. data/spec/dummy/tmp/cache/37A/5E0/shard%2F2611 +1 -0
  45. data/spec/dummy/tmp/cache/37B/5A0/shard%2F2324 +1 -0
  46. data/spec/dummy/tmp/cache/37C/5D0/shard%2F2343 +1 -0
  47. data/spec/dummy/tmp/cache/37C/5E0/shard%2F2352 +1 -0
  48. data/spec/dummy/tmp/cache/37D/5E0/shard%2F2344 +1 -0
  49. data/spec/dummy/tmp/cache/37D/650/shard%2F2812 +1 -0
  50. data/spec/dummy/tmp/cache/37D/660/shard%2F2740 +2 -0
  51. data/spec/dummy/tmp/cache/37E/640/shard%2F2390 +1 -0
  52. data/spec/dummy/tmp/cache/37F/660/shard%2F2562 +1 -0
  53. data/spec/dummy/tmp/cache/37F/680/shard%2F2823 +1 -0
  54. data/spec/dummy/tmp/cache/37F/6B0/shard%2F2931 +1 -0
  55. data/spec/dummy/tmp/cache/380/630/shard%2F2527 +1 -0
  56. data/spec/dummy/tmp/cache/380/670/shard%2F2644 +1 -0
  57. data/spec/dummy/tmp/cache/380/690/shard%2F2824 +1 -0
  58. data/spec/dummy/tmp/cache/380/6E0/shard%2F2950 +1 -0
  59. data/spec/dummy/tmp/cache/382/640/shard%2F2277 +1 -0
  60. data/spec/dummy/tmp/cache/382/650/shard%2F2448 +1 -0
  61. data/spec/dummy/tmp/cache/382/660/shard%2F2295 +1 -0
  62. data/spec/dummy/tmp/cache/382/6F0/shard%2F2781 +1 -0
  63. data/spec/dummy/tmp/cache/382/700/shard%2F2871 +1 -0
  64. data/spec/dummy/tmp/cache/383/6B0/shard%2F2494 +1 -0
  65. data/spec/dummy/tmp/cache/383/6B0/shard%2F2575 +2 -0
  66. data/spec/dummy/tmp/cache/383/6F0/shard%2F2935 +1 -0
  67. data/spec/dummy/tmp/cache/384/700/shard%2F2693 +1 -0
  68. data/spec/dummy/tmp/cache/384/700/shard%2F2936 +1 -0
  69. data/spec/dummy/tmp/cache/385/6D0/shard%2F2739 +2 -0
  70. data/spec/dummy/tmp/cache/385/6E0/shard%2F2586 +1 -0
  71. data/spec/dummy/tmp/cache/385/760/shard%2F2982 +1 -0
  72. data/spec/dummy/tmp/cache/386/6C0/shard%2F2479 +1 -0
  73. data/spec/dummy/tmp/cache/386/710/shard%2F2767 +2 -0
  74. data/spec/dummy/tmp/cache/386/710/shard%2F2848 +1 -0
  75. data/spec/dummy/tmp/cache/387/700/shard%2F2669 +1 -0
  76. data/spec/dummy/tmp/cache/387/710/shard%2F2759 +1 -0
  77. data/spec/dummy/tmp/cache/388/770/shard%2F2886 +1 -0
  78. data/spec/dummy/tmp/cache/3A4/F20/shard%2F13000 +1 -0
  79. data/spec/dummy/tmp/cache/3A6/F50/shard%2F12201 +1 -0
  80. data/spec/dummy/tmp/cache/3A7/FA0/shard%2F12400 +1 -0
  81. data/spec/dummy/tmp/cache/3AA/FC0/shard%2F12313 +1 -0
  82. data/spec/dummy/tmp/cache/3AB/010/shard%2F12512 +1 -0
  83. data/spec/dummy/tmp/cache/3AD/010/shard%2F12253 +1 -0
  84. data/spec/dummy/tmp/cache/3AE/030/shard%2F12344 +1 -0
  85. data/spec/dummy/tmp/cache/3AE/0B0/shard%2F12740 +1 -0
  86. data/spec/dummy/tmp/cache/3AF/070/shard%2F12372 +1 -0
  87. data/spec/dummy/tmp/cache/3AF/080/shard%2F12624 +1 -0
  88. data/spec/dummy/tmp/cache/3B0/060/shard%2F12436 +1 -0
  89. data/spec/dummy/tmp/cache/3B0/0C0/shard%2F12652 +1 -0
  90. data/spec/dummy/tmp/cache/3B1/090/shard%2F12293 +1 -0
  91. data/spec/dummy/tmp/cache/3B1/0E0/shard%2F12824 +1 -0
  92. data/spec/dummy/tmp/cache/3B1/100/shard%2F12680 +1 -0
  93. data/spec/dummy/tmp/cache/3B2/0A0/shard%2F12456 +1 -0
  94. data/spec/dummy/tmp/cache/3B2/120/shard%2F12852 +1 -0
  95. data/spec/dummy/tmp/cache/3B3/0E0/shard%2F12484 +1 -0
  96. data/spec/dummy/tmp/cache/3B3/160/shard%2F12880 +1 -0
  97. data/spec/dummy/tmp/cache/3B4/0D0/shard%2F12548 +1 -0
  98. data/spec/dummy/tmp/cache/3B4/110/shard%2F12908 +1 -0
  99. data/spec/dummy/tmp/cache/3B5/110/shard%2F12576 +1 -0
  100. data/spec/dummy/tmp/cache/3B5/150/shard%2F12936 +1 -0
  101. data/spec/dummy/tmp/cache/3B6/190/shard%2F12964 +1 -0
  102. data/spec/dummy/tmp/cache/3B7/150/shard%2F12596 +1 -0
  103. data/spec/dummy/tmp/cache/3B8/170/shard%2F12768 +1 -0
  104. data/spec/dummy/tmp/cache/3B9/1B0/shard%2F12796 +1 -0
  105. data/spec/lib/active_record/connection_pool_spec.rb +5 -5
  106. data/spec/lib/active_record/postgresql_adapter_spec.rb +1 -0
  107. data/spec/lib/connection_pool_proxy_spec.rb +1 -1
  108. data/spec/lib/database_server_spec.rb +14 -14
  109. data/spec/lib/rails_spec.rb +1 -1
  110. data/spec/lib/rake_spec.rb +9 -1
  111. data/spec/lib/shackles_spec.rb +2 -2
  112. data/spec/models/shard_spec.rb +10 -10
  113. data/spec/spec_helper.rb +1 -1
  114. metadata +184 -2
@@ -0,0 +1 @@
1
+ o: ActiveSupport::Cache::Entry: @value:nil:@created_atf1454952281.847283:@expires_in0
@@ -0,0 +1 @@
1
+ o: ActiveSupport::Cache::Entry: @value:nil:@created_atf1454954252.107578:@expires_in0
@@ -0,0 +1 @@
1
+ o: ActiveSupport::Cache::Entry: @value:nil:@created_atf1454953751.124701:@expires_in0
@@ -0,0 +1 @@
1
+ o: ActiveSupport::Cache::Entry: @value:nil:@created_atf1454953911.634756:@expires_in0
@@ -0,0 +1 @@
1
+ o: ActiveSupport::Cache::Entry: @value:nil:@created_atf1454953567.7266428:@expires_in0
@@ -0,0 +1 @@
1
+ o: ActiveSupport::Cache::Entry: @value{ I"id:ETi' I" name;TI"switchman_test_shard_2343;TI"database_server_id;TI" test;TI" default;TF:@created_atf1454953700.1946151:@expires_in0
@@ -0,0 +1 @@
1
+ o: ActiveSupport::Cache::Entry: @value:nil:@created_atf1454953697.943316:@expires_in0
@@ -0,0 +1 @@
1
+ o: ActiveSupport::Cache::Entry: @value{ I"id:ETi( I" name;TI"switchman_test_shard_2344;TI"database_server_id;TI"1;TI" default;TF:@created_atf1454953700.1967208:@expires_in0
@@ -0,0 +1 @@
1
+ o: ActiveSupport::Cache::Entry: @value:nil:@created_atf1454954185.702271:@expires_in0
@@ -0,0 +1,2 @@
1
+ o: ActiveSupport::Cache::Entry: @value{ I"id:ETi�
2
+ I" name;TI"switchman_test_shard_2740;TI"database_server_id;TI"1;TI" default;TF:@created_atf1454954139.659113:@expires_in0
@@ -0,0 +1 @@
1
+ o: ActiveSupport::Cache::Entry: @value:nil:@created_atf1454953718.354923:@expires_in0
@@ -0,0 +1 @@
1
+ o: ActiveSupport::Cache::Entry: @value:nil:@created_atf1454953894.35137:@expires_in0
@@ -0,0 +1 @@
1
+ o: ActiveSupport::Cache::Entry: @value{ I"id:ETi I" name;TI"switchman_test_shard_2823;TI"database_server_id;TI" test;TI" default;TF:@created_atf1454954195.612056:@expires_in0
@@ -0,0 +1 @@
1
+ o: ActiveSupport::Cache::Entry: @value:nil:@created_atf1454954223.821203:@expires_in0
@@ -0,0 +1 @@
1
+ o: ActiveSupport::Cache::Entry: @value:nil:@created_atf1454953883.913304:@expires_in0
@@ -0,0 +1 @@
1
+ o: ActiveSupport::Cache::Entry: @value:nil:@created_atf1454953923.02127:@expires_in0
@@ -0,0 +1 @@
1
+ o: ActiveSupport::Cache::Entry: @value{ I"id:ETi I" name;TI"switchman_test_shard_2824;TI"database_server_id;TI"1;TI" default;TF:@created_atf1454954195.6708689:@expires_in0
@@ -0,0 +1 @@
1
+ o: ActiveSupport::Cache::Entry: @value:nil:@created_atf1454954231.403268:@expires_in0
@@ -0,0 +1 @@
1
+ o: ActiveSupport::Cache::Entry: @value:nil:@created_atf1454953221.727403:@expires_in0
@@ -0,0 +1 @@
1
+ o: ActiveSupport::Cache::Entry: @value:nil:@created_atf1454953852.345695:@expires_in0
@@ -0,0 +1 @@
1
+ o: ActiveSupport::Cache::Entry: @value:nil:@created_atf1454953421.8768268:@expires_in0
@@ -0,0 +1 @@
1
+ o: ActiveSupport::Cache::Entry: @value:nil:@created_atf1454954174.635145:@expires_in0
@@ -0,0 +1 @@
1
+ o: ActiveSupport::Cache::Entry: @value:nil:@created_atf1454954203.967125:@expires_in0
@@ -0,0 +1 @@
1
+ o: ActiveSupport::Cache::Entry: @value:nil:@created_atf1454953875.538141:@expires_in0
@@ -0,0 +1,2 @@
1
+ o: ActiveSupport::Cache::Entry: @value{ I"id:ETi
2
+ I" name;TI"switchman_test_shard_2575;TI"database_server_id;TI" test;TI" default;TF:@created_atf1454953905.079722:@expires_in0
@@ -0,0 +1 @@
1
+ o: ActiveSupport::Cache::Entry: @value{ I"id:ETiw I" name;TI"switchman_test_shard_2935;TI"database_server_id;TI" test;TI" default;TF:@created_atf1454954233.520403:@expires_in0
@@ -0,0 +1 @@
1
+ o: ActiveSupport::Cache::Entry: @value:nil:@created_atf1454953942.2424982:@expires_in0
@@ -0,0 +1 @@
1
+ o: ActiveSupport::Cache::Entry: @value{ I"id:ETix I" name;TI"switchman_test_shard_2936;TI"database_server_id;TI"1;TI" default;TF:@created_atf1454954233.5221171:@expires_in0
@@ -0,0 +1,2 @@
1
+ o: ActiveSupport::Cache::Entry: @value{ I"id:ETi�
2
+ I" name;TI"switchman_test_shard_2739;TI"database_server_id;TI" test;TI" default;TF:@created_atf1454954139.6567528:@expires_in0
@@ -0,0 +1 @@
1
+ o: ActiveSupport::Cache::Entry: @value:nil:@created_atf1454953902.985973:@expires_in0
@@ -0,0 +1 @@
1
+ o: ActiveSupport::Cache::Entry: @value:nil:@created_atf1454954241.1974971:@expires_in0
@@ -0,0 +1 @@
1
+ o: ActiveSupport::Cache::Entry: @value:nil:@created_atf1454953865.986658:@expires_in0
@@ -0,0 +1,2 @@
1
+ o: ActiveSupport::Cache::Entry: @value{ I"id:ETi�
2
+ I" name;TI"switchman_test_shard_2767;TI"database_server_id;TI" test;TI" default;TF:@created_atf1454954177.128216:@expires_in0
@@ -0,0 +1 @@
1
+ o: ActiveSupport::Cache::Entry: @value:nil:@created_atf1454954194.7953842:@expires_in0
@@ -0,0 +1 @@
1
+ o: ActiveSupport::Cache::Entry: @value:nil:@created_atf1454953931.866626:@expires_in0
@@ -0,0 +1 @@
1
+ o: ActiveSupport::Cache::Entry: @value:nil:@created_atf1454954138.313615:@expires_in0
@@ -0,0 +1 @@
1
+ o: ActiveSupport::Cache::Entry: @value:nil:@created_atf1454954212.902188:@expires_in0
@@ -0,0 +1 @@
1
+ o: ActiveSupport::Cache::Entry: @value:nil:@created_atf1454954252.136723:@expires_in0
@@ -0,0 +1 @@
1
+ o: ActiveSupport::Cache::Entry: @value:nil:@created_atf1454952281.399483:@expires_in0
@@ -0,0 +1 @@
1
+ o: ActiveSupport::Cache::Entry: @value:nil:@created_atf1454953750.627025:@expires_in0
@@ -0,0 +1 @@
1
+ o: ActiveSupport::Cache::Entry: @value:nil:@created_atf1454953567.388341:@expires_in0
@@ -0,0 +1 @@
1
+ o: ActiveSupport::Cache::Entry: @value:nil:@created_atf1454953883.9622452:@expires_in0
@@ -0,0 +1 @@
1
+ o: ActiveSupport::Cache::Entry: @value:nil:@created_atf1454953221.654282:@expires_in0
@@ -0,0 +1 @@
1
+ o: ActiveSupport::Cache::Entry: @value:nil:@created_atf1454953697.991678:@expires_in0
@@ -0,0 +1 @@
1
+ o: ActiveSupport::Cache::Entry: @value:nil:@created_atf1454954138.386438:@expires_in0
@@ -0,0 +1 @@
1
+ o: ActiveSupport::Cache::Entry: @value:nil:@created_atf1454953718.218687:@expires_in0
@@ -0,0 +1 @@
1
+ o: ActiveSupport::Cache::Entry: @value:nil:@created_atf1454953923.291151:@expires_in0
@@ -0,0 +1 @@
1
+ o: ActiveSupport::Cache::Entry: @value:nil:@created_atf1454953852.630045:@expires_in0
@@ -0,0 +1 @@
1
+ o: ActiveSupport::Cache::Entry: @value:nil:@created_atf1454953931.9088142:@expires_in0
@@ -0,0 +1 @@
1
+ o: ActiveSupport::Cache::Entry: @value:nil:@created_atf1454953421.781354:@expires_in0
@@ -0,0 +1 @@
1
+ o: ActiveSupport::Cache::Entry: @value:nil:@created_atf1454954194.927814:@expires_in0
@@ -0,0 +1 @@
1
+ o: ActiveSupport::Cache::Entry: @value:nil:@created_atf1454953942.115639:@expires_in0
@@ -0,0 +1 @@
1
+ o: ActiveSupport::Cache::Entry: @value:nil:@created_atf1454953865.844864:@expires_in0
@@ -0,0 +1 @@
1
+ o: ActiveSupport::Cache::Entry: @value:nil:@created_atf1454954203.671841:@expires_in0
@@ -0,0 +1 @@
1
+ o: ActiveSupport::Cache::Entry: @value:nil:@created_atf1454953875.5033212:@expires_in0
@@ -0,0 +1 @@
1
+ o: ActiveSupport::Cache::Entry: @value:nil:@created_atf1454954212.824377:@expires_in0
@@ -0,0 +1 @@
1
+ o: ActiveSupport::Cache::Entry: @value:nil:@created_atf1454953894.449315:@expires_in0
@@ -0,0 +1 @@
1
+ o: ActiveSupport::Cache::Entry: @value:nil:@created_atf1454954223.9249978:@expires_in0
@@ -0,0 +1 @@
1
+ o: ActiveSupport::Cache::Entry: @value:nil:@created_atf1454953902.886399:@expires_in0
@@ -0,0 +1 @@
1
+ o: ActiveSupport::Cache::Entry: @value:nil:@created_atf1454954230.9272928:@expires_in0
@@ -0,0 +1 @@
1
+ o: ActiveSupport::Cache::Entry: @value:nil:@created_atf1454954240.867776:@expires_in0
@@ -0,0 +1 @@
1
+ o: ActiveSupport::Cache::Entry: @value:nil:@created_atf1454953911.156364:@expires_in0
@@ -0,0 +1 @@
1
+ o: ActiveSupport::Cache::Entry: @value:nil:@created_atf1454954174.670942:@expires_in0
@@ -0,0 +1 @@
1
+ o: ActiveSupport::Cache::Entry: @value:nil:@created_atf1454954185.3990772:@expires_in0
@@ -6,23 +6,23 @@ module Switchman
6
6
  it "should be able to access another shard on a db server after the 'primary' shard is gone" do
7
7
  skip 'A "real" database"' unless Shard.default.database_server.shareable?
8
8
  # separate connections
9
- server = DatabaseServer.create(:config => Shard.default.database_server.config.dup)
9
+ server = DatabaseServer.create(Shard.default.database_server.config)
10
10
  s1 = server.shards.create!(:name => 'non_existent_shard') # don't actually create any schema
11
11
  s2 = server.shards.create! # inherit's the default shard's config, which is functional
12
12
  s1.activate do
13
- expect { User.count }.to raise_exception
13
+ expect { User.count }.to raise_error(::ActiveRecord::StatementInvalid)
14
14
  end
15
15
  # the config for s1 should not be the permanent default for all new
16
16
  # connections now
17
17
  s2.activate do
18
- expect { User.count }.not_to raise_exception
18
+ expect { User.count }.not_to raise_error
19
19
  end
20
20
  end
21
21
 
22
22
  describe "clear_idle_connections!" do
23
23
  before do
24
24
  skip 'A "real" database"' unless Shard.default.database_server.shareable?
25
- @server = DatabaseServer.create(:config => Shard.default.database_server.config.dup)
25
+ @server = DatabaseServer.create(Shard.default.database_server.config)
26
26
  @shard = @server.shards.create!
27
27
  @conn, @pool = @shard.activate{ [User.connection, User.connection_pool.current_pool] }
28
28
  end
@@ -56,7 +56,7 @@ module Switchman
56
56
  describe "release_connection" do
57
57
  before do
58
58
  skip 'A "real" database"' unless Shard.default.database_server.shareable?
59
- @server = DatabaseServer.create(:config => Shard.default.database_server.config.dup)
59
+ @server = DatabaseServer.create(Shard.default.database_server.config)
60
60
  @shard = @server.shards.create!
61
61
  @pool = @shard.activate{ User.connection_pool.current_pool }
62
62
  @timeout_was = @pool.spec.config[:idle_timeout]
@@ -30,6 +30,7 @@ module Switchman
30
30
  shard.stubs(:name).returns('bob')
31
31
  ::ActiveRecord::Base.connection.stubs(:use_qualified_names?).returns(true)
32
32
  ::ActiveRecord::Base.connection.stubs(:shard).returns(shard)
33
+ ::ActiveRecord::Base.connection.stubs(:columns).returns([])
33
34
 
34
35
  expect(User.joins(:parent).where(id: 1).to_sql).to be_include %{* FROM "bob"."users" INNER JOIN "bob"."users" "parents_users" ON "parents_users"."id" = "users"."parent_id" WHERE "users"."id" = 1}
35
36
  end
@@ -5,7 +5,7 @@ module Switchman
5
5
  include RSpecHelper
6
6
 
7
7
  it "should not share connections for sqlite shards on the same db" do
8
- @db = DatabaseServer.create(:config => { :adapter => 'sqlite3', :database => ':memory:' })
8
+ @db = DatabaseServer.create(adapter: 'sqlite3', database: ':memory:')
9
9
  @sqlite_shard1 = @db.shards.create!
10
10
  @sqlite_shard2 = @db.shards.create!
11
11
  expect(::ActiveRecord::Base.connection).not_to eq @sqlite_shard2.activate { ::ActiveRecord::Base.connection }
@@ -4,36 +4,36 @@ module Switchman
4
4
  describe DatabaseServer do
5
5
  describe "shareable?" do
6
6
  it "should be false for sqlite" do
7
- db = DatabaseServer.new(config: { adapter: 'sqlite3', database: '%{shard_name}' })
7
+ db = DatabaseServer.new(nil, adapter: 'sqlite3', database: '%{shard_name}')
8
8
  expect(db.shareable?).to eq false
9
9
  end
10
10
 
11
11
  it "should be true for mysql" do
12
- db = DatabaseServer.new(config: { adapter: 'mysql' })
12
+ db = DatabaseServer.new(nil, adapter: 'mysql')
13
13
  expect(db.shareable?).to eq true
14
14
 
15
- db = DatabaseServer.new(config: { adapter: 'mysql2' })
15
+ db = DatabaseServer.new(nil, adapter: 'mysql2')
16
16
  expect(db.shareable?).to eq true
17
17
  end
18
18
 
19
19
  it "should be true for postgres with a non-variable username" do
20
- db = DatabaseServer.new(config: { adapter: 'postgresql' })
20
+ db = DatabaseServer.new(nil, adapter: 'postgresql')
21
21
  expect(db.shareable?).to eq true
22
22
  end
23
23
 
24
24
  it "should be false for postgres with variable username" do
25
- db = DatabaseServer.new(config: { adapter: 'postgresql', username: '%{schema_search_path}' })
25
+ db = DatabaseServer.new(nil, adapter: 'postgresql', username: '%{schema_search_path}')
26
26
  expect(db.shareable?).to eq false
27
27
  end
28
28
 
29
29
  it "should depend on the database environment" do
30
- db = DatabaseServer.new(config: { adapter: 'postgresql', username: '%{schema_search_path}', deploy: { username: 'deploy' }})
30
+ db = DatabaseServer.new(nil, adapter: 'postgresql', username: '%{schema_search_path}', deploy: { username: 'deploy' })
31
31
  expect(db.shareable?).to eq false
32
32
  expect(::Shackles.activate(:deploy) { db.shareable? }).to eq true
33
33
  end
34
34
 
35
35
  it "should handle string keys" do
36
- db = DatabaseServer.new(config: { adapter: 'postgresql', username: '%{schema_search_path}', deploy: { 'username' => 'deploy' }})
36
+ db = DatabaseServer.new(nil, adapter: 'postgresql', username: '%{schema_search_path}', deploy: { 'username' => 'deploy' })
37
37
  expect(db.shareable?).to eq false
38
38
  expect(::Shackles.activate(:deploy) { db.shareable? }).to eq true
39
39
  end
@@ -72,7 +72,7 @@ module Switchman
72
72
  end
73
73
 
74
74
  it "should be able to create a new sqlite shard from a given server" do
75
- db = DatabaseServer.create(:config => { :adapter => 'sqlite3', :database => '%{shard_name}', :shard_name => ':memory:' })
75
+ db = DatabaseServer.create(adapter: 'sqlite3', database: '%{shard_name}', shard_name: ':memory:')
76
76
  begin
77
77
  create_shard(db)
78
78
  ensure
@@ -93,7 +93,7 @@ module Switchman
93
93
  skip 'A "real" database"' unless %w{MySQL Mysql2 PostgreSQL}.include?(adapter)
94
94
 
95
95
  # So, it's really the same server, but we want separate connections
96
- db = DatabaseServer.create(:config => Shard.default.database_server.config)
96
+ db = DatabaseServer.create(Shard.default.database_server.config)
97
97
  begin
98
98
  create_shard(db)
99
99
  ensure
@@ -103,7 +103,7 @@ module Switchman
103
103
 
104
104
  class MyException < Exception; end
105
105
  it "should use the connection's db name as temp db name" do
106
- db = DatabaseServer.new(config: { adapter: 'postgresql' })
106
+ db = DatabaseServer.new(nil, adapter: 'postgresql')
107
107
  Shard.expects(:create!).with(:name => Shard.default.name, :database_server => db).raises(MyException.new)
108
108
  expect { db.create_new_shard }.to raise_error(MyException)
109
109
  end
@@ -114,7 +114,7 @@ module Switchman
114
114
  base_config = { database: 'db',
115
115
  slave: [nil, { database: 'slave' }],
116
116
  deploy: { username: 'deploy' }}
117
- ds = DatabaseServer.new(config: base_config)
117
+ ds = DatabaseServer.new(nil, base_config)
118
118
  expect(ds.config).to eq base_config
119
119
  expect(ds.config(:slave)).to eq [{ database: 'db', deploy: base_config[:deploy] },
120
120
  { database: 'slave', deploy: base_config[:deploy] }]
@@ -195,7 +195,7 @@ module Switchman
195
195
  after(:all) do
196
196
  @db1.config[:open] = @old_open
197
197
  @old_servers.each do |db|
198
- DatabaseServer.create(:id => db.id, :config => db.config)
198
+ DatabaseServer.create(db.config.merge(id: db.id))
199
199
  end
200
200
  end
201
201
 
@@ -209,7 +209,7 @@ module Switchman
209
209
  end
210
210
 
211
211
  it "should return another server if it's the only one open" do
212
- @db2 = DatabaseServer.create(:config => { :open => true})
212
+ @db2 = DatabaseServer.create(open: true)
213
213
  4.times { expect(DatabaseServer.server_for_new_shard).to eq @db2 }
214
214
  @db2.config.delete(:open)
215
215
  @db1.config[:open] = true
@@ -217,7 +217,7 @@ module Switchman
217
217
  end
218
218
 
219
219
  it "should return multiple open servers" do
220
- @db2 = DatabaseServer.create(:config => { :open => true })
220
+ @db2 = DatabaseServer.create(open: true)
221
221
  @db1.config[:open] = true
222
222
  dbs = []
223
223
  20.times do
@@ -5,7 +5,7 @@ module Switchman
5
5
  it "should automatically isolate cache keys from different shards" do
6
6
  cache = ::ActiveSupport::Cache.lookup_store(:memory_store)
7
7
  ::Rails.stubs(:cache).returns(cache)
8
- db = DatabaseServer.create(:settings => { :adapter => 'sqlite3' })
8
+ db = DatabaseServer.create(adapter: 'sqlite3')
9
9
  s1 = db.shards.create!
10
10
  s2 = db.shards.create!
11
11
 
@@ -13,7 +13,7 @@ module Switchman
13
13
  end
14
14
 
15
15
  def shard_scope(shard_ids)
16
- Rake.send(:shard_scope, Shard.all, shard_ids)
16
+ Rake.send(:shard_scope, Shard.all, shard_ids).order(:id)
17
17
  end
18
18
 
19
19
  it "should work for default shard" do
@@ -88,5 +88,13 @@ module Switchman
88
88
  expect(shard_scope("7/7").to_a).to eq []
89
89
  end
90
90
  end
91
+
92
+ describe '.scope' do
93
+ it "supports selecting open servers" do
94
+ db = DatabaseServer.create(open: true)
95
+ shard = db.shards.create!
96
+ expect(Rake.scope(database_server: 'open').to_a).to eq([shard])
97
+ end
98
+ end
91
99
  end
92
100
  end
@@ -40,7 +40,7 @@ module Switchman
40
40
  it "should connect to the first working slave" do
41
41
  # have to unstub long enough to create this
42
42
  ::Rails.env.unstub(:test?)
43
- ds = DatabaseServer.create(config: Shard.default.database_server.config.merge(
43
+ ds = DatabaseServer.create(Shard.default.database_server.config.merge(
44
44
  :slave => [{ host: 'some.postgres.server' }, nil]))
45
45
  ::Rails.env.stubs(:test?).returns(false)
46
46
  ds.shackle!
@@ -86,7 +86,7 @@ module Switchman
86
86
  Shard.default.database_server.shackle!
87
87
  # have to unstub long enough to create this
88
88
  ::Rails.env.unstub(:test?)
89
- ds = DatabaseServer.create(config: { adapter: 'postgresql', host: 'notshackled', slave: { host: 'shackled' }})
89
+ ds = DatabaseServer.create(adapter: 'postgresql', host: 'notshackled', slave: { host: 'shackled' })
90
90
  ::Rails.env.stubs(:test?).returns(false)
91
91
  s = ds.shards.create!
92
92
  s.activate do
@@ -27,7 +27,7 @@ module Switchman
27
27
 
28
28
  describe ".destroy" do
29
29
  it "works on created shards" do
30
- server = DatabaseServer.create(:config => Shard.default.database_server.config)
30
+ server = DatabaseServer.create(Shard.default.database_server.config)
31
31
  shard = server.create_new_shard
32
32
  expect{ shard.destroy }.to_not raise_error
33
33
  expect(Shard.where(id: shard.id)).to be_empty
@@ -35,7 +35,7 @@ module Switchman
35
35
 
36
36
  it "fails on the default shard" do
37
37
  shard = Shard.default
38
- expect{ shard.destroy }.to raise_error
38
+ expect{ shard.destroy }.to raise_error("Cannot destroy the default shard")
39
39
  end
40
40
  end
41
41
 
@@ -83,7 +83,7 @@ module Switchman
83
83
  describe "#drop_database" do
84
84
  it "should work" do
85
85
  # use a separate connection so we don't commit the transaction
86
- server = DatabaseServer.create(:config => Shard.default.database_server.config)
86
+ server = DatabaseServer.create(Shard.default.database_server.config)
87
87
  shard = server.create_new_shard
88
88
  shard.activate do
89
89
  User.create!
@@ -91,12 +91,12 @@ module Switchman
91
91
  end
92
92
  shard.drop_database
93
93
  shard.activate do
94
- expect { User.count }.to raise_error
94
+ expect { User.count }.to raise_error(::ActiveRecord::StatementInvalid)
95
95
  end
96
96
  end
97
97
 
98
98
  it "raises an exception if the shard is the default shard" do
99
- expect{ Shard.default.drop_database }.to raise_error
99
+ expect{ Shard.default.drop_database }.to raise_error("Cannot drop the database of the default shard")
100
100
  end
101
101
  end
102
102
 
@@ -123,7 +123,7 @@ module Switchman
123
123
  describe ".with_each_shard" do
124
124
  describe ":exception" do
125
125
  it "should default to :raise" do
126
- expect { Shard.with_each_shard { raise "error" } }.to raise_error
126
+ expect { Shard.with_each_shard { raise "error" } }.to raise_error("error")
127
127
  end
128
128
 
129
129
  it "should :ignore" do
@@ -132,7 +132,7 @@ module Switchman
132
132
 
133
133
  it "should :defer" do
134
134
  counter = 0
135
- expect { Shard.with_each_shard(exception: :defer) { counter += 1; raise "error" } }.to raise_error
135
+ expect { Shard.with_each_shard(exception: :defer) { counter += 1; raise "error" } }.to raise_error("error")
136
136
  # called more than once
137
137
  expect(counter).to be > 1
138
138
  end
@@ -279,19 +279,19 @@ module Switchman
279
279
  end
280
280
 
281
281
  it "should fall back to shard_name in the config if nil" do
282
- db = DatabaseServer.new(config: { adapter: 'mysql', database: 'canvas', shard_name: 'yoyoyo' })
282
+ db = DatabaseServer.new(nil, adapter: 'mysql', database: 'canvas', shard_name: 'yoyoyo')
283
283
  shard = Shard.new(database_server: db)
284
284
  expect(shard.name).to eq 'yoyoyo'
285
285
  end
286
286
 
287
287
  it "should fall back to the database_server if nil" do
288
- db = DatabaseServer.new(config: { adapter: 'mysql', database: 'canvas' })
288
+ db = DatabaseServer.new(nil, adapter: 'mysql', database: 'canvas')
289
289
  shard = Shard.new(database_server: db)
290
290
  expect(shard.name).to eq 'canvas'
291
291
  end
292
292
 
293
293
  it "should get it from the postgres connection if not otherwise specified" do
294
- db = DatabaseServer.create(config: { adapter: 'postgresql', database: 'notme' })
294
+ db = DatabaseServer.create(adapter: 'postgresql', database: 'notme')
295
295
  shard = Shard.new(database_server: db)
296
296
  shard.database_server = db
297
297
  connection = mock()