fresh_connection 0.2.6 → 0.3.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
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