fresh_connection 0.2.6 → 0.3.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: da070ea6bf04531b1dad24fd2a6b1f267cbe4455
4
- data.tar.gz: 20eb3122e428d4ab78ef6987a11bdba2f885c7eb
3
+ metadata.gz: 3236c1e50671a5ba2387ef7d09abd2fe182f6018
4
+ data.tar.gz: 16e4b85ad933af49e471969d65547855b9b2a09c
5
5
  SHA512:
6
- metadata.gz: 71365d6a0818a691c86f02e47221c3edce8ea9344542984a72c57f276f4415f8e958cf10971a6c63bbceaf3772605308bd6a37fbda497a4c0a6c9a19569a2966
7
- data.tar.gz: 1c1a11a33929b6e0906c3b73ec131954617376c8d04fed23ed8673a0850979071e00afb6f9f203246f57a24f5eef7137f976bb789b63653c6f7dba6f3ecc1a1a
6
+ metadata.gz: ffc51c4d326026040e127db6e4c56d7f67ef40c58b5d4cc9f39b60dc9c60713cab0553b7671b9ccf35dc0c996984e1fadc81bca6c9b2a2e348829c29cc7235db
7
+ data.tar.gz: e12983fa297222b1aeb6ec63841820383c6d9f714e0f4b62135354a7b96298ffdea9feec6ca6f8ceb9df80b99edbc09c0314e5dce955668acb959673eb39a84d
data/.travis.yml CHANGED
@@ -14,6 +14,7 @@ gemfile:
14
14
  - gemfiles/rails3.gemfile
15
15
  - gemfiles/rails40.gemfile
16
16
  - gemfiles/rails41.gemfile
17
+ - gemfiles/rails42.gemfile
17
18
  notifications:
18
19
  emails:
19
20
  - tsukasa.oishi@gmail.com
data/Appraisals CHANGED
@@ -1,17 +1,15 @@
1
1
  appraise "rails3" do
2
2
  gem "activerecord", "~> 3.2.0"
3
- gem "activesupport", "~> 3.2.0"
4
- gem "mysql2", "~> 0.3"
5
3
  end
6
4
 
7
5
  appraise "rails40" do
8
6
  gem "activerecord", "~> 4.0.0"
9
- gem "activesupport", "~> 4.0.0"
10
- gem "mysql2", "~> 0.3"
11
7
  end
12
8
 
13
9
  appraise "rails41" do
14
10
  gem "activerecord", "~> 4.1.0"
15
- gem "activesupport", "~> 4.1.0"
16
- gem "mysql2", "~> 0.3"
11
+ end
12
+
13
+ appraise "rails42" do
14
+ gem "activerecord", "~> 4.2.0"
17
15
  end
data/README.md CHANGED
@@ -32,12 +32,14 @@ Read query goes to the slave server.
32
32
  Article.where(:id => 1)
33
33
  ```
34
34
 
35
- If you want to access to the master saver, use readonly(false).
35
+ If you want to access to the master server, use read_master.
36
36
 
37
37
  ```ruby
38
- Article.where(:id => 1).readonly(false)
38
+ Article.where(:id => 1).read_master
39
39
  ```
40
40
 
41
+ It is possible to use readonly(false) instead of read_master, but it will be depricated at future version.
42
+
41
43
  In transaction, All queries go to the master server.
42
44
 
43
45
  ```ruby
@@ -151,12 +153,6 @@ The model that master_db_only model's child is always access to master db.
151
153
  Default slave connection manager is FreshConnection::ConnectionManager.
152
154
  If you would like to change slave connection manager, assign yourself slave connection manager.
153
155
 
154
- #### config/application.rb
155
-
156
- config.fresh_connection.connection_manager = MySlaveConnection
157
-
158
- or
159
-
160
156
  #### config/initializers/fresh_connection.rb
161
157
 
162
158
  FreshConnection.connection_manager = MySlaveConnection
@@ -17,13 +17,14 @@ Gem::Specification.new do |spec|
17
17
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ["lib"]
20
+ spec.required_ruby_version = '>= 2.0'
20
21
 
21
- spec.add_dependency 'activerecord', '>= 3.2.0', '< 4.2'
22
- spec.add_dependency 'activesupport', '>= 3.2.0', '< 4.2'
22
+ spec.add_dependency 'activerecord', '>= 3.2.0', '< 4.3'
23
+ spec.add_dependency 'activesupport', '>= 3.2.0', '< 4.3'
23
24
  spec.add_dependency 'mysql2', '~> 0.3'
24
25
 
25
- spec.add_development_dependency "bundler", "~> 1.6"
26
+ spec.add_development_dependency "bundler", "~> 1.7"
26
27
  spec.add_development_dependency "rake", '~> 10.0'
27
- spec.add_development_dependency "rspec", '~> 2.14'
28
+ spec.add_development_dependency "rspec", '~> 3.0'
28
29
  spec.add_development_dependency 'appraisal', '~> 1.0'
29
30
  end
@@ -3,7 +3,5 @@
3
3
  source "https://rubygems.org"
4
4
 
5
5
  gem "activerecord", "~> 3.2.0"
6
- gem "activesupport", "~> 3.2.0"
7
- gem "mysql2", "~> 0.3"
8
6
 
9
7
  gemspec :path => "../"
@@ -3,7 +3,5 @@
3
3
  source "https://rubygems.org"
4
4
 
5
5
  gem "activerecord", "~> 4.0.0"
6
- gem "activesupport", "~> 4.0.0"
7
- gem "mysql2", "~> 0.3"
8
6
 
9
7
  gemspec :path => "../"
@@ -3,7 +3,5 @@
3
3
  source "https://rubygems.org"
4
4
 
5
5
  gem "activerecord", "~> 4.1.0"
6
- gem "activesupport", "~> 4.1.0"
7
- gem "mysql2", "~> 0.3"
8
6
 
9
7
  gemspec :path => "../"
@@ -0,0 +1,7 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activerecord", "~> 4.2.0"
6
+
7
+ gemspec :path => "../"
@@ -15,17 +15,15 @@ module FreshConnection
15
15
 
16
16
  def slave_connection
17
17
  end
18
+ undef_method :slave_connection
18
19
 
19
20
  def put_aside!
20
21
  end
22
+ undef_method :put_aside!
21
23
 
22
24
  def recovery(failure_connection, exception)
23
- false
24
- end
25
-
26
- def recoverable?
27
- false
28
25
  end
26
+ undef_method :recovery
29
27
 
30
28
  private
31
29
 
@@ -1,19 +1,17 @@
1
1
  module FreshConnection
2
2
  class AccessControl
3
3
  class << self
4
- def force_master_access
5
- db = access_db
6
- access_to(:master)
7
- yield
8
- ensure
9
- access_to(db)
4
+ def force_master_access(&block)
5
+ switch_to(:master, &block)
10
6
  end
11
7
 
12
- def access(enable_slave_access)
13
- access_in(enable_slave_access ? :slave : :master)
14
- yield
15
- ensure
16
- access_out
8
+ def access(enable_slave_access, &block)
9
+ if access_db
10
+ block.call
11
+ else
12
+ db = enable_slave_access ? :slave : :master
13
+ switch_to(db, &block)
14
+ end
17
15
  end
18
16
 
19
17
  def slave_access?
@@ -22,14 +20,12 @@ module FreshConnection
22
20
 
23
21
  private
24
22
 
25
- def access_in(db)
26
- increment_access_count
27
- access_to(db) unless access_db
28
- end
29
-
30
- def access_out
31
- decrement_access_count
32
- access_to(nil) if access_count == 0
23
+ def switch_to(new_db)
24
+ old_db = access_db
25
+ access_to(new_db)
26
+ yield
27
+ ensure
28
+ access_to(old_db)
33
29
  end
34
30
 
35
31
  def access_db
@@ -39,18 +35,6 @@ module FreshConnection
39
35
  def access_to(db)
40
36
  Thread.current[:fresh_connection_access_target] = db
41
37
  end
42
-
43
- def access_count
44
- Thread.current['fresh_connection_access_count'] || 0
45
- end
46
-
47
- def increment_access_count
48
- Thread.current['fresh_connection_access_count'] = access_count + 1
49
- end
50
-
51
- def decrement_access_count
52
- Thread.current['fresh_connection_access_count'] = access_count - 1
53
- end
54
38
  end
55
39
  end
56
40
  end
@@ -17,16 +17,9 @@ module FreshConnection
17
17
  end
18
18
 
19
19
  def recovery(failure_connection, exception)
20
- if recoverable? && slave_down_message?(exception.message)
21
- put_aside!
22
- true
23
- else
24
- false
25
- end
26
- end
27
-
28
- def recoverable?
29
- true
20
+ do_recovery = slave_down_message?(exception.message)
21
+ put_aside! if do_recovery
22
+ do_recovery
30
23
  end
31
24
 
32
25
  private
@@ -6,6 +6,12 @@ module FreshConnection
6
6
  base.slave_connection_handler = FreshConnection::SlaveConnectionHandler.new
7
7
  end
8
8
 
9
+ if FreshConnection.rails_4?
10
+ delegate :read_master, to: :all
11
+ elsif FreshConnection.rails_3?
12
+ delegate :read_master, to: :scoped
13
+ end
14
+
9
15
  def manage_access(slave_access, &block)
10
16
  if master_db_only?
11
17
  FreshConnection::AccessControl.force_master_access(&block)
@@ -11,11 +11,16 @@ module FreshConnection
11
11
  end
12
12
  end
13
13
 
14
+
14
15
  def calculate(operation, column_name, options = {})
15
16
  slave_access = enable_slave_access && options[:readonly] != false
16
17
  @klass.manage_access(slave_access) { super }
17
18
  end
18
19
 
20
+ def enable_slave_access
21
+ connection.open_transactions == 0 && @read_from_master.nil?
22
+ end
23
+
19
24
  private
20
25
 
21
26
  def exec_queries_with_fresh_connection
@@ -31,10 +36,17 @@ module FreshConnection
31
36
  @klass.manage_access(enable_slave_access) { super }
32
37
  end
33
38
 
34
- private
39
+ def readonly(value = true)
40
+ value == false ? read_master : super
41
+ end
35
42
 
36
- def enable_slave_access
37
- connection.open_transactions == 0 && (readonly_value.nil? || readonly_value)
43
+ def read_master
44
+ spawn.read_master!
45
+ end
46
+
47
+ def read_master!
48
+ @read_from_master = true
49
+ self
38
50
  end
39
51
  end
40
52
 
@@ -57,10 +69,14 @@ module FreshConnection
57
69
  end
58
70
  end
59
71
 
60
- private
72
+ def readonly(value = true)
73
+ value == false ? read_master : super
74
+ end
61
75
 
62
- def enable_slave_access
63
- connection.open_transactions == 0 && (@readonly_value.nil? || @readonly_value)
76
+ def read_master
77
+ relation = clone
78
+ relation.instance_variable_set("@read_from_master", true)
79
+ relation
64
80
  end
65
81
  end
66
82
  end
@@ -0,0 +1,15 @@
1
+ module FreshConnection
2
+ module Extend
3
+ module ArStatementCache
4
+ def self.included(base)
5
+ base.alias_method_chain :execute, :fresh_connection
6
+ end
7
+
8
+ def execute_with_fresh_connection(params, klass, connection)
9
+ klass.manage_access(klass.all.enable_slave_access) do
10
+ execute_without_fresh_connection(params, klass, connection)
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -1,9 +1,11 @@
1
1
  module FreshConnection
2
2
  module Extend
3
3
  module Mysql2Adapter
4
+ RETRY_LIMIT = 3
5
+ private_constant :RETRY_LIMIT
6
+
4
7
  def self.included(base)
5
8
  base.__send__(:attr_writer, :model_class)
6
- base.alias_method_chain :configure_connection, :fresh_connection
7
9
  end
8
10
 
9
11
  def select_all(arel, name = nil, binds = [])
@@ -28,7 +30,7 @@ module FreshConnection
28
30
  rescue ActiveRecord::StatementInvalid => exception
29
31
  if @model_class.recovery(slave_connection, exception)
30
32
  retry_count += 1
31
- retry if retry_count < FreshConnection.retry_limit
33
+ retry if retry_count < RETRY_LIMIT
32
34
  end
33
35
 
34
36
  raise
@@ -36,11 +38,6 @@ module FreshConnection
36
38
  ensure
37
39
  @connection = master_connection
38
40
  end
39
-
40
- def configure_connection_with_fresh_connection
41
- return if FreshConnection.ignore_configure_connection?
42
- configure_connection_without_fresh_connection
43
- end
44
41
  end
45
42
  end
46
43
  end
@@ -0,0 +1,28 @@
1
+ require 'active_support/lazy_load_hooks'
2
+
3
+ ActiveSupport.on_load(:active_record) do
4
+ require 'fresh_connection/extend/ar_base'
5
+ require 'fresh_connection/extend/ar_relation'
6
+ require 'fresh_connection/extend/connection_handler'
7
+ require 'fresh_connection/extend/mysql2_adapter'
8
+ require 'active_record/connection_adapters/mysql2_adapter'
9
+
10
+ ActiveRecord::Base.extend FreshConnection::Extend::ArBase
11
+
12
+ ActiveRecord::Relation.__send__(:include, FreshConnection::Extend::ArRelation)
13
+
14
+ ActiveRecord::ConnectionAdapters::ConnectionHandler.__send__(
15
+ :include, FreshConnection::Extend::ConnectionHandler
16
+ )
17
+
18
+ ActiveRecord::ConnectionAdapters::Mysql2Adapter.__send__(
19
+ :include, FreshConnection::Extend::Mysql2Adapter
20
+ )
21
+
22
+ if defined?(ActiveRecord::StatementCache)
23
+ require 'fresh_connection/extend/ar_statement_cache'
24
+ ActiveRecord::StatementCache.__send__(:include, FreshConnection::Extend::ArStatementCache)
25
+ end
26
+
27
+ ActiveRecord::Base.establish_fresh_connection
28
+ end
@@ -1,18 +1,13 @@
1
1
  require 'fresh_connection/rack/connection_management'
2
- require 'rails'
3
2
 
4
3
  module FreshConnection
5
4
  class Railtie < Rails::Railtie
6
- config.fresh_connection = ActiveSupport::OrderedOptions.new
7
-
8
5
  initializer "fresh_connection.configure_rails_initialization" do |app|
9
6
  ActiveSupport.on_load(:active_record) do
10
7
  app.config.app_middleware.swap(
11
8
  ActiveRecord::ConnectionAdapters::ConnectionManagement,
12
9
  FreshConnection::Rack::ConnectionManagement
13
10
  )
14
-
15
- Initializer.extend_active_record
16
11
  end
17
12
  end
18
13
  end
@@ -1,4 +1,4 @@
1
1
  module FreshConnection
2
- VERSION = "0.2.6"
2
+ VERSION = "0.3.0"
3
3
  end
4
4
 
@@ -1,30 +1,19 @@
1
1
  require 'active_record'
2
- require 'active_support/core_ext'
3
- require 'active_support/dependencies/autoload'
2
+ require 'fresh_connection/access_control'
3
+ require 'fresh_connection/connection_manager'
4
+ require 'fresh_connection/slave_connection_handler'
4
5
 
5
6
  module FreshConnection
6
7
  extend ActiveSupport::Autoload
7
8
 
8
- autoload :AccessControl
9
9
  autoload :ConnectionManager
10
10
  autoload :SlaveConnectionHandler
11
- autoload :Initializer
12
- autoload :SlaveConnection
13
11
 
14
12
  class << self
15
- attr_writer :connection_manager, :ignore_configure_connection, :retry_limit, :env
13
+ attr_writer :connection_manager, :env
16
14
 
17
15
  def connection_manager
18
- manager_klass = @connection_manager || rails_config(:connection_manager) || ConnectionManager
19
- manager_klass.is_a?(String) ? manager_klass.constantize : manager_klass
20
- end
21
-
22
- def ignore_configure_connection?
23
- !!(@ignore_configure_connection || rails_config(:ignore_configure_connection))
24
- end
25
-
26
- def retry_limit
27
- @retry_limit || rails_config(:retry_limit) || 3
16
+ @connection_manager || ConnectionManager
28
17
  end
29
18
 
30
19
  def env
@@ -38,14 +27,8 @@ module FreshConnection
38
27
  def rails_4?
39
28
  ActiveRecord::VERSION::MAJOR == 4
40
29
  end
41
-
42
- private
43
-
44
- def rails_config(target)
45
- return nil unless defined?(Rails)
46
- Rails.application.config.fresh_connection[target]
47
- end
48
30
  end
49
31
  end
50
32
 
51
- require "fresh_connection/railtie.rb" if defined?(Rails)
33
+ require 'fresh_connection/extend'
34
+ require "fresh_connection/railtie" if defined?(Rails)
data/spec/db_schema.sql CHANGED
@@ -100,6 +100,7 @@ CREATE TABLE `users` (
100
100
  LOCK TABLES `users` WRITE;
101
101
  /*!40000 ALTER TABLE `users` DISABLE KEYS */;
102
102
  INSERT INTO `users` VALUES (1,'Tsukasa (master)','2014-04-10 07:24:16','2014-04-10 07:24:16');
103
+ INSERT INTO `users` VALUES (2,'Other','2015-01-16 07:24:16','2014-04-10 07:24:16');
103
104
  /*!40000 ALTER TABLE `users` ENABLE KEYS */;
104
105
  UNLOCK TABLES;
105
106
 
@@ -188,6 +189,8 @@ CREATE TABLE `users` (
188
189
  LOCK TABLES `users` WRITE;
189
190
  /*!40000 ALTER TABLE `users` DISABLE KEYS */;
190
191
  INSERT INTO `users` VALUES (1,'Tsukasa (slave1)','2014-04-10 07:24:16','2014-04-10 07:24:16');
192
+ INSERT INTO `users` VALUES (2,'Other','2015-01-16 07:24:16','2014-04-10 07:24:16');
193
+ INSERT INTO `users` VALUES (3,'Other','2015-01-16 07:24:16','2014-04-10 07:24:16');
191
194
  /*!40000 ALTER TABLE `users` ENABLE KEYS */;
192
195
  UNLOCK TABLES;
193
196
 
@@ -276,6 +279,8 @@ CREATE TABLE `users` (
276
279
  LOCK TABLES `users` WRITE;
277
280
  /*!40000 ALTER TABLE `users` DISABLE KEYS */;
278
281
  INSERT INTO `users` VALUES (1,'Tsukasa (slave2)','2014-04-10 07:24:16','2014-04-10 07:24:16');
282
+ INSERT INTO `users` VALUES (2,'Other','2015-01-16 07:24:16','2014-04-10 07:24:16');
283
+ INSERT INTO `users` VALUES (3,'Other','2015-01-16 07:24:16','2014-04-10 07:24:16');
279
284
  /*!40000 ALTER TABLE `users` ENABLE KEYS */;
280
285
  UNLOCK TABLES;
281
286
  /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
data/spec/prepare.rb CHANGED
@@ -2,10 +2,6 @@ require 'yaml'
2
2
  require 'active_record'
3
3
  require 'fresh_connection'
4
4
 
5
- unless ActiveRecord::Base.respond_to?('establish_fresh_connection')
6
- FreshConnection::Initializer.extend_active_record
7
- end
8
-
9
5
  system("mysql -uroot < spec/db_schema.sql")
10
6
 
11
7
  module ActiveRecord
data/spec/spec_helper.rb CHANGED
@@ -2,7 +2,6 @@ ENV["RAILS_ENV"]="test"
2
2
  $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
3
3
  require 'fresh_connection'
4
4
 
5
- FreshConnection::Initializer.extend_active_record
6
5
  FreshConnection.env = "test"
7
6
  require File.join(File.dirname(__FILE__), "prepare.rb")
8
7
 
@@ -2,7 +2,7 @@ require 'spec_helper'
2
2
 
3
3
  describe FreshConnection do
4
4
  before(:each) do
5
- @user = User.first
5
+ @user = User.where(id: 1).first
6
6
  end
7
7
 
8
8
  context "access to slave" do
@@ -35,17 +35,21 @@ describe FreshConnection do
35
35
  end
36
36
 
37
37
  it "select with join is to access to slave1" do
38
- name = User.joins(:address).where("addresses.user_id = 1").first.name
38
+ name = User.joins(:address).where("addresses.user_id = 1").where(id: 1).first.name
39
39
  expect(name).to be_include("slave1")
40
40
  end
41
41
 
42
42
  it "pluck is access to slave1" do
43
- expect(User.pluck(:name).first).to be_include("slave")
43
+ expect(User.where(id: 1).pluck(:name).first).to be_include("slave")
44
44
  end
45
45
 
46
46
  it "pluck returns empty array when result of condition is empty" do
47
47
  expect(User.limit(0).pluck(:name)).to be_empty
48
48
  end
49
+
50
+ it "count is access to slave" do
51
+ expect(User.where(name: "Other").count).to eq(2)
52
+ end
49
53
  end
50
54
 
51
55
  context "access to master" do
@@ -59,14 +63,32 @@ describe FreshConnection do
59
63
  Tel.first.user.name,
60
64
  @user.address.prefecture,
61
65
  @user.tels.first.number,
62
- User.joins(:address).where("addresses.user_id = 1").first.name,
63
- User.pluck(:name).first
66
+ User.joins(:address).where(id: 1).where("addresses.user_id = 1").first.name,
67
+ User.where(id: 1).pluck(:name).first
64
68
  ]
65
69
  expect(data).to be_all{|n| n.include?("master")}
66
70
 
71
+ expect(User.where(name: "Other").count).to eq(1)
67
72
  end
68
73
  end
69
74
 
75
+ it "specify read_master" do
76
+ data = [
77
+ Address.read_master.first.prefecture,
78
+ Address.includes(:user).read_master.first.user.name,
79
+ Tel.read_master.first.number,
80
+ Tel.includes(:user).read_master.first.user.name,
81
+ @user.tels.read_master.first.number,
82
+ User.where(id: 1).includes(:tels).read_master.first.tels.first.number,
83
+ User.where(id: 1).includes(:address).read_master.first.address.prefecture,
84
+ User.where(id: 1).joins(:address).where("addresses.user_id = 1").read_master.first.name,
85
+ User.where(id: 1).read_master.pluck(:name).first
86
+ ]
87
+
88
+ expect(data).to be_all{|n| n.include?("master")}
89
+ expect(User.where(name: "Other").read_master.count).to eq(1)
90
+ end
91
+
70
92
  it "specify readonly(false)" do
71
93
  data = [
72
94
  Address.readonly(false).first.prefecture,
@@ -74,13 +96,15 @@ describe FreshConnection do
74
96
  Tel.readonly(false).first.number,
75
97
  Tel.includes(:user).readonly(false).first.user.name,
76
98
  @user.tels.readonly(false).first.number,
77
- User.includes(:tels).readonly(false).first.tels.first.number,
78
- User.includes(:address).readonly(false).first.address.prefecture,
79
- User.joins(:address).where("addresses.user_id = 1").readonly(false).first.name,
80
- User.readonly(false).pluck(:name).first
99
+ User.where(id: 1).includes(:tels).readonly(false).first.tels.first.number,
100
+ User.where(id: 1).includes(:address).readonly(false).first.address.prefecture,
101
+ User.where(id: 1).joins(:address).where("addresses.user_id = 1").readonly(false).first.name,
102
+ User.where(id: 1).readonly(false).pluck(:name).first
81
103
  ]
82
104
 
83
105
  expect(data).to be_all{|n| n.include?("master")}
106
+ expect(User.where(name: "Other").readonly(false).count).to eq(1)
107
+ expect(User.where(name: "Other").count(:readonly => false)).to eq(1)
84
108
  end
85
109
  end
86
110
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fresh_connection
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.6
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tsukasa OISHI
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-09-29 00:00:00.000000000 Z
11
+ date: 2015-03-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -19,7 +19,7 @@ dependencies:
19
19
  version: 3.2.0
20
20
  - - "<"
21
21
  - !ruby/object:Gem::Version
22
- version: '4.2'
22
+ version: '4.3'
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
@@ -29,7 +29,7 @@ dependencies:
29
29
  version: 3.2.0
30
30
  - - "<"
31
31
  - !ruby/object:Gem::Version
32
- version: '4.2'
32
+ version: '4.3'
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: activesupport
35
35
  requirement: !ruby/object:Gem::Requirement
@@ -39,7 +39,7 @@ dependencies:
39
39
  version: 3.2.0
40
40
  - - "<"
41
41
  - !ruby/object:Gem::Version
42
- version: '4.2'
42
+ version: '4.3'
43
43
  type: :runtime
44
44
  prerelease: false
45
45
  version_requirements: !ruby/object:Gem::Requirement
@@ -49,7 +49,7 @@ dependencies:
49
49
  version: 3.2.0
50
50
  - - "<"
51
51
  - !ruby/object:Gem::Version
52
- version: '4.2'
52
+ version: '4.3'
53
53
  - !ruby/object:Gem::Dependency
54
54
  name: mysql2
55
55
  requirement: !ruby/object:Gem::Requirement
@@ -70,14 +70,14 @@ dependencies:
70
70
  requirements:
71
71
  - - "~>"
72
72
  - !ruby/object:Gem::Version
73
- version: '1.6'
73
+ version: '1.7'
74
74
  type: :development
75
75
  prerelease: false
76
76
  version_requirements: !ruby/object:Gem::Requirement
77
77
  requirements:
78
78
  - - "~>"
79
79
  - !ruby/object:Gem::Version
80
- version: '1.6'
80
+ version: '1.7'
81
81
  - !ruby/object:Gem::Dependency
82
82
  name: rake
83
83
  requirement: !ruby/object:Gem::Requirement
@@ -98,14 +98,14 @@ dependencies:
98
98
  requirements:
99
99
  - - "~>"
100
100
  - !ruby/object:Gem::Version
101
- version: '2.14'
101
+ version: '3.0'
102
102
  type: :development
103
103
  prerelease: false
104
104
  version_requirements: !ruby/object:Gem::Requirement
105
105
  requirements:
106
106
  - - "~>"
107
107
  - !ruby/object:Gem::Version
108
- version: '2.14'
108
+ version: '3.0'
109
109
  - !ruby/object:Gem::Dependency
110
110
  name: appraisal
111
111
  requirement: !ruby/object:Gem::Requirement
@@ -138,18 +138,19 @@ files:
138
138
  - gemfiles/rails3.gemfile
139
139
  - gemfiles/rails40.gemfile
140
140
  - gemfiles/rails41.gemfile
141
+ - gemfiles/rails42.gemfile
141
142
  - lib/fresh_connection.rb
142
143
  - lib/fresh_connection/abstract_connection_manager.rb
143
144
  - lib/fresh_connection/access_control.rb
144
145
  - lib/fresh_connection/connection_manager.rb
146
+ - lib/fresh_connection/extend.rb
145
147
  - lib/fresh_connection/extend/ar_base.rb
146
148
  - lib/fresh_connection/extend/ar_relation.rb
149
+ - lib/fresh_connection/extend/ar_statement_cache.rb
147
150
  - lib/fresh_connection/extend/connection_handler.rb
148
151
  - lib/fresh_connection/extend/mysql2_adapter.rb
149
- - lib/fresh_connection/initializer.rb
150
152
  - lib/fresh_connection/rack/connection_management.rb
151
153
  - lib/fresh_connection/railtie.rb
152
- - lib/fresh_connection/slave_connection.rb
153
154
  - lib/fresh_connection/slave_connection_handler.rb
154
155
  - lib/fresh_connection/version.rb
155
156
  - log/.gitkeep
@@ -174,7 +175,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
174
175
  requirements:
175
176
  - - ">="
176
177
  - !ruby/object:Gem::Version
177
- version: '0'
178
+ version: '2.0'
178
179
  required_rubygems_version: !ruby/object:Gem::Requirement
179
180
  requirements:
180
181
  - - ">="
@@ -182,7 +183,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
182
183
  version: '0'
183
184
  requirements: []
184
185
  rubyforge_project:
185
- rubygems_version: 2.4.1
186
+ rubygems_version: 2.4.5
186
187
  signing_key:
187
188
  specification_version: 4
188
189
  summary: FreshConnection supports to connect with Mysql slave servers via Load Balancers.
@@ -1,27 +0,0 @@
1
- require 'fresh_connection/extend/ar_base'
2
- require 'fresh_connection/extend/ar_relation'
3
- require 'fresh_connection/extend/connection_handler'
4
- require 'fresh_connection/extend/mysql2_adapter'
5
-
6
- module FreshConnection
7
- class Initializer
8
- class << self
9
- def extend_active_record
10
- ActiveRecord::Base.extend FreshConnection::Extend::ArBase
11
-
12
- ActiveRecord::Relation.__send__(:include, FreshConnection::Extend::ArRelation)
13
-
14
- ActiveRecord::ConnectionAdapters::ConnectionHandler.__send__(
15
- :include, FreshConnection::Extend::ConnectionHandler
16
- )
17
-
18
- require 'active_record/connection_adapters/mysql2_adapter'
19
- ActiveRecord::ConnectionAdapters::Mysql2Adapter.__send__(
20
- :include, FreshConnection::Extend::Mysql2Adapter
21
- )
22
-
23
- ActiveRecord::Base.establish_fresh_connection
24
- end
25
- end
26
- end
27
- end
@@ -1,54 +0,0 @@
1
- require 'active_support/deprecation'
2
-
3
- module FreshConnection
4
- #
5
- # This class has been deprecated.
6
- # It will delete at next version.
7
- #
8
- class SlaveConnection
9
- class << self
10
- def ignore_models=(models)
11
- deprecation("ignore_models=", "ActiveRecord::Base.master_db_only!")
12
- models.each do |model|
13
- if model.is_a?(String)
14
- model.constantize.master_db_only!
15
- elsif model.ancestors.include?(ActiveRecord::Base)
16
- model.master_db_only!
17
- end
18
- end
19
- end
20
-
21
- def ignore_configure_connection=(flag)
22
- deprecation("ignore_configure_connection=", "FreshConnection.ignore_configure_connection=")
23
- FreshConnection.ignore_configure_connection = flag
24
- end
25
-
26
- def connection_manager=(manager)
27
- deprecation("connection_manager=", "FreshConnection.connection_manager=")
28
- FreshConnection.connection_manager = manager
29
- end
30
-
31
- def slave_connection
32
- raise_deprecation_exception("slave_connection", "ArtiveRecord::Base.slave_connection")
33
- end
34
-
35
- private
36
-
37
- def deprecation(method_name, instead_method)
38
- ActiveSupport::Deprecation.warn(deprecation_message(method_name, instead_method))
39
- end
40
-
41
- def raise_deprecation_exception(method_name, instead_method)
42
- if defined?(ActiveSupport::DeprecationException)
43
- raise ActiveSupport::DeprecationException, deprecation_message(method_name, instead_method)
44
- else
45
- raise "ActiveSupport::DeprecationException: #{deprecation_message(method_name, instead_method)}"
46
- end
47
- end
48
-
49
- def deprecation_message(method_name, instead_method)
50
- "FreshConnection::SlaveConnection.#{method_name} has been deprecated. Use #{instead_method} instead"
51
- end
52
- end
53
- end
54
- end