ar-multidb 0.4.1 → 0.4.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 191bf9ea7a4823bd2c2148a13a3d7e19518233fafaac0be30aa1b018e50057ac
4
- data.tar.gz: 0a722ce4f9289e9a1e8bf4c2200ef3243119fff97e570eb8787254f6d4f8aac2
3
+ metadata.gz: 3ecd6501582114326efd8452ffe712c79b5667d1ce54a181eff6efeaf40d1897
4
+ data.tar.gz: 85c3e8b3dc155374ef7d7caed121bf5a140cf64030b760bb6cdcdb3123e8cddc
5
5
  SHA512:
6
- metadata.gz: 7d0da233e8c260b3e1893f1a259fc7014d49bc7fd17bc937c5f0436e6297af1cf794e56b611001a4670dd6a20fc7dc27359cb2ff41d26af5dd42d125b44ce03d
7
- data.tar.gz: 3fa308aeb36f94c7717e46c6c1758a66609c278500ccf65141992fc0de0902293a2edfe2a6d358972b8a7dcd8c85784328770e9b2f43c670fe09b8b3558c0269
6
+ metadata.gz: e2eefe25c89d914367afecce5ebc07f4be668985097969f5a1c9acb563a22c448778b4128caf64e5dd6029437e28b13188097d6c66c111f4b5911543858f50b1
7
+ data.tar.gz: c83c08a921575803b15ebf473e125ad6da3619b321208766e9f8d058bb8226154cd21255d14aa77be260bfd17da29926be8aa3bdeda547fed0c6f46624370283
@@ -0,0 +1,62 @@
1
+ AllCops:
2
+ TargetRubyVersion: 2.4
3
+ Exclude:
4
+ - '**/vendor/**/*'
5
+
6
+ Layout/EmptyLinesAroundAttributeAccessor:
7
+ Enabled: true
8
+ Layout/SpaceAroundMethodCallOperator:
9
+ Enabled: true
10
+ Layout/LineLength:
11
+ Exclude:
12
+ - 'ar-multidb.gemspec'
13
+ Lint/DeprecatedOpenSSLConstant:
14
+ Enabled: true
15
+ Lint/DuplicateElsifCondition:
16
+ Enabled: true
17
+ Lint/MixedRegexpCaptureTypes:
18
+ Enabled: true
19
+ Lint/RaiseException:
20
+ Enabled: true
21
+ Lint/StructNewOverride:
22
+ Enabled: true
23
+ Naming/FileName:
24
+ Exclude:
25
+ - 'lib/ar-multidb.rb'
26
+ Metrics:
27
+ Enabled: false
28
+ Style/AccessorGrouping:
29
+ Enabled: true
30
+ Style/ArrayCoercion:
31
+ Enabled: true
32
+ Style/BisectedAttrAccessor:
33
+ Enabled: true
34
+ Style/CaseLikeIf:
35
+ Enabled: true
36
+ Style/Documentation:
37
+ Enabled: false
38
+ Style/ExponentialNotation:
39
+ Enabled: true
40
+ Style/HashAsLastArrayItem:
41
+ Enabled: true
42
+ Style/HashEachMethods:
43
+ Enabled: true
44
+ Style/HashLikeCase:
45
+ Enabled: true
46
+ Style/HashTransformKeys:
47
+ Enabled: true
48
+ Style/HashTransformValues:
49
+ Enabled: true
50
+ Style/RedundantAssignment:
51
+ Enabled: true
52
+ Style/RedundantFetchBlock:
53
+ Enabled: true
54
+ Style/RedundantFileExtensionInRequire:
55
+ Enabled: true
56
+ Style/RedundantRegexpCharacterClass:
57
+ Enabled: true
58
+ Style/RedundantRegexpEscape:
59
+ Enabled: true
60
+ Style/SlicingWithRange:
61
+ Enabled: true
62
+
@@ -1,10 +1,15 @@
1
1
  sudo: false
2
2
  language: ruby
3
+ cache: bundler
4
+
5
+ script:
6
+ - bundle exec rubocop
7
+ - bundle exec rspec
3
8
 
4
9
  matrix:
5
10
  fast_finish: true
6
11
  include:
7
- - rvm: 2.5.0
12
+ - rvm: 2.5
8
13
  gemfile: gemfiles/activerecord51.gemfile
9
- - rvm: 2.5.0
14
+ - rvm: 2.5
10
15
  gemfile: gemfiles/activerecord52.gemfile
@@ -4,6 +4,12 @@ All notable changes to this project will be documented in this file.
4
4
  The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
5
5
  and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html)
6
6
 
7
+ ## [0.4.2]
8
+ ### Changed
9
+ - adjust rails restriction to exclude untested rails 6
10
+ - adjust minimum ruby version to 2.4
11
+ - add rubocop
12
+
7
13
  ## [0.4.1]
8
14
  ### Added
9
15
  - Added support for database aliases ( PR #26 )
data/Gemfile CHANGED
@@ -1,9 +1,11 @@
1
- source "http://rubygems.org"
1
+ # frozen_string_literal: true
2
+
3
+ source 'http://rubygems.org'
2
4
 
3
5
  # Specify your gem's dependencies in ar-multidb.gemspec
4
6
  gemspec
5
7
 
6
- local_gemfile = "Gemfile.local"
8
+ local_gemfile = 'Gemfile.local'
7
9
 
8
10
  if File.exist?(local_gemfile)
9
11
  eval(File.read(local_gemfile)) # rubocop:disable Security/Eval
@@ -2,9 +2,9 @@
2
2
 
3
3
  # Multidb
4
4
 
5
- A simple, no-nonsense ActiveRecord extension which allows the application to switch between multiple database connections, such as in a master/slave environment. For example:
5
+ A simple, no-nonsense ActiveRecord extension which allows the application to switch between multiple database connections, such as in a primary/replica environment. For example:
6
6
 
7
- Multidb.use(:slave) do
7
+ Multidb.use(:replica) do
8
8
  @posts = Post.all
9
9
  end
10
10
 
@@ -14,7 +14,7 @@ Randomized balancing of multiple connections within a group is supported. In the
14
14
 
15
15
  ## Requirements
16
16
 
17
- * Ruby 2.2 or later.
17
+ * Ruby 2.4 or later.
18
18
  * ActiveRecord 5.1 or later.
19
19
 
20
20
  ## Older releases
@@ -32,10 +32,10 @@ Compared to other, more full-featured extensions such as Octopus and Seamless Da
32
32
 
33
33
  **Orthogonal**. Unlike Octopus, for example, connections follow context:
34
34
 
35
- Multidb.use(:master) do
35
+ Multidb.use(:primary) do
36
36
  @post = Post.find(1)
37
- Multidb.use(:slave) do
38
- @post.authors # This will use the slave
37
+ Multidb.use(:replica) do
38
+ @post.authors # This will use the replica
39
39
  end
40
40
  end
41
41
 
@@ -60,8 +60,8 @@ All that is needed is to set up your `database.yml` file:
60
60
  host: db1
61
61
  multidb:
62
62
  databases:
63
- slave:
64
- host: db-slave
63
+ replica:
64
+ host: db-replica
65
65
 
66
66
  Each database entry may be a hash or an array. So this also works:
67
67
 
@@ -73,9 +73,9 @@ Each database entry may be a hash or an array. So this also works:
73
73
  host: db1
74
74
  multidb:
75
75
  databases:
76
- slave:
77
- - host: db-slave1
78
- - host: db-slave2
76
+ replica:
77
+ - host: db-replica1
78
+ - host: db-replica2
79
79
 
80
80
  If multiple elements are specified, Multidb will use the list to pick a random candidate connection.
81
81
 
@@ -100,14 +100,14 @@ With the above, `Multidb.use(:main_db)` and `Multidb.use(:secondary_db)` will wo
100
100
 
101
101
  To use the connection, modify your code by wrapping database access logic in blocks:
102
102
 
103
- Multidb.use(:slave) do
103
+ Multidb.use(:replica) do
104
104
  @posts = Post.all
105
105
  end
106
106
 
107
107
  To wrap entire controller requests, for example:
108
108
 
109
109
  class PostsController < ApplicationController
110
- around_filter :run_using_slave, only: [:index]
110
+ around_filter :run_using_replica, only: [:index]
111
111
 
112
112
  def index
113
113
  @posts = Post.all
@@ -117,22 +117,22 @@ To wrap entire controller requests, for example:
117
117
  # Won't be wrapped
118
118
  end
119
119
 
120
- def run_using_slave(&block)
121
- Multidb.use(:slave, &block)
120
+ def run_using_replica(&block)
121
+ Multidb.use(:replica, &block)
122
122
  end
123
123
  end
124
124
 
125
125
  You can also set the current connection for the remainder of the thread's execution:
126
126
 
127
- Multidb.use(:slave)
127
+ Multidb.use(:replica)
128
128
  # Do work
129
- Multidb.use(:master)
129
+ Multidb.use(:primary)
130
130
 
131
131
  Note that the symbol `:default` will (unless you override it) refer to the default top-level ActiveRecord configuration.
132
132
 
133
133
  ## Development mode
134
134
 
135
- In development you will typically want `Multidb.use(:slave)` to still work, but you probably don't want to run multiple databases on your development box. To make `use` silently fall back to using the default connection, Multidb can run in fallback mode.
135
+ In development you will typically want `Multidb.use(:replica)` to still work, but you probably don't want to run multiple databases on your development box. To make `use` silently fall back to using the default connection, Multidb can run in fallback mode.
136
136
 
137
137
  If you are using Rails, this will be automatically enabled in `development` and `test` environments. Otherwise, simply set `fallback: true` in `database.yml`:
138
138
 
data/Rakefile CHANGED
@@ -1,26 +1,27 @@
1
- require "bundler/gem_tasks"
1
+ # frozen_string_literal: true
2
+
3
+ require 'bundler/gem_tasks'
2
4
  require 'rspec/core/rake_task'
3
5
 
4
6
  RSpec::Core::RakeTask.new
5
7
 
6
- task :default => :spec
8
+ task default: :spec
7
9
 
8
10
  desc 'Bump version'
9
11
  task :bump do
10
- if `git status -uno -s --porcelain | wc -l`.to_i > 0
11
- abort "You have uncommitted changed."
12
- end
12
+ abort 'You have uncommitted changed.' if `git status -uno -s --porcelain | wc -l`.to_i.positive?
13
+
13
14
  text = File.read('lib/multidb/version.rb')
14
15
  if text =~ /VERSION = '(.*)'/
15
- old_version = $1
16
+ old_version = Regexp.last_match(1)
16
17
  version_parts = old_version.split('.')
17
18
  version_parts[-1] = version_parts[-1].to_i + 1
18
19
  new_version = version_parts.join('.')
19
20
  text.gsub!(/VERSION = '(.*)'/, "VERSION = '#{new_version}'")
20
21
  File.open('lib/multidb/version.rb', 'w') { |f| f << text }
21
- (system("git add lib/multidb/version.rb") and
22
- system("git commit -m 'Bump to #{new_version}.'")) or abort "Failed to commit."
22
+ (system('git add lib/multidb/version.rb') &&
23
+ system("git commit -m 'Bump to #{new_version}.'")) || abort('Failed to commit.')
23
24
  else
24
- abort "Could not find version number"
25
+ abort 'Could not find version number'
25
26
  end
26
27
  end
@@ -1,26 +1,28 @@
1
- # -*- encoding: utf-8 -*-
2
- $:.push File.expand_path("../lib", __FILE__)
3
- require "multidb/version"
1
+ # frozen_string_literal: true
2
+
3
+ $LOAD_PATH.push File.expand_path('lib', __dir__)
4
+ require 'multidb/version'
4
5
 
5
6
  Gem::Specification.new do |s|
6
- s.name = "ar-multidb"
7
+ s.name = 'ar-multidb'
7
8
  s.version = Multidb::VERSION
8
- s.authors = ["Alexander Staubo"]
9
- s.email = ["alex@bengler.no"]
10
- s.homepage = ""
11
- s.summary = s.description = %q{Multidb is an ActiveRecord extension for switching between multiple database connections, such as master/slave setups.}
12
-
13
- s.rubyforge_project = "ar-multidb"
9
+ s.authors = ['Alexander Staubo', 'Edward Rudd']
10
+ s.email = ['alex@bengler.no', 'urkle@outoforder.cc']
11
+ s.homepage = ''
12
+ s.summary = s.description = 'Multidb is an ActiveRecord extension for switching between multiple database connections, such as primary/replica setups.'
14
13
 
15
14
  s.files = `git ls-files`.split("\n")
16
15
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
17
- s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
18
- s.require_paths = ["lib"]
16
+ s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
17
+ s.require_paths = ['lib']
18
+
19
+ s.required_ruby_version = '>= 2.4.0'
19
20
 
20
- s.add_runtime_dependency 'activesupport', '>= 5.1', '<= 6.0'
21
- s.add_runtime_dependency 'activerecord', '>= 5.1', '<= 6.0'
21
+ s.add_runtime_dependency 'activerecord', '>= 5.1', '< 6.0'
22
+ s.add_runtime_dependency 'activesupport', '>= 5.1', '< 6.0'
22
23
 
23
- s.add_development_dependency 'rspec'
24
- s.add_development_dependency 'sqlite3'
25
- s.add_development_dependency 'rake'
24
+ s.add_development_dependency 'rake', '~> 12.0'
25
+ s.add_development_dependency 'rspec', '~> 3.8'
26
+ s.add_development_dependency 'rubocop', '~> 0.88.0'
27
+ s.add_development_dependency 'sqlite3', '~> 1.3'
26
28
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source 'https://rubygems.org'
2
4
 
3
5
  gem 'activerecord', '~> 5.1.0'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source 'https://rubygems.org'
2
4
 
3
5
  gem 'activerecord', '~> 5.2.0'
@@ -1 +1,3 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'multidb'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'active_record'
2
4
 
3
5
  require 'active_support/core_ext/module/delegation'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Multidb
2
4
  class Balancer
3
5
  attr_accessor :fallback
@@ -6,34 +8,33 @@ module Multidb
6
8
  @candidates = {}.with_indifferent_access
7
9
  @default_configuration = configuration
8
10
 
9
- if @default_configuration
11
+ return unless @default_configuration
10
12
 
11
- append(@default_configuration.raw_configuration[:databases] || {})
13
+ append(@default_configuration.raw_configuration[:databases] || {})
12
14
 
13
- if @default_configuration.raw_configuration.include?(:fallback)
14
- @fallback = @default_configuration.raw_configuration[:fallback]
15
- elsif defined?(Rails)
16
- @fallback = %w(development test).include?(Rails.env)
17
- else
18
- @fallback = false
19
- end
20
- @default_candidate = Candidate.new('default', @default_configuration.default_handler)
21
- unless @candidates.include?(:default)
22
- @candidates[:default] = [@default_candidate]
23
- end
24
- end
15
+ @fallback = if @default_configuration.raw_configuration.include?(:fallback)
16
+ @default_configuration.raw_configuration[:fallback]
17
+ elsif defined?(Rails)
18
+ %w[development test].include?(Rails.env)
19
+ else
20
+ false
21
+ end
22
+
23
+ @default_candidate = Candidate.new('default', @default_configuration.default_handler)
24
+
25
+ @candidates[:default] = [@default_candidate] unless @candidates.include?(:default)
25
26
  end
26
27
 
27
28
  def append(databases)
28
29
  databases.each_pair do |name, config|
29
30
  configs = config.is_a?(Array) ? config : [config]
30
- configs.each do |config|
31
- if config["alias"]
32
- @candidates[name] = @candidates[config["alias"]]
31
+ configs.each do |cfg|
32
+ if cfg['alias']
33
+ @candidates[name] = @candidates[cfg['alias']]
33
34
  next
34
35
  end
35
36
 
36
- candidate = Candidate.new(name, @default_configuration.default_adapter.merge(config))
37
+ candidate = Candidate.new(name, @default_configuration.default_adapter.merge(cfg))
37
38
  @candidates[name] ||= []
38
39
  @candidates[name].push(candidate)
39
40
  end
@@ -44,16 +45,18 @@ module Multidb
44
45
  @candidates.values.flatten.each(&:disconnect!)
45
46
  end
46
47
 
47
- def get(name, &block)
48
+ def get(name, &_block)
48
49
  candidates = @candidates[name]
49
50
  candidates ||= @fallback ? @candidates[:default] : []
51
+
50
52
  raise ArgumentError, "No such database connection '#{name}'" if candidates.empty?
51
- candidate = candidates.respond_to?(:sample) ?
52
- candidates.sample : candidates[rand(candidates.length)]
53
+
54
+ candidate = candidates.respond_to?(:sample) ? candidates.sample : candidates[rand(candidates.length)]
55
+
53
56
  block_given? ? yield(candidate) : candidate
54
57
  end
55
58
 
56
- def use(name, &block)
59
+ def use(name, &_block)
57
60
  result = nil
58
61
  get(name) do |candidate|
59
62
  if block_given?
@@ -115,7 +118,5 @@ module Multidb
115
118
  Multidb.balancer.disconnect!
116
119
  end
117
120
  end
118
-
119
121
  end
120
-
121
122
  end
@@ -1,17 +1,19 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Multidb
2
4
  class Candidate
3
5
  def initialize(name, target)
4
6
  @name = name
5
7
 
6
- if target.is_a?(Hash)
8
+ case target
9
+ when Hash
7
10
  @connection_handler = ActiveRecord::ConnectionAdapters::ConnectionHandler.new
8
11
  @connection_handler.establish_connection(target.merge(name: 'primary'))
9
- elsif target.is_a?(ActiveRecord::ConnectionAdapters::ConnectionHandler)
12
+ when ActiveRecord::ConnectionAdapters::ConnectionHandler
10
13
  @connection_handler = target
11
14
  else
12
15
  raise ArgumentError, 'Connection handler not passed to target'
13
16
  end
14
-
15
17
  end
16
18
 
17
19
  def connection(&block)
@@ -28,4 +30,4 @@ module Multidb
28
30
 
29
31
  attr_reader :name
30
32
  end
31
- end
33
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Multidb
2
4
  class << self
3
5
  delegate :use, :get, :disconnect!, to: :balancer
@@ -5,17 +7,14 @@ module Multidb
5
7
 
6
8
  def self.init(config)
7
9
  activerecord_config = config.dup.with_indifferent_access
8
- default_adapter, configuration_hash = activerecord_config, activerecord_config.delete(:multidb)
10
+ default_adapter = activerecord_config
11
+ configuration_hash = activerecord_config.delete(:multidb)
9
12
 
10
13
  @balancer = Balancer.new(Configuration.new(default_adapter, configuration_hash || {}))
11
14
  end
12
15
 
13
16
  def self.balancer
14
- if @balancer
15
- @balancer
16
- else
17
- raise NotInitializedError, "Balancer not initialized. You need to run Multidb.init first"
18
- end
17
+ @balancer || raise(NotInitializedError, 'Balancer not initialized. You need to run Multidb.init first')
19
18
  end
20
19
 
21
20
  def self.reset!
@@ -31,8 +30,6 @@ module Multidb
31
30
  @raw_configuration = configuration_hash
32
31
  end
33
32
 
34
- attr_reader :default_handler
35
- attr_reader :default_adapter
36
- attr_reader :raw_configuration
33
+ attr_reader :default_handler, :default_adapter, :raw_configuration
37
34
  end
38
- end
35
+ end
@@ -1,14 +1,16 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Multidb
2
4
  module LogSubscriberExtension
3
5
  def sql(event)
4
- if name = Multidb.balancer.current_connection_name
5
- event.payload[:db_name] = name
6
- end
6
+ name = Multidb.balancer.current_connection_name
7
+ event.payload[:db_name] = name if name
7
8
  super
8
9
  end
9
10
 
10
11
  def debug(msg)
11
- if name = Multidb.balancer.current_connection_name
12
+ name = Multidb.balancer.current_connection_name
13
+ if name
12
14
  db = color("[DB: #{name}]", ActiveSupport::LogSubscriber::GREEN, true)
13
15
  super(db + msg)
14
16
  else
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'active_record/base'
2
4
 
3
5
  module Multidb
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Multidb
2
- VERSION = '0.4.1'
4
+ VERSION = '0.4.2'
3
5
  end
@@ -1,7 +1,8 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'spec_helper'
2
4
 
3
5
  describe 'Multidb.balancer' do
4
-
5
6
  context 'with no configuration' do
6
7
  it 'raises exception' do
7
8
  -> { Multidb.balancer }.should raise_error(Multidb::NotInitializedError)
@@ -10,7 +11,7 @@ describe 'Multidb.balancer' do
10
11
 
11
12
  context 'with configuration' do
12
13
  before do
13
- ActiveRecord::Base.establish_connection(configuration_with_slaves)
14
+ ActiveRecord::Base.establish_connection(configuration_with_replicas)
14
15
  end
15
16
 
16
17
  it 'returns balancer' do
@@ -28,30 +29,30 @@ describe 'Multidb.balancer' do
28
29
  end
29
30
 
30
31
  it 'returns default connection name for default connection' do
31
- conn = ActiveRecord::Base.connection
32
+ ActiveRecord::Base.connection
32
33
 
33
34
  Multidb.balancer.current_connection_name.should eq :default
34
35
  end
35
-
36
+
36
37
  context 'with additional configurations' do
37
38
  before do
38
- additional_configuration = {slave4: { database: 'spec/test-slave4.sqlite' }}
39
+ additional_configuration = { replica4: { database: 'spec/test-replica4.sqlite' } }
39
40
  Multidb.balancer.append(additional_configuration)
40
41
  end
41
42
 
42
43
  it 'makes the new database available' do
43
- Multidb.use(:slave4) do
44
+ Multidb.use(:replica4) do
44
45
  conn = ActiveRecord::Base.connection
45
46
  conn.should eq Multidb.balancer.current_connection
46
47
  list = conn.execute('pragma database_list')
47
48
  list.length.should eq 1
48
- File.basename(list[0]['file']).should eq 'test-slave4.sqlite'
49
+ File.basename(list[0]['file']).should eq 'test-replica4.sqlite'
49
50
  end
50
51
  end
51
52
 
52
53
  it 'returns the connection name' do
53
- Multidb.use(:slave4) do
54
- Multidb.balancer.current_connection_name.should eq :slave4
54
+ Multidb.use(:replica4) do
55
+ Multidb.balancer.current_connection_name.should eq :replica4
55
56
  end
56
57
  end
57
58
  end
@@ -60,12 +61,12 @@ describe 'Multidb.balancer' do
60
61
  describe '#use' do
61
62
  context 'with configuration' do
62
63
  before do
63
- ActiveRecord::Base.establish_connection(configuration_with_slaves)
64
+ ActiveRecord::Base.establish_connection(configuration_with_replicas)
64
65
  end
65
66
 
66
67
  context 'undefined connection' do
67
68
  it 'raises exception' do
68
- -> {
69
+ lambda {
69
70
  Multidb.use(:something) do
70
71
  end
71
72
  }.should raise_error(ArgumentError)
@@ -73,7 +74,7 @@ describe 'Multidb.balancer' do
73
74
  end
74
75
 
75
76
  it 'returns default connection on :default' do
76
- conn = ActiveRecord::Base.connection
77
+ ActiveRecord::Base.connection
77
78
  Multidb.use(:default) do
78
79
  conn2 = ActiveRecord::Base.connection
79
80
  conn2.should eq Multidb.balancer.current_connection
@@ -84,19 +85,19 @@ describe 'Multidb.balancer' do
84
85
  end
85
86
  end
86
87
 
87
- it 'returns slave connection' do
88
- Multidb.use(:slave1) do
88
+ it 'returns replica connection' do
89
+ Multidb.use(:replica1) do
89
90
  conn = ActiveRecord::Base.connection
90
91
  conn.should eq Multidb.balancer.current_connection
91
92
  list = conn.execute('pragma database_list')
92
93
  list.length.should eq 1
93
- File.basename(list[0]['file']).should eq 'test-slave1.sqlite'
94
+ File.basename(list[0]['file']).should eq 'test-replica1.sqlite'
94
95
  end
95
96
  end
96
97
 
97
98
  it 'returns results instead of relation' do
98
99
  class FooBar < ActiveRecord::Base; end
99
- res = Multidb.use(:slave1) do
100
+ res = Multidb.use(:replica1) do
100
101
  ActiveRecord::Migration.verbose = false
101
102
  ActiveRecord::Schema.define(version: 1) { create_table :foo_bars }
102
103
  FooBar.where(id: 42)
@@ -104,56 +105,55 @@ describe 'Multidb.balancer' do
104
105
  res.should eq []
105
106
  end
106
107
 
107
- it 'returns supports nested slave connection' do
108
- Multidb.use(:slave1) do
109
- Multidb.use(:slave2) do
108
+ it 'returns supports nested replica connection' do
109
+ Multidb.use(:replica1) do
110
+ Multidb.use(:replica2) do
110
111
  conn = ActiveRecord::Base.connection
111
112
  conn.should eq Multidb.balancer.current_connection
112
113
  list = conn.execute('pragma database_list')
113
114
  list.length.should eq 1
114
- File.basename(list[0]['file']).should eq 'test-slave2.sqlite'
115
+ File.basename(list[0]['file']).should eq 'test-replica2.sqlite'
115
116
  end
116
117
  end
117
118
  end
118
119
 
119
120
  it 'returns preserves state when nesting' do
120
- Multidb.use(:slave1) do
121
- Multidb.use(:slave2) do
121
+ Multidb.use(:replica1) do
122
+ Multidb.use(:replica2) do
122
123
  conn = ActiveRecord::Base.connection
123
124
  conn.should eq Multidb.balancer.current_connection
124
125
  list = conn.execute('pragma database_list')
125
126
  list.length.should eq 1
126
- File.basename(list[0]['file']).should eq 'test-slave2.sqlite'
127
+ File.basename(list[0]['file']).should eq 'test-replica2.sqlite'
127
128
  end
128
129
 
129
130
  conn = ActiveRecord::Base.connection
130
131
  conn.should eq Multidb.balancer.current_connection
131
132
  list = conn.execute('pragma database_list')
132
133
  list.length.should eq 1
133
- File.basename(list[0]['file']).should eq 'test-slave1.sqlite'
134
+ File.basename(list[0]['file']).should eq 'test-replica1.sqlite'
134
135
  end
135
136
  end
136
137
 
137
138
  it 'returns the parent connection for aliases' do
138
- Multidb.use(:slave1).should_not eq Multidb.use(:slave_alias)
139
- Multidb.use(:slave2).should eq Multidb.use(:slave_alias)
139
+ Multidb.use(:replica1).should_not eq Multidb.use(:replica_alias)
140
+ Multidb.use(:replica2).should eq Multidb.use(:replica_alias)
140
141
  end
141
142
 
142
143
  it 'returns random candidate' do
143
144
  names = []
144
145
  100.times do
145
- Multidb.use(:slave3) do
146
+ Multidb.use(:replica3) do
146
147
  list = ActiveRecord::Base.connection.execute('pragma database_list')
147
148
  list.length.should eq 1
148
149
  names.push(File.basename(list[0]['file']))
149
150
  end
150
151
  end
151
152
  names.sort.uniq.should eq [
152
- 'test-slave3-1.sqlite',
153
- 'test-slave3-2.sqlite'
153
+ 'test-replica3-1.sqlite',
154
+ 'test-replica3-2.sqlite'
154
155
  ]
155
156
  end
156
157
  end
157
158
  end
158
-
159
159
  end
@@ -1,23 +1,23 @@
1
- module Helpers
1
+ # frozen_string_literal: true
2
2
 
3
- def configuration_with_slaves
4
- return YAML.load(<<-end)
5
- adapter: sqlite3
6
- database: spec/test.sqlite
7
- encoding: utf-8
8
- multidb:
9
- databases:
10
- slave1:
11
- database: spec/test-slave1.sqlite
12
- slave2:
13
- database: spec/test-slave2.sqlite
14
- slave3:
15
- - database: spec/test-slave3-1.sqlite
16
- - database: spec/test-slave3-2.sqlite
17
- slave_alias:
18
- database: spec/test-slave2.sqlite
19
- alias: slave2
20
- end
3
+ module Helpers
4
+ def configuration_with_replicas
5
+ YAML.safe_load(<<~YAML)
6
+ adapter: sqlite3
7
+ database: spec/test.sqlite
8
+ encoding: utf-8
9
+ multidb:
10
+ databases:
11
+ replica1:
12
+ database: spec/test-replica1.sqlite
13
+ replica2:
14
+ database: spec/test-replica2.sqlite
15
+ replica3:
16
+ - database: spec/test-replica3-1.sqlite
17
+ - database: spec/test-replica3-2.sqlite
18
+ replica_alias:
19
+ database: spec/test-replica2.sqlite
20
+ alias: replica2
21
+ YAML
21
22
  end
22
-
23
23
  end
@@ -1,11 +1,13 @@
1
- environment = ENV['RACK_ENV'] ||= 'test'
1
+ # frozen_string_literal: true
2
+
3
+ ENV['RACK_ENV'] ||= 'test'
2
4
 
3
5
  require 'rspec'
4
6
  require 'yaml'
5
7
  require 'active_record'
6
8
  require 'fileutils'
7
9
 
8
- $LOAD_PATH.unshift(File.expand_path('../lib', __FILE__))
10
+ $LOAD_PATH.unshift(File.expand_path('lib', __dir__))
9
11
  require 'multidb'
10
12
 
11
13
  require_relative 'helpers'
@@ -18,7 +20,7 @@ RSpec.configure do |config|
18
20
  Multidb.reset!
19
21
  end
20
22
  config.after :each do
21
- Dir.glob(File.expand_path('../test*.sqlite', __FILE__)).each do |f|
23
+ Dir.glob(File.expand_path('test*.sqlite', __dir__)).each do |f|
22
24
  FileUtils.rm(f)
23
25
  end
24
26
  end
metadata CHANGED
@@ -1,23 +1,24 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ar-multidb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.4.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexander Staubo
8
- autorequire:
8
+ - Edward Rudd
9
+ autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2019-11-13 00:00:00.000000000 Z
12
+ date: 2020-07-20 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
- name: activesupport
15
+ name: activerecord
15
16
  requirement: !ruby/object:Gem::Requirement
16
17
  requirements:
17
18
  - - ">="
18
19
  - !ruby/object:Gem::Version
19
20
  version: '5.1'
20
- - - "<="
21
+ - - "<"
21
22
  - !ruby/object:Gem::Version
22
23
  version: '6.0'
23
24
  type: :runtime
@@ -27,17 +28,17 @@ dependencies:
27
28
  - - ">="
28
29
  - !ruby/object:Gem::Version
29
30
  version: '5.1'
30
- - - "<="
31
+ - - "<"
31
32
  - !ruby/object:Gem::Version
32
33
  version: '6.0'
33
34
  - !ruby/object:Gem::Dependency
34
- name: activerecord
35
+ name: activesupport
35
36
  requirement: !ruby/object:Gem::Requirement
36
37
  requirements:
37
38
  - - ">="
38
39
  - !ruby/object:Gem::Version
39
40
  version: '5.1'
40
- - - "<="
41
+ - - "<"
41
42
  - !ruby/object:Gem::Version
42
43
  version: '6.0'
43
44
  type: :runtime
@@ -47,60 +48,76 @@ dependencies:
47
48
  - - ">="
48
49
  - !ruby/object:Gem::Version
49
50
  version: '5.1'
50
- - - "<="
51
+ - - "<"
51
52
  - !ruby/object:Gem::Version
52
53
  version: '6.0'
54
+ - !ruby/object:Gem::Dependency
55
+ name: rake
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '12.0'
61
+ type: :development
62
+ prerelease: false
63
+ version_requirements: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '12.0'
53
68
  - !ruby/object:Gem::Dependency
54
69
  name: rspec
55
70
  requirement: !ruby/object:Gem::Requirement
56
71
  requirements:
57
- - - ">="
72
+ - - "~>"
58
73
  - !ruby/object:Gem::Version
59
- version: '0'
74
+ version: '3.8'
60
75
  type: :development
61
76
  prerelease: false
62
77
  version_requirements: !ruby/object:Gem::Requirement
63
78
  requirements:
64
- - - ">="
79
+ - - "~>"
65
80
  - !ruby/object:Gem::Version
66
- version: '0'
81
+ version: '3.8'
67
82
  - !ruby/object:Gem::Dependency
68
- name: sqlite3
83
+ name: rubocop
69
84
  requirement: !ruby/object:Gem::Requirement
70
85
  requirements:
71
- - - ">="
86
+ - - "~>"
72
87
  - !ruby/object:Gem::Version
73
- version: '0'
88
+ version: 0.88.0
74
89
  type: :development
75
90
  prerelease: false
76
91
  version_requirements: !ruby/object:Gem::Requirement
77
92
  requirements:
78
- - - ">="
93
+ - - "~>"
79
94
  - !ruby/object:Gem::Version
80
- version: '0'
95
+ version: 0.88.0
81
96
  - !ruby/object:Gem::Dependency
82
- name: rake
97
+ name: sqlite3
83
98
  requirement: !ruby/object:Gem::Requirement
84
99
  requirements:
85
- - - ">="
100
+ - - "~>"
86
101
  - !ruby/object:Gem::Version
87
- version: '0'
102
+ version: '1.3'
88
103
  type: :development
89
104
  prerelease: false
90
105
  version_requirements: !ruby/object:Gem::Requirement
91
106
  requirements:
92
- - - ">="
107
+ - - "~>"
93
108
  - !ruby/object:Gem::Version
94
- version: '0'
109
+ version: '1.3'
95
110
  description: Multidb is an ActiveRecord extension for switching between multiple database
96
- connections, such as master/slave setups.
111
+ connections, such as primary/replica setups.
97
112
  email:
98
113
  - alex@bengler.no
114
+ - urkle@outoforder.cc
99
115
  executables: []
100
116
  extensions: []
101
117
  extra_rdoc_files: []
102
118
  files:
103
119
  - ".gitignore"
120
+ - ".rubocop.yml"
104
121
  - ".travis.yml"
105
122
  - CHANGELOG.md
106
123
  - Gemfile
@@ -124,7 +141,7 @@ files:
124
141
  homepage: ''
125
142
  licenses: []
126
143
  metadata: {}
127
- post_install_message:
144
+ post_install_message:
128
145
  rdoc_options: []
129
146
  require_paths:
130
147
  - lib
@@ -132,7 +149,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
132
149
  requirements:
133
150
  - - ">="
134
151
  - !ruby/object:Gem::Version
135
- version: '0'
152
+ version: 2.4.0
136
153
  required_rubygems_version: !ruby/object:Gem::Requirement
137
154
  requirements:
138
155
  - - ">="
@@ -140,10 +157,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
140
157
  version: '0'
141
158
  requirements: []
142
159
  rubygems_version: 3.0.6
143
- signing_key:
160
+ signing_key:
144
161
  specification_version: 4
145
162
  summary: Multidb is an ActiveRecord extension for switching between multiple database
146
- connections, such as master/slave setups.
163
+ connections, such as primary/replica setups.
147
164
  test_files:
148
165
  - spec/balancer_spec.rb
149
166
  - spec/helpers.rb