switch_point 0.8.0 → 0.9.0

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
- SHA1:
3
- metadata.gz: 4afa0b36c03b080fc4800b6237d223dc185c9128
4
- data.tar.gz: 5c06160f5c593b5b0798535af848e925d74b1d67
2
+ SHA256:
3
+ metadata.gz: 2e3915fe82c56723bcc2ac31421b8158cadde91d89378ff5769c846cba2899fd
4
+ data.tar.gz: c98d107a1108cbacb334823219e06d14cfafdc24ba9f4dc821f479d96b531987
5
5
  SHA512:
6
- metadata.gz: d910ecf318574828396c4bfcf384dff8ee1f6282693ff19f000115ea92c3dea3df896271ea9b62e23ccbb5baab1ea8cd7337e337bbcbad5fb407bc019ef77195
7
- data.tar.gz: 397bfbe529603a7f4d588c013e1e3ed75774559df8a377c33dd7330651e137741de7cd65337ca2d6b98a4276d02520f5cb5106d7ec75dc99f6f0521cdb7185a3
6
+ metadata.gz: 2eec3b0ca5d8d22b5fb9f302c0c9b7dfa71409c7e1d49a8bca4d760eda64f4b9bb1d4779284fa3cccfdebee734aa2d67bb66de315519f461de6d98c983aa7365
7
+ data.tar.gz: 2ed6d067c24d5642f5e92267014563898c4212fc5c2e31c6cf892e5846979f53c33c139a9528762a3f5058272ad13ea294a60e6158e7ea247c20600156e7168b
data/.gitignore CHANGED
@@ -20,3 +20,4 @@ tmp
20
20
  *.o
21
21
  *.a
22
22
  mkmf.log
23
+ /gemfiles/*.lock
@@ -1,48 +1,56 @@
1
1
  inherit_from: .rubocop_todo.yml
2
2
 
3
3
  AllCops:
4
+ TargetRubyVersion: 2.5
4
5
  DisplayCopNames: true
6
+ NewCops: enable
7
+ Exclude:
8
+ - gemfiles/*.gemfile
5
9
 
6
- Performance/RedundantBlockCall:
10
+ Layout/ArgumentAlignment:
7
11
  Enabled: false
8
-
9
- Style/AlignParameters:
12
+ Layout/LineLength:
13
+ Enabled: false
14
+ Layout/ParameterAlignment:
10
15
  Enabled: false
11
16
 
17
+ Naming/FileName:
18
+ Exclude:
19
+ - Appraisals
20
+
21
+ Style/AccessModifierDeclarations:
22
+ Enabled: false
12
23
  Style/Alias:
13
24
  EnforcedStyle: prefer_alias_method
14
-
15
25
  Style/BlockDelimiters:
16
26
  Enabled: false
17
-
18
27
  Style/GuardClause:
19
28
  Enabled: false
20
-
21
29
  Style/HashSyntax:
22
30
  Exclude:
23
31
  - Rakefile
24
-
25
32
  Style/IfUnlessModifier:
26
33
  Enabled: false
27
-
28
34
  Style/Lambda:
29
35
  Enabled: false
30
-
31
36
  Style/Next:
32
37
  Enabled: false
33
-
34
38
  Style/PercentLiteralDelimiters:
35
39
  PreferredDelimiters:
36
40
  '%w': '[]'
37
-
38
41
  Style/RaiseArgs:
39
42
  EnforcedStyle: compact
40
-
43
+ Style/SafeNavigation:
44
+ Enabled: false
41
45
  Style/SignalException:
42
46
  Enabled: false
43
-
44
- Style/TrailingCommaInLiteral:
47
+ Style/SoleNestedConditional:
45
48
  Enabled: false
46
-
47
49
  Style/TrailingCommaInArguments:
48
50
  Enabled: false
51
+ Style/TrailingCommaInArrayLiteral:
52
+ Enabled: false
53
+ Style/TrailingCommaInHashLiteral:
54
+ Enabled: false
55
+ Metrics:
56
+ Enabled: false
@@ -1,17 +1,2 @@
1
- Metrics/AbcSize:
2
- Enabled: false
3
-
4
- Metrics/ClassLength:
5
- Enabled: false
6
-
7
- Metrics/CyclomaticComplexity:
8
- Enabled: false
9
-
10
- Metrics/LineLength:
11
- Enabled: false
12
-
13
- Metrics/MethodLength:
14
- Enabled: false
15
-
16
1
  Style/Documentation:
17
2
  Enabled: false
@@ -1,9 +1,8 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 2.2.5
4
- - 2.3.1
5
- - jruby-9.1.0.0
6
- - jruby-head
3
+ - 2.5.8
4
+ - 2.6.6
5
+ - 2.7.2
7
6
  - ruby-head
8
7
  gemfile:
9
8
  - gemfiles/rails_3.2.gemfile
@@ -11,16 +10,21 @@ gemfile:
11
10
  - gemfiles/rails_4.1.gemfile
12
11
  - gemfiles/rails_4.2.gemfile
13
12
  - gemfiles/rails_5.0.gemfile
14
- - gemfiles/rails_edge.gemfile
15
- sudo: false
13
+ - gemfiles/rails_5.1.gemfile
14
+ - gemfiles/rails_5.2.gemfile
15
+ - gemfiles/rails_6.0.gemfile
16
16
  after_script:
17
17
  - bundle exec rake benchmark
18
- matrix:
18
+ jobs:
19
19
  allow_failures:
20
20
  - rvm: ruby-head
21
- - rvm: jruby-head
22
- - gemfile: gemfiles/rails_edge.gemfile
23
- # Wait for activerecord-jdbcsqlite3-adapter's support
24
- # https://github.com/jruby/activerecord-jdbc-adapter/labels/rails-5.x
25
- - rvm: jruby-9.1.0.0
26
- gemfile: gemfiles/rails_5.0.gemfile
21
+ exclude:
22
+ # Rails 3.2 - 4.2 doesn't support Ruby 2.7
23
+ - rvm: 2.7.2
24
+ gemfile: gemfiles/rails_3.2.gemfile
25
+ - rvm: 2.7.2
26
+ gemfile: gemfiles/rails_4.0.gemfile
27
+ - rvm: 2.7.2
28
+ gemfile: gemfiles/rails_4.1.gemfile
29
+ - rvm: 2.7.2
30
+ gemfile: gemfiles/rails_4.2.gemfile
data/Appraisals CHANGED
@@ -1,79 +1,66 @@
1
+ # frozen_string_literal: true
2
+
1
3
  appraise 'rails-3.2' do
2
- gem 'activerecord', '~> 3.2'
4
+ gem 'activerecord', '~> 3.2.0'
3
5
 
4
6
  platforms :ruby do
5
- gem 'sqlite3'
6
- end
7
-
8
- platforms :jruby do
9
- gem 'json'
10
- gem 'activerecord-jdbcsqlite3-adapter'
7
+ gem 'sqlite3', '~> 1.3.5'
11
8
  end
12
9
  end
13
10
 
14
11
  appraise 'rails-4.0' do
15
- gem 'activerecord', '~> 4.0'
12
+ gem 'activerecord', '~> 4.0.0'
16
13
 
17
14
  platforms :ruby do
18
- gem 'sqlite3'
19
- end
20
-
21
- platforms :jruby do
22
- gem 'json'
23
- gem 'activerecord-jdbcsqlite3-adapter'
15
+ gem 'sqlite3', '~> 1.3.6'
24
16
  end
25
17
  end
26
18
 
27
19
  appraise 'rails-4.1' do
28
- gem 'activerecord', '~> 4.1'
20
+ gem 'activerecord', '~> 4.1.0'
29
21
 
30
22
  platforms :ruby do
31
- gem 'sqlite3'
32
- end
33
-
34
- platforms :jruby do
35
- gem 'json'
36
- gem 'activerecord-jdbcsqlite3-adapter'
23
+ gem 'sqlite3', '~> 1.3.6'
37
24
  end
38
25
  end
39
26
 
40
27
  appraise 'rails-4.2' do
41
- gem 'activerecord', '~> 4.2'
28
+ gem 'activerecord', '~> 4.2.0'
42
29
 
43
30
  platforms :ruby do
44
- gem 'sqlite3'
45
- end
46
-
47
- platforms :jruby do
48
- gem 'json'
49
- gem 'activerecord-jdbcsqlite3-adapter'
31
+ gem 'sqlite3', '~> 1.3.6'
50
32
  end
51
33
  end
52
34
 
53
35
  appraise 'rails-5.0' do
54
- gem 'activerecord', '>= 5.0.0.rc1'
36
+ gem 'activerecord', '~> 5.0.0'
55
37
 
56
38
  platforms :ruby do
57
- gem 'sqlite3'
39
+ gem 'sqlite3', '~> 1.3.6'
58
40
  end
41
+ end
42
+
43
+ appraise 'rails-5.1' do
44
+ gem 'activerecord', '~> 5.1.0'
59
45
 
60
- platforms :jruby do
61
- gem 'json'
62
- gem 'activerecord-jdbcsqlite3-adapter'
46
+ platforms :ruby do
47
+ gem 'sqlite3'
63
48
  end
64
49
  end
65
50
 
66
- appraise 'rails-edge' do
67
- gem 'activerecord', git: 'https://github.com/rails/rails'
68
- gem 'arel', git: 'https://github.com/rails/arel'
51
+ appraise 'rails-5.2' do
52
+ gem 'activerecord', '~> 5.2.0'
69
53
 
70
54
  platforms :ruby do
71
55
  gem 'sqlite3'
72
56
  end
57
+ end
58
+
59
+ appraise 'rails-6.0' do
60
+ gem 'activerecord', '~> 6.0.0'
73
61
 
74
- platforms :jruby do
75
- gem 'json'
76
- gem 'activerecord-jdbcsqlite3-adapter', git: 'https://github.com/jruby/activerecord-jdbc-adapter', branch: 'master'
62
+ platforms :ruby do
63
+ gem 'sqlite3'
77
64
  end
78
65
  end
79
66
 
@@ -1,3 +1,7 @@
1
+ ## 0.9.0 (2020-11-22)
2
+ - Drop support for Ruby 2.2, 2.3 and 2.4
3
+ - End support for upcoming ActiveRecord >= v6.1
4
+
1
5
  ## 0.8.0 (2016-06-06)
2
6
  - Drop Ruby 2.0.0 and 2.1 support
3
7
  - Add `AR::Base#with_readonly` and `AR::Base#with_writable`
data/Gemfile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source 'https://rubygems.org'
2
4
 
3
5
  # Specify your gem's dependencies in switch_point.gemspec
@@ -6,8 +8,3 @@ gemspec
6
8
  platforms :ruby do
7
9
  gem 'sqlite3'
8
10
  end
9
-
10
- platforms :jruby do
11
- gem 'json'
12
- gem 'activerecord-jdbcsqlite3-adapter'
13
- end
data/README.md CHANGED
@@ -6,6 +6,23 @@
6
6
 
7
7
  Switching database connection between readonly one and writable one.
8
8
 
9
+ ## Maintenance notice
10
+ switch_point won't support upcoming ActiveRecord v6.1 or later.
11
+ Developers should use the builtin multiple database feature introduced in ActiveRecord v6.0.
12
+ https://guides.rubyonrails.org/active_record_multiple_databases.html
13
+ Thus the supported ActiveRecord version is v3.2, v4.0, v4.1, v4.2, v5.0, v5.1, and v5.2.
14
+
15
+ switch_point won't accept any new features. Bug fixes might be accepted.
16
+ If you'd like to add a new feature (and/or support ActiveRecord >= v6.1), feel free to fork switch_point gem.
17
+
18
+ ### Migration from switch_point to ActiveRecord multiple database feature
19
+ 1. Upgrade your activerecord gem to v6.0
20
+ - ActiveRecord v6.0 is the only series which supports both builtin multiple database feature and switch_point.
21
+ 2. Change your application to use ActiveRecord multiple database feature
22
+ - If you'd like to keep the number of connections during this step, it would require some tricks.
23
+ 3. Remove switch_point gem from your Gemfile
24
+ 4. Upgrade your activerecord gem to v6.1 or later
25
+
9
26
  ## Installation
10
27
 
11
28
  Add this line to your application's Gemfile:
data/Rakefile CHANGED
@@ -1,6 +1,8 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'bundler/gem_tasks'
2
4
 
3
- task :default => [:spec, :rubocop]
5
+ task :default => %i[spec rubocop]
4
6
 
5
7
  require 'rspec/core/rake_task'
6
8
  RSpec::Core::RakeTask.new(:spec)
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'benchmark/ips'
2
4
  require 'switch_point'
3
5
  require 'active_record'
@@ -32,7 +34,7 @@ ActiveRecord::Base.configurations = {
32
34
  ActiveRecord::Base.establish_connection(:default)
33
35
 
34
36
  Plain.connection.execute('CREATE TABLE plains (id integer primary key autoincrement)')
35
- [:readonly, :writable].each do |mode|
37
+ %i[readonly writable].each do |mode|
36
38
  ProxyBase.public_send("with_#{mode}") do
37
39
  %w[proxy1s proxy2s].each do |table|
38
40
  ProxyBase.connection.execute("CREATE TABLE #{table} (id integer primary key autoincrement)")
@@ -2,15 +2,10 @@
2
2
 
3
3
  source "https://rubygems.org"
4
4
 
5
- gem "activerecord", "~> 3.2"
5
+ gem "activerecord", "~> 3.2.0"
6
6
 
7
7
  platforms :ruby do
8
- gem "sqlite3"
8
+ gem "sqlite3", "~> 1.3.5"
9
9
  end
10
10
 
11
- platforms :jruby do
12
- gem "json"
13
- gem "activerecord-jdbcsqlite3-adapter"
14
- end
15
-
16
- gemspec :path => "../"
11
+ gemspec path: "../"
@@ -2,15 +2,10 @@
2
2
 
3
3
  source "https://rubygems.org"
4
4
 
5
- gem "activerecord", "~> 4.0"
5
+ gem "activerecord", "~> 4.0.0"
6
6
 
7
7
  platforms :ruby do
8
- gem "sqlite3"
8
+ gem "sqlite3", "~> 1.3.6"
9
9
  end
10
10
 
11
- platforms :jruby do
12
- gem "json"
13
- gem "activerecord-jdbcsqlite3-adapter"
14
- end
15
-
16
- gemspec :path => "../"
11
+ gemspec path: "../"
@@ -2,15 +2,10 @@
2
2
 
3
3
  source "https://rubygems.org"
4
4
 
5
- gem "activerecord", "~> 4.1"
5
+ gem "activerecord", "~> 4.1.0"
6
6
 
7
7
  platforms :ruby do
8
- gem "sqlite3"
8
+ gem "sqlite3", "~> 1.3.6"
9
9
  end
10
10
 
11
- platforms :jruby do
12
- gem "json"
13
- gem "activerecord-jdbcsqlite3-adapter"
14
- end
15
-
16
- gemspec :path => "../"
11
+ gemspec path: "../"
@@ -2,15 +2,10 @@
2
2
 
3
3
  source "https://rubygems.org"
4
4
 
5
- gem "activerecord", "~> 4.2"
5
+ gem "activerecord", "~> 4.2.0"
6
6
 
7
7
  platforms :ruby do
8
- gem "sqlite3"
8
+ gem "sqlite3", "~> 1.3.6"
9
9
  end
10
10
 
11
- platforms :jruby do
12
- gem "json"
13
- gem "activerecord-jdbcsqlite3-adapter"
14
- end
15
-
16
- gemspec :path => "../"
11
+ gemspec path: "../"
@@ -2,15 +2,10 @@
2
2
 
3
3
  source "https://rubygems.org"
4
4
 
5
- gem "activerecord", ">= 5.0.0.rc1"
5
+ gem "activerecord", "~> 5.0.0"
6
6
 
7
7
  platforms :ruby do
8
- gem "sqlite3"
8
+ gem "sqlite3", "~> 1.3.6"
9
9
  end
10
10
 
11
- platforms :jruby do
12
- gem "json"
13
- gem "activerecord-jdbcsqlite3-adapter"
14
- end
15
-
16
- gemspec :path => "../"
11
+ gemspec path: "../"
@@ -0,0 +1,11 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activerecord", "~> 5.1.0"
6
+
7
+ platforms :ruby do
8
+ gem "sqlite3"
9
+ end
10
+
11
+ gemspec path: "../"
@@ -0,0 +1,11 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activerecord", "~> 5.2.0"
6
+
7
+ platforms :ruby do
8
+ gem "sqlite3"
9
+ end
10
+
11
+ gemspec path: "../"
@@ -0,0 +1,11 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activerecord", "~> 6.0.0"
6
+
7
+ platforms :ruby do
8
+ gem "sqlite3"
9
+ end
10
+
11
+ gemspec path: "../"
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'active_support/lazy_load_hooks'
2
4
  require 'switch_point/config'
3
5
  require 'switch_point/version'
@@ -13,7 +15,7 @@ module SwitchPoint
13
15
  end
14
16
 
15
17
  def readonly_all!
16
- config.keys.each do |name|
18
+ config.each_key do |name|
17
19
  readonly!(name)
18
20
  end
19
21
  end
@@ -23,7 +25,7 @@ module SwitchPoint
23
25
  end
24
26
 
25
27
  def writable_all!
26
- config.keys.each do |name|
28
+ config.each_key do |name|
27
29
  writable!(name)
28
30
  end
29
31
  end
@@ -64,7 +66,7 @@ ActiveSupport.on_load(:active_record) do
64
66
  require 'switch_point/model'
65
67
  require 'switch_point/query_cache'
66
68
 
67
- ActiveRecord::Base.send(:include, SwitchPoint::Model)
69
+ ActiveRecord::Base.include SwitchPoint::Model
68
70
  ActiveRecord::ConnectionAdapters::AbstractAdapter.class_eval do
69
71
  prepend SwitchPoint::Connection
70
72
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SwitchPoint
2
4
  class Config
3
5
  attr_accessor :auto_writable
@@ -34,12 +36,17 @@ module SwitchPoint
34
36
  switch_points.keys
35
37
  end
36
38
 
39
+ def each_key(&block)
40
+ switch_points.each_key(&block)
41
+ end
42
+
37
43
  private
38
44
 
39
45
  def assert_valid_config!(config)
40
46
  unless config.key?(:readonly) || config.key?(:writable)
41
47
  raise ArgumentError.new(':readonly or :writable must be specified')
42
48
  end
49
+
43
50
  if config.key?(:readonly)
44
51
  unless config[:readonly].is_a?(Symbol)
45
52
  raise TypeError.new(":readonly's value must be Symbol")
@@ -1,10 +1,12 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'switch_point/error'
2
4
  require 'switch_point/proxy_repository'
3
5
 
4
6
  module SwitchPoint
5
7
  module Connection
6
8
  # See ActiveRecord::ConnectionAdapters::QueryCache
7
- DESTRUCTIVE_METHODS = [:insert, :update, :delete].freeze
9
+ DESTRUCTIVE_METHODS = %i[insert update delete].freeze
8
10
 
9
11
  DESTRUCTIVE_METHODS.each do |method_name|
10
12
  define_method(method_name) do |*args, &block|
@@ -26,6 +28,7 @@ module SwitchPoint
26
28
  if switch_point[:mode] != :writable
27
29
  raise Error.new("ActiveRecord::Base's switch_points must be writable, but #{switch_point[:name]} is #{switch_point[:mode]}")
28
30
  end
31
+
29
32
  purge_readonly_query_cache(proxy)
30
33
  end
31
34
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SwitchPoint
2
4
  class Error < StandardError
3
5
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'switch_point/error'
2
4
  require 'switch_point/proxy_repository'
3
5
 
@@ -1,10 +1,12 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'switch_point/error'
2
4
 
3
5
  module SwitchPoint
4
6
  class Proxy
5
7
  attr_reader :initial_name
6
8
 
7
- AVAILABLE_MODES = [:writable, :readonly].freeze
9
+ AVAILABLE_MODES = %i[writable readonly].freeze
8
10
  DEFAULT_MODE = :readonly
9
11
 
10
12
  def initialize(name)
@@ -28,7 +30,7 @@ module SwitchPoint
28
30
  # Re-use writable connection
29
31
  Proxy.const_get(SwitchPoint.config.model_name(name, :writable))
30
32
  else
31
- Class.new(ActiveRecord::Base)
33
+ ActiveRecord::Base
32
34
  end
33
35
  end
34
36
 
@@ -38,6 +40,7 @@ module SwitchPoint
38
40
  if mode != :writable
39
41
  raise Error.new("ActiveRecord::Base's switch_points must be writable, but #{name} is #{mode}")
40
42
  end
43
+
41
44
  switch_points = pool.spec.config[:switch_points] || []
42
45
  switch_points << switch_point
43
46
  pool.spec.config[:switch_points] = switch_points
@@ -97,6 +100,7 @@ module SwitchPoint
97
100
  unless AVAILABLE_MODES.include?(new_mode)
98
101
  raise ArgumentError.new("Unknown mode: #{new_mode}")
99
102
  end
103
+
100
104
  saved_mode = thread_local_mode
101
105
  self.thread_local_mode = new_mode
102
106
  block.call
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'singleton'
2
4
  require 'switch_point/proxy'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SwitchPoint
2
4
  class QueryCache
3
5
  def initialize(app, names = nil)
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SwitchPoint
2
- VERSION = '0.8.0'.freeze
4
+ VERSION = '0.9.0'
3
5
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  SwitchPoint.configure do |config|
2
4
  config.define_switch_point :main,
3
5
  readonly: :main_readonly,
@@ -30,8 +32,7 @@ class Book < ActiveRecord::Base
30
32
 
31
33
  private
32
34
 
33
- def do_after_save
34
- end
35
+ def do_after_save; end
35
36
  end
36
37
 
37
38
  class Book2 < ActiveRecord::Base
@@ -91,7 +92,7 @@ base =
91
92
  else
92
93
  { adapter: 'sqlite3' }
93
94
  end
94
- ActiveRecord::Base.configurations = {
95
+ databases = {
95
96
  'main_readonly' => base.merge(database: 'main_readonly.sqlite3'),
96
97
  'main_writable' => base.merge(database: 'main_writable.sqlite3'),
97
98
  'main2_readonly' => base.merge(database: 'main2_readonly.sqlite3'),
@@ -100,8 +101,15 @@ ActiveRecord::Base.configurations = {
100
101
  'user' => base.merge(database: 'user.sqlite3'),
101
102
  'comment_readonly' => base.merge(database: 'comment_readonly.sqlite3'),
102
103
  'comment_writable' => base.merge(database: 'comment_writable.sqlite3'),
103
- 'default' => base.merge(database: 'default.sqlite3')
104
+ 'default' => base.merge(database: 'default.sqlite3'),
104
105
  }
106
+ ActiveRecord::Base.configurations =
107
+ # ActiveRecord.gem_version was introduced in ActiveRecord 4.0
108
+ if ActiveRecord.respond_to?(:gem_version) && ActiveRecord.gem_version >= Gem::Version.new('5.1.0')
109
+ { 'test' => databases }
110
+ else
111
+ databases
112
+ end
105
113
  ActiveRecord::Base.establish_connection(:default)
106
114
 
107
115
  # XXX: Check connection laziness
@@ -1,3 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ ENV['RAILS_ENV'] ||= 'test'
4
+
1
5
  require 'coveralls'
2
6
  require 'simplecov'
3
7
 
@@ -57,8 +61,14 @@ RSpec.configure do |config|
57
61
  end
58
62
 
59
63
  config.after(:suite) do
60
- ActiveRecord::Base.configurations.each_value do |c|
61
- FileUtils.rm_f(c[:database])
64
+ if ActiveRecord::Base.configurations.respond_to?(:configs_for)
65
+ ActiveRecord::Base.configurations.configs_for.each do |c|
66
+ FileUtils.rm_f(c.config['database'])
67
+ end
68
+ else
69
+ ActiveRecord::Base.configurations.each_value do |c|
70
+ FileUtils.rm_f(c[:database])
71
+ end
62
72
  end
63
73
  end
64
74
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  RSpec.describe SwitchPoint::Model do
2
4
  describe '.use_switch_point' do
3
5
  after do
@@ -436,7 +438,7 @@ RSpec.describe SwitchPoint::Model do
436
438
  end
437
439
  expect(Book.with_writable { Book.count }).to eq(1)
438
440
 
439
- expect { book.transaction_with(Book3) {} }.to raise_error(SwitchPoint::Error)
441
+ expect { book.transaction_with(Book3) {} }.to raise_error(SwitchPoint::Error) # rubocop:disable Lint/EmptyBlock
440
442
  end
441
443
  end
442
444
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
  require 'rack'
3
5
 
@@ -23,6 +25,16 @@ RSpec.describe SwitchPoint::QueryCache do
23
25
  end
24
26
 
25
27
  describe '#call' do
28
+ before do
29
+ # Ensure the connection is established.
30
+ # The query cache is enabled only when connected.
31
+ # https://github.com/rails/rails/commit/25fc1f584def4c1bc36be805833194d8aee55b3a
32
+ [Nanika1, Nanika2].each do |model|
33
+ model.with_readonly { model.connection }
34
+ model.with_writable { model.connection }
35
+ end
36
+ end
37
+
26
38
  it 'enables query cache of all models' do
27
39
  env = {}
28
40
  expect(app.call(env)).to eq(:result)
@@ -35,7 +47,7 @@ RSpec.describe SwitchPoint::QueryCache do
35
47
  context 'when names are specified' do
36
48
  let(:app) do
37
49
  Rack::Builder.new do
38
- use SwitchPoint::QueryCache, [:main, :nanika1]
50
+ use SwitchPoint::QueryCache, %i[main nanika1]
39
51
  run TestApp.new
40
52
  end
41
53
  end
@@ -1,4 +1,50 @@
1
+ # frozen_string_literal: true
2
+
1
3
  RSpec.describe SwitchPoint do
4
+ describe '.writable_all!' do
5
+ after do
6
+ SwitchPoint.readonly_all!
7
+ end
8
+
9
+ it 'changes connection globally' do
10
+ expect(Book).to connect_to('main_readonly.sqlite3')
11
+ expect(Book3).to connect_to('main2_readonly.sqlite3')
12
+ expect(Comment).to connect_to('comment_readonly.sqlite3')
13
+ expect(User).to connect_to('user.sqlite3')
14
+ expect(BigData).to connect_to('main_readonly_special.sqlite3')
15
+ SwitchPoint.writable_all!
16
+ expect(Book).to connect_to('main_writable.sqlite3')
17
+ expect(Book3).to connect_to('main2_writable.sqlite3')
18
+ expect(Comment).to connect_to('comment_writable.sqlite3')
19
+ expect(User).to connect_to('user.sqlite3')
20
+ expect(BigData).to connect_to('main_writable.sqlite3')
21
+ end
22
+
23
+ it 'affects thread-globally' do
24
+ SwitchPoint.writable_all!
25
+ Thread.start do
26
+ expect(Book).to connect_to('main_writable.sqlite3')
27
+ expect(Book3).to connect_to('main2_writable.sqlite3')
28
+ expect(Comment).to connect_to('comment_writable.sqlite3')
29
+ expect(User).to connect_to('user.sqlite3')
30
+ expect(BigData).to connect_to('main_writable.sqlite3')
31
+ end.join
32
+ end
33
+
34
+ context 'within with block' do
35
+ it 'changes the current mode' do
36
+ SwitchPoint.writable_all!
37
+ Book.with_readonly do
38
+ expect(Book).to connect_to('main_readonly.sqlite3')
39
+ end
40
+ expect(Book).to connect_to('main_writable.sqlite3')
41
+ Book.with_writable do
42
+ expect(Book).to connect_to('main_writable.sqlite3')
43
+ end
44
+ end
45
+ end
46
+ end
47
+
2
48
  describe '.writable!' do
3
49
  after do
4
50
  SwitchPoint.readonly!(:main)
@@ -1,5 +1,6 @@
1
- # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
1
+ # frozen_string_literal: true
2
+
3
+ lib = File.expand_path('lib', __dir__)
3
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
5
  require 'switch_point/version'
5
6
 
@@ -17,16 +18,16 @@ Gem::Specification.new do |spec|
17
18
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
19
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
20
  spec.require_paths = ['lib']
20
- spec.required_ruby_version = '>= 2.2.0'
21
+ spec.required_ruby_version = '>= 2.5.0'
21
22
 
22
23
  spec.add_development_dependency 'appraisal'
23
24
  spec.add_development_dependency 'benchmark-ips'
24
25
  spec.add_development_dependency 'bundler'
25
- spec.add_development_dependency 'coveralls'
26
+ spec.add_development_dependency 'coveralls', '>= 0.8.22'
26
27
  spec.add_development_dependency 'rack'
27
28
  spec.add_development_dependency 'rake'
28
29
  spec.add_development_dependency 'rspec', '>= 3.0'
29
- spec.add_development_dependency 'rubocop', '>= 0.37.0'
30
- spec.add_development_dependency 'simplecov', '>= 0.9.0'
31
- spec.add_dependency 'activerecord', '>= 3.2.0'
30
+ spec.add_development_dependency 'rubocop', '>= 0.50.0'
31
+ spec.add_development_dependency 'simplecov', '~> 0.16.1' # XXX: The latest coveralls still depends on old version
32
+ spec.add_dependency 'activerecord', '>= 3.2.0', '< 6.1.0'
32
33
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: switch_point
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.0
4
+ version: 0.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kohei Suzuki
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-06-06 00:00:00.000000000 Z
11
+ date: 2020-11-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: appraisal
@@ -58,14 +58,14 @@ dependencies:
58
58
  requirements:
59
59
  - - ">="
60
60
  - !ruby/object:Gem::Version
61
- version: '0'
61
+ version: 0.8.22
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - ">="
67
67
  - !ruby/object:Gem::Version
68
- version: '0'
68
+ version: 0.8.22
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rack
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -114,28 +114,28 @@ dependencies:
114
114
  requirements:
115
115
  - - ">="
116
116
  - !ruby/object:Gem::Version
117
- version: 0.37.0
117
+ version: 0.50.0
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
122
  - - ">="
123
123
  - !ruby/object:Gem::Version
124
- version: 0.37.0
124
+ version: 0.50.0
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: simplecov
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
- - - ">="
129
+ - - "~>"
130
130
  - !ruby/object:Gem::Version
131
- version: 0.9.0
131
+ version: 0.16.1
132
132
  type: :development
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
- - - ">="
136
+ - - "~>"
137
137
  - !ruby/object:Gem::Version
138
- version: 0.9.0
138
+ version: 0.16.1
139
139
  - !ruby/object:Gem::Dependency
140
140
  name: activerecord
141
141
  requirement: !ruby/object:Gem::Requirement
@@ -143,6 +143,9 @@ dependencies:
143
143
  - - ">="
144
144
  - !ruby/object:Gem::Version
145
145
  version: 3.2.0
146
+ - - "<"
147
+ - !ruby/object:Gem::Version
148
+ version: 6.1.0
146
149
  type: :runtime
147
150
  prerelease: false
148
151
  version_requirements: !ruby/object:Gem::Requirement
@@ -150,6 +153,9 @@ dependencies:
150
153
  - - ">="
151
154
  - !ruby/object:Gem::Version
152
155
  version: 3.2.0
156
+ - - "<"
157
+ - !ruby/object:Gem::Version
158
+ version: 6.1.0
153
159
  description: Switching database connection between readonly one and writable one.
154
160
  email:
155
161
  - eagletmt@gmail.com
@@ -175,7 +181,9 @@ files:
175
181
  - gemfiles/rails_4.1.gemfile
176
182
  - gemfiles/rails_4.2.gemfile
177
183
  - gemfiles/rails_5.0.gemfile
178
- - gemfiles/rails_edge.gemfile
184
+ - gemfiles/rails_5.1.gemfile
185
+ - gemfiles/rails_5.2.gemfile
186
+ - gemfiles/rails_6.0.gemfile
179
187
  - lib/switch_point.rb
180
188
  - lib/switch_point/config.rb
181
189
  - lib/switch_point/connection.rb
@@ -195,7 +203,7 @@ homepage: https://github.com/eagletmt/switch_point
195
203
  licenses:
196
204
  - MIT
197
205
  metadata: {}
198
- post_install_message:
206
+ post_install_message:
199
207
  rdoc_options: []
200
208
  require_paths:
201
209
  - lib
@@ -203,16 +211,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
203
211
  requirements:
204
212
  - - ">="
205
213
  - !ruby/object:Gem::Version
206
- version: 2.2.0
214
+ version: 2.5.0
207
215
  required_rubygems_version: !ruby/object:Gem::Requirement
208
216
  requirements:
209
217
  - - ">="
210
218
  - !ruby/object:Gem::Version
211
219
  version: '0'
212
220
  requirements: []
213
- rubyforge_project:
214
- rubygems_version: 2.5.1
215
- signing_key:
221
+ rubygems_version: 3.1.4
222
+ signing_key:
216
223
  specification_version: 4
217
224
  summary: Switching database connection between readonly one and writable one.
218
225
  test_files:
@@ -1,17 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "https://rubygems.org"
4
-
5
- gem "activerecord", :git => "https://github.com/rails/rails"
6
- gem "arel", :git => "https://github.com/rails/arel"
7
-
8
- platforms :ruby do
9
- gem "sqlite3"
10
- end
11
-
12
- platforms :jruby do
13
- gem "json"
14
- gem "activerecord-jdbcsqlite3-adapter", :git => "https://github.com/jruby/activerecord-jdbc-adapter", :branch => "master"
15
- end
16
-
17
- gemspec :path => "../"