switchman 1.4.2 → 1.4.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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()