makara 0.5.0 → 0.5.1

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 (89) hide show
  1. checksums.yaml +4 -4
  2. data/.github/dependabot.yml +11 -0
  3. data/.github/workflows/CI.yml +88 -0
  4. data/.rspec +1 -1
  5. data/.rubocop.yml +15 -0
  6. data/.rubocop_todo.yml +670 -0
  7. data/CHANGELOG.md +14 -6
  8. data/Gemfile +1 -16
  9. data/README.md +2 -1
  10. data/Rakefile +1 -1
  11. data/gemfiles/activerecord_5.2.gemfile +8 -0
  12. data/gemfiles/activerecord_6.0.gemfile +8 -0
  13. data/gemfiles/activerecord_6.1.gemfile +8 -0
  14. data/gemfiles/activerecord_head.gemfile +6 -0
  15. data/lib/active_record/connection_adapters/jdbcmysql_makara_adapter.rb +4 -18
  16. data/lib/active_record/connection_adapters/jdbcpostgresql_makara_adapter.rb +4 -18
  17. data/lib/active_record/connection_adapters/makara_abstract_adapter.rb +3 -31
  18. data/lib/active_record/connection_adapters/makara_jdbcmysql_adapter.rb +4 -18
  19. data/lib/active_record/connection_adapters/makara_jdbcpostgresql_adapter.rb +4 -18
  20. data/lib/active_record/connection_adapters/makara_mysql2_adapter.rb +4 -20
  21. data/lib/active_record/connection_adapters/makara_postgis_adapter.rb +4 -19
  22. data/lib/active_record/connection_adapters/makara_postgresql_adapter.rb +4 -20
  23. data/lib/active_record/connection_adapters/mysql2_makara_adapter.rb +4 -20
  24. data/lib/active_record/connection_adapters/postgresql_makara_adapter.rb +4 -20
  25. data/lib/makara.rb +0 -2
  26. data/lib/makara/cache.rb +0 -2
  27. data/lib/makara/config_parser.rb +5 -14
  28. data/lib/makara/connection_wrapper.rb +24 -27
  29. data/lib/makara/context.rb +1 -0
  30. data/lib/makara/cookie.rb +1 -0
  31. data/lib/makara/error_handler.rb +0 -9
  32. data/lib/makara/errors/all_connections_blacklisted.rb +0 -2
  33. data/lib/makara/errors/blacklist_connection.rb +0 -2
  34. data/lib/makara/errors/blacklisted_while_in_transaction.rb +0 -2
  35. data/lib/makara/errors/invalid_shard.rb +1 -3
  36. data/lib/makara/errors/makara_error.rb +0 -1
  37. data/lib/makara/errors/no_connections_available.rb +0 -2
  38. data/lib/makara/logging/logger.rb +0 -4
  39. data/lib/makara/logging/subscriber.rb +0 -2
  40. data/lib/makara/middleware.rb +1 -2
  41. data/lib/makara/pool.rb +2 -7
  42. data/lib/makara/proxy.rb +25 -27
  43. data/lib/makara/railtie.rb +0 -2
  44. data/lib/makara/strategies/abstract.rb +1 -0
  45. data/lib/makara/strategies/priority_failover.rb +2 -0
  46. data/lib/makara/strategies/round_robin.rb +1 -3
  47. data/lib/makara/strategies/shard_aware.rb +0 -2
  48. data/lib/makara/version.rb +1 -3
  49. data/makara.gemspec +24 -5
  50. data/spec/active_record/connection_adapters/makara_abstract_adapter_error_handling_spec.rb +1 -6
  51. data/spec/active_record/connection_adapters/makara_abstract_adapter_spec.rb +0 -9
  52. data/spec/active_record/connection_adapters/makara_mysql2_adapter_spec.rb +9 -22
  53. data/spec/active_record/connection_adapters/makara_postgis_adapter_spec.rb +2 -10
  54. data/spec/active_record/connection_adapters/makara_postgresql_adapter_spec.rb +7 -20
  55. data/spec/cache_spec.rb +0 -1
  56. data/spec/config_parser_spec.rb +54 -56
  57. data/spec/connection_wrapper_spec.rb +1 -2
  58. data/spec/cookie_spec.rb +1 -1
  59. data/spec/middleware_spec.rb +1 -1
  60. data/spec/pool_spec.rb +3 -16
  61. data/spec/proxy_spec.rb +0 -4
  62. data/spec/spec_helper.rb +5 -1
  63. data/spec/strategies/priority_failover_spec.rb +3 -4
  64. data/spec/strategies/round_robin_spec.rb +4 -8
  65. data/spec/strategies/shard_aware_spec.rb +4 -5
  66. data/spec/support/deep_dup.rb +1 -1
  67. data/spec/support/helpers.rb +5 -5
  68. data/spec/support/mock_objects.rb +1 -4
  69. data/spec/support/mysql2_database.yml +2 -2
  70. data/spec/support/mysql2_database_with_custom_errors.yml +2 -2
  71. data/spec/support/pool_extensions.rb +0 -3
  72. data/spec/support/postgis_schema.rb +1 -1
  73. data/spec/support/postgresql_database.yml +0 -2
  74. data/spec/support/proxy_extensions.rb +1 -3
  75. data/spec/support/schema.rb +1 -1
  76. data/spec/support/user.rb +1 -2
  77. metadata +156 -20
  78. data/.travis.yml +0 -131
  79. data/gemfiles/ar-head.gemfile +0 -24
  80. data/gemfiles/ar30.gemfile +0 -36
  81. data/gemfiles/ar31.gemfile +0 -36
  82. data/gemfiles/ar32.gemfile +0 -36
  83. data/gemfiles/ar40.gemfile +0 -24
  84. data/gemfiles/ar41.gemfile +0 -24
  85. data/gemfiles/ar42.gemfile +0 -24
  86. data/gemfiles/ar50.gemfile +0 -24
  87. data/gemfiles/ar51.gemfile +0 -24
  88. data/gemfiles/ar52.gemfile +0 -24
  89. data/gemfiles/ar60.gemfile +0 -24
@@ -2,7 +2,6 @@ require 'spec_helper'
2
2
  require 'active_record/connection_adapters/makara_abstract_adapter'
3
3
 
4
4
  describe ActiveRecord::ConnectionAdapters::MakaraAbstractAdapter::ErrorHandler do
5
-
6
5
  let(:handler){ described_class.new }
7
6
  let(:proxy) { FakeAdapter.new(config(1,1)) }
8
7
  let(:connection){ proxy.master_pool.connections.first }
@@ -60,9 +59,8 @@ describe ActiveRecord::ConnectionAdapters::MakaraAbstractAdapter::ErrorHandler d
60
59
  end
61
60
 
62
61
  describe 'custom errors' do
63
-
64
62
  let(:config_path) { File.join(File.expand_path('../../../', __FILE__), 'support', 'mysql2_database_with_custom_errors.yml') }
65
- let(:config) { YAML.load_file(config_path)['test'] }
63
+ let(:config) { YAML.load(ERB.new(File.read(config_path)).result)['test'] }
66
64
  let(:handler){ described_class.new }
67
65
  let(:proxy) { FakeAdapter.new(config) }
68
66
  let(:connection){ proxy.master_pool.connections.first }
@@ -85,8 +83,5 @@ describe ActiveRecord::ConnectionAdapters::MakaraAbstractAdapter::ErrorHandler d
85
83
  end
86
84
  }.to raise_error(Makara::Errors::BlacklistConnection)
87
85
  end
88
-
89
86
  end
90
-
91
-
92
87
  end
@@ -2,7 +2,6 @@ require 'spec_helper'
2
2
  require 'active_record/connection_adapters/makara_abstract_adapter'
3
3
 
4
4
  describe ActiveRecord::ConnectionAdapters::MakaraAbstractAdapter do
5
-
6
5
  let(:klass){ FakeAdapter }
7
6
 
8
7
  {
@@ -38,15 +37,12 @@ describe ActiveRecord::ConnectionAdapters::MakaraAbstractAdapter do
38
37
  'select pg_advisory_lock(12345)' => true,
39
38
  'select pg_advisory_unlock(12345)' => true
40
39
  }.each do |sql, should_go_to_master|
41
-
42
40
  it "determines that \"#{sql}\" #{should_go_to_master ? 'requires' : 'does not require'} master" do
43
41
  proxy = klass.new(config(1,1))
44
42
  expect(proxy.master_for?(sql)).to eq(should_go_to_master)
45
43
  end
46
-
47
44
  end
48
45
 
49
-
50
46
  {
51
47
  "SET @@things" => true,
52
48
  "INSERT INTO wisdom ('The truth will set you free.')" => false,
@@ -61,7 +57,6 @@ describe ActiveRecord::ConnectionAdapters::MakaraAbstractAdapter do
61
57
  max_treats IS NULL
62
58
  } => false
63
59
  }.each do |sql, should_send_to_all_connections|
64
-
65
60
  it "determines that \"#{sql}\" #{should_send_to_all_connections ? 'should' : 'should not'} be sent to all underlying connections" do
66
61
  proxy = klass.new(config(1,1))
67
62
  proxy.master_pool.connections.each{|con| expect(con).to receive(:execute).with(sql).once}
@@ -75,7 +70,6 @@ describe ActiveRecord::ConnectionAdapters::MakaraAbstractAdapter do
75
70
 
76
71
  proxy.execute(sql)
77
72
  end
78
-
79
73
  end
80
74
 
81
75
  {
@@ -108,12 +102,9 @@ describe ActiveRecord::ConnectionAdapters::MakaraAbstractAdapter do
108
102
  max_treats IS NULL
109
103
  } => true
110
104
  }.each do |sql,should_stick|
111
-
112
105
  it "should #{should_stick ? 'stick' : 'not stick'} to master if handling sql like \"#{sql}\"" do
113
106
  proxy = klass.new(config(0,0))
114
107
  expect(proxy.would_stick?(sql)).to eq(should_stick)
115
108
  end
116
-
117
109
  end
118
-
119
110
  end
@@ -2,12 +2,10 @@ require 'spec_helper'
2
2
  require 'active_record/connection_adapters/mysql2_adapter'
3
3
 
4
4
  describe 'MakaraMysql2Adapter' do
5
-
6
- let(:db_username){ ENV['TRAVIS'] ? 'travis' : 'root' }
7
-
8
5
  let(:config){
9
- base = YAML.load_file(File.expand_path('spec/support/mysql2_database.yml'))['test']
10
- base
6
+ file = File.expand_path('spec/support/mysql2_database.yml')
7
+ hash = YAML.load(ERB.new(File.read(file)).result)
8
+ hash['test']
11
9
  }
12
10
 
13
11
  let(:connection) { ActiveRecord::Base.connection }
@@ -18,7 +16,6 @@ describe 'MakaraMysql2Adapter' do
18
16
  end
19
17
 
20
18
  context "unconnected" do
21
-
22
19
  it 'should allow a connection to be established' do
23
20
  establish_connection(config)
24
21
  expect(ActiveRecord::Base.connection).to be_instance_of(ActiveRecord::ConnectionAdapters::MakaraMysql2Adapter)
@@ -56,7 +53,6 @@ describe 'MakaraMysql2Adapter' do
56
53
  expect{
57
54
  connection.execute('SET @t1 = 1')
58
55
  }.to raise_error(Makara::Errors::NoConnectionsAvailable)
59
-
60
56
  end
61
57
 
62
58
  context "unconnect afterwards" do
@@ -84,8 +80,7 @@ describe 'MakaraMysql2Adapter' do
84
80
  load(File.dirname(__FILE__) + '/../../support/schema.rb')
85
81
  change_context
86
82
 
87
- allow(ActiveRecord::Base).to receive(:mysql2_connection) do |config|
88
- config[:username] = db_username
83
+ allow(ActiveRecord::Base).to receive(:mysql2_connection) do
89
84
  original_method.call(config)
90
85
  end
91
86
 
@@ -102,18 +97,15 @@ describe 'MakaraMysql2Adapter' do
102
97
  ActiveRecord::Base.remove_connection
103
98
  end
104
99
  end
105
-
106
100
  end
107
101
 
108
102
  context 'with the connection established and schema loaded' do
109
-
110
103
  before do
111
104
  establish_connection(config)
112
105
  load(File.dirname(__FILE__) + '/../../support/schema.rb')
113
106
  change_context
114
107
  end
115
108
 
116
-
117
109
  it 'should have one master and two slaves' do
118
110
  expect(connection.master_pool.connection_count).to eq(1)
119
111
  expect(connection.slave_pool.connection_count).to eq(2)
@@ -159,17 +151,14 @@ describe 'MakaraMysql2Adapter' do
159
151
  end
160
152
 
161
153
  it 'should send exists? to slave' do
162
- next if ActiveRecord::VERSION::MAJOR == 3 && ActiveRecord::VERSION::MINOR == 0 # query doesn't work?
163
-
164
154
  allow_any_instance_of(Makara::Strategies::RoundRobin).to receive(:single_one?){ true }
165
155
  Test::User.exists? # flush other (schema) things that need to happen
166
-
156
+
167
157
  con = connection.slave_pool.connections.first
168
- if (ActiveRecord::VERSION::MAJOR == 5 && ActiveRecord::VERSION::MINOR <= 0)
169
- expect(con).to receive(:execute).with(/SELECT\s+1\s*(AS one)?\s+FROM .?users.?\s+LIMIT\s+.?1/, any_args).once.and_call_original
170
- else
171
- expect(con).to receive(:exec_query).with(/SELECT\s+1\s*(AS one)?\s+FROM .?users.?\s+LIMIT\s+.?1/, any_args).once.and_call_original
172
- end
158
+ expect(con).to receive(:exec_query) do |query|
159
+ expect(query).to match(/SELECT\s+1\s*(AS one)?\s+FROM .?users.?\s+LIMIT\s+.?1/)
160
+ end.once.and_call_original
161
+
173
162
  Test::User.exists?
174
163
  end
175
164
 
@@ -198,7 +187,6 @@ describe 'MakaraMysql2Adapter' do
198
187
  }.to raise_error(Makara::Errors::AllConnectionsBlacklisted)
199
188
  end
200
189
  end
201
-
202
190
  end
203
191
 
204
192
  describe 'transaction support' do
@@ -256,5 +244,4 @@ describe 'MakaraMysql2Adapter' do
256
244
  it_behaves_like 'a transaction supporter'
257
245
  end
258
246
  end
259
-
260
247
  end
@@ -1,16 +1,12 @@
1
1
  # RGeo doesn't play well with JRuby and to avoid complicated test setup
2
2
  # we're only testing ActiveRecord version ~> 4.2
3
- # also rgeo only works on 2.1+
4
3
 
5
- rmajor, rminor, rpatch = RUBY_VERSION.split(/[^\d]/)[0..2].map(&:to_i)
6
4
  require 'active_record'
7
5
 
8
6
  # TODO: test this in AR 5+ ?
9
-
10
7
  if RUBY_ENGINE == 'ruby' &&
11
8
  ActiveRecord::VERSION::MAJOR == 4 &&
12
- ActiveRecord::VERSION::MINOR >= 2 &&
13
- (rmajor > 2 || (rmajor == 2 && rminor >= 1))
9
+ ActiveRecord::VERSION::MINOR >= 2
14
10
 
15
11
  require 'spec_helper'
16
12
  require 'rgeo'
@@ -18,12 +14,8 @@ if RUBY_ENGINE == 'ruby' &&
18
14
  require 'active_record/connection_adapters/postgis_adapter'
19
15
 
20
16
  describe 'MakaraPostgisAdapter' do
21
- let(:db_username){ ENV['TRAVIS'] ? 'postgres' : `whoami`.chomp }
22
-
23
17
  let(:config) do
24
- base = YAML.load_file(File.expand_path('spec/support/postgis_database.yml'))['test']
25
- base['username'] = db_username
26
- base
18
+ YAML.load_file(File.expand_path('spec/support/postgis_database.yml'))['test']
27
19
  end
28
20
 
29
21
  let(:connection) { ActiveRecord::Base.connection }
@@ -3,13 +3,8 @@ require 'active_record/connection_adapters/postgresql_adapter'
3
3
  require 'active_record/errors'
4
4
 
5
5
  describe 'MakaraPostgreSQLAdapter' do
6
-
7
- let(:db_username){ ENV['TRAVIS'] ? 'postgres' : `whoami`.chomp }
8
-
9
6
  let(:config) do
10
- base = YAML.load_file(File.expand_path('spec/support/postgresql_database.yml'))['test']
11
- base['username'] = db_username
12
- base
7
+ YAML.load_file(File.expand_path('spec/support/postgresql_database.yml'))['test']
13
8
  end
14
9
 
15
10
  let(:connection) { ActiveRecord::Base.connection }
@@ -19,21 +14,18 @@ describe 'MakaraPostgreSQLAdapter' do
19
14
  change_context
20
15
  end
21
16
 
22
-
23
17
  it 'should allow a connection to be established' do
24
18
  establish_connection(config)
25
19
  expect(ActiveRecord::Base.connection).to be_instance_of(ActiveRecord::ConnectionAdapters::MakaraPostgreSQLAdapter)
26
20
  end
27
21
 
28
22
  context 'with the connection established and schema loaded' do
29
-
30
23
  before do
31
24
  establish_connection(config)
32
25
  load(File.dirname(__FILE__) + '/../../support/schema.rb')
33
26
  change_context
34
27
  end
35
28
 
36
-
37
29
  it 'should have one master and two slaves' do
38
30
  expect(connection.master_pool.connection_count).to eq(1)
39
31
  expect(connection.slave_pool.connection_count).to eq(2)
@@ -74,18 +66,15 @@ describe 'MakaraPostgreSQLAdapter' do
74
66
  end
75
67
 
76
68
  it 'should send exists? to slave' do
77
- next if ActiveRecord::VERSION::MAJOR == 3 && ActiveRecord::VERSION::MINOR == 0 # query doesn't work?
78
-
79
69
  allow_any_instance_of(Makara::Strategies::RoundRobin).to receive(:single_one?){ true }
80
70
  Test::User.exists? # flush other (schema) things that need to happen
81
-
71
+
82
72
  con = connection.slave_pool.connections.first
83
- if (ActiveRecord::VERSION::MAJOR == 4 && ActiveRecord::VERSION::MINOR >= 2) ||
84
- (ActiveRecord::VERSION::MAJOR == 5 && ActiveRecord::VERSION::MINOR <= 0)
85
- expect(con).to receive(:exec_no_cache).with(/SELECT\s+1\s*(AS one)?\s+FROM .?users.?\s+LIMIT\s+.?1/, any_args).once.and_call_original
86
- else
87
- expect(con).to receive(:exec_query).with(/SELECT\s+1\s*(AS one)?\s+FROM .?users.?\s+LIMIT\s+.?1/, any_args).once.and_call_original
88
- end
73
+
74
+ expect(con).to receive(:exec_query) do |query|
75
+ expect(query).to match(/SELECT\s+1\s*(AS one)?\s+FROM .?users.?\s+LIMIT\s+.?1/)
76
+ end.once.and_call_original
77
+
89
78
  Test::User.exists?
90
79
  end
91
80
 
@@ -194,7 +183,6 @@ describe 'MakaraPostgreSQLAdapter' do
194
183
  end
195
184
 
196
185
  context 'with two activerecord connection pools' do
197
-
198
186
  before :each do
199
187
  class Model1 < ActiveRecord::Base
200
188
  end
@@ -204,7 +192,6 @@ describe 'MakaraPostgreSQLAdapter' do
204
192
 
205
193
  Model1.establish_connection(config)
206
194
  Model2.establish_connection(config)
207
-
208
195
  end
209
196
 
210
197
  it 'should not leak raw connection into activerecord pool' do
data/spec/cache_spec.rb CHANGED
@@ -1,7 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Makara::Cache do
4
-
5
4
  it 'shows a warning' do
6
5
  expect(Makara::Logging::Logger).to receive(:log).with(/Setting the Makara::Cache\.store won't have any effects/, :warn)
7
6
  described_class.store = :noop
@@ -1,21 +1,20 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Makara::ConfigParser do
4
-
5
4
  let(:config){
6
5
  {
7
- :top_level => 'value',
8
- :makara => {
9
- :connections => [
6
+ top_level: 'value',
7
+ makara: {
8
+ connections: [
10
9
  {
11
- :role => 'master',
12
- :name => 'themaster'
10
+ role: 'master',
11
+ name: 'themaster'
13
12
  },
14
13
  {
15
- :name => 'slave1'
14
+ name: 'slave1'
16
15
  },
17
16
  {
18
- :name => 'slave2'
17
+ name: 'slave2'
19
18
  }
20
19
  ]
21
20
  }
@@ -25,27 +24,27 @@ describe Makara::ConfigParser do
25
24
  context '::merge_and_resolve_default_url_config' do
26
25
  let(:config_without_url) do
27
26
  {
28
- :master_ttl => 5,
29
- :blacklist_duration => 30,
30
- :sticky => true,
31
- :adapter => 'mysql2_makara',
32
- :encoding => 'utf8',
33
- :host => 'localhost',
34
- :database => 'db_name',
35
- :username => 'db_username',
36
- :password => 'db_password',
37
- :port => 3306
27
+ master_ttl: 5,
28
+ blacklist_duration: 30,
29
+ sticky: true,
30
+ adapter: 'mysql2_makara',
31
+ encoding: 'utf8',
32
+ host: 'localhost',
33
+ database: 'db_name',
34
+ username: 'db_username',
35
+ password: 'db_password',
36
+ port: 3306
38
37
  }
39
38
  end
40
39
 
41
40
  let(:config_with_url) do
42
41
  {
43
- :master_ttl => 5,
44
- :blacklist_duration => 30,
45
- :sticky => true,
46
- :adapter => 'mysql2_makara',
47
- :encoding => 'utf8',
48
- :url => 'mysql2://db_username:db_password@localhost:3306/db_name'
42
+ master_ttl: 5,
43
+ blacklist_duration: 30,
44
+ sticky: true,
45
+ adapter: 'mysql2_makara',
46
+ encoding: 'utf8',
47
+ url: 'mysql2://db_username:db_password@localhost:3306/db_name'
49
48
  }
50
49
  end
51
50
 
@@ -76,12 +75,11 @@ describe Makara::ConfigParser do
76
75
  ENV['DATABASE_URL'] = database_url
77
76
  end
78
77
  end
79
-
80
78
  end
81
79
 
82
80
  it 'should provide a default proxy id based on the recursively sorted config' do
83
81
  parsera = described_class.new(config)
84
- parserb = described_class.new(config.merge(:other => 'value'))
82
+ parserb = described_class.new(config.merge(other: 'value'))
85
83
  parserc = described_class.new(config)
86
84
 
87
85
  expect(parsera.id).not_to eq(parserb.id)
@@ -113,27 +111,27 @@ describe Makara::ConfigParser do
113
111
  parser = described_class.new(config)
114
112
  expect(parser.master_configs).to eq([
115
113
  {
116
- :name => 'themaster',
117
- :top_level => 'value',
118
- :sticky => true,
119
- :blacklist_duration => 30,
120
- :master_ttl => 5
114
+ name: 'themaster',
115
+ top_level: 'value',
116
+ sticky: true,
117
+ blacklist_duration: 30,
118
+ master_ttl: 5
121
119
  }
122
120
  ])
123
121
  expect(parser.slave_configs).to eq([
124
122
  {
125
- :name => 'slave1',
126
- :top_level => 'value',
127
- :sticky => true,
128
- :blacklist_duration => 30,
129
- :master_ttl => 5
123
+ name: 'slave1',
124
+ top_level: 'value',
125
+ sticky: true,
126
+ blacklist_duration: 30,
127
+ master_ttl: 5
130
128
  },
131
129
  {
132
- :name => 'slave2',
133
- :top_level => 'value',
134
- :sticky => true,
135
- :blacklist_duration => 30,
136
- :master_ttl => 5
130
+ name: 'slave2',
131
+ top_level: 'value',
132
+ sticky: true,
133
+ blacklist_duration: 30,
134
+ master_ttl: 5
137
135
  }
138
136
  ])
139
137
  end
@@ -146,27 +144,27 @@ describe Makara::ConfigParser do
146
144
  parser = described_class.new(config)
147
145
  expect(parser.master_configs).to eq([
148
146
  {
149
- :name => 'themaster',
150
- :top_level => 'value',
151
- :sticky => true,
152
- :blacklist_duration => 456,
153
- :master_ttl => 5
147
+ name: 'themaster',
148
+ top_level: 'value',
149
+ sticky: true,
150
+ blacklist_duration: 456,
151
+ master_ttl: 5
154
152
  }
155
153
  ])
156
154
  expect(parser.slave_configs).to eq([
157
155
  {
158
- :name => 'slave1',
159
- :top_level => 'slave value',
160
- :sticky => true,
161
- :blacklist_duration => 123,
162
- :master_ttl => 5
156
+ name: 'slave1',
157
+ top_level: 'slave value',
158
+ sticky: true,
159
+ blacklist_duration: 123,
160
+ master_ttl: 5
163
161
  },
164
162
  {
165
- :name => 'slave2',
166
- :top_level => 'value',
167
- :sticky => true,
168
- :blacklist_duration => 123,
169
- :master_ttl => 5
163
+ name: 'slave2',
164
+ top_level: 'value',
165
+ sticky: true,
166
+ blacklist_duration: 123,
167
+ master_ttl: 5
170
168
  }
171
169
  ])
172
170
  end