fresh_connection 0.2.1 → 0.2.2

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: 857d0d9ba24df51680f684b69af3c6c48225e949
4
- data.tar.gz: 7007d1b834443414e39bedcaedea38c986d7f5bc
3
+ metadata.gz: 2999ecd43189e483dd9e76457c90598f3056977c
4
+ data.tar.gz: 2cf79d1a5a80c898bc45154f41c8f6bbc8ab58e4
5
5
  SHA512:
6
- metadata.gz: 2df9731b1f0d52e9d18bc7277cd4bd701ad0a91f38330a6a0704c24a5f1d3c3d0455a174880eb1a85be710af282730a6f86c5ff382bc49b876b2b688d6a919cb
7
- data.tar.gz: e9dfd6f0ce0995d85b0bffe2b68a1b17be89efff305ba18ab6a77becec66a707cd3586a05719bf8c0035cfbe4dbe2f3ee6014489491d2b7a1a95956bf1ef8305
6
+ metadata.gz: 7410aef62e7d1d41a51c0d47574ac053d7662a88d56ab6660396743929df8ed63baedb760f7954935b07313a5f500833e509d54336136bdd7868a51622bc2f0b
7
+ data.tar.gz: abe0ef9651146312f7513f8a6ae49bb6ebde58df48077699396cad5a46ccc86480219671ec34595edeb41d62d9cf1153408b98169502db2672691a3cd7008747
data/Appraisals CHANGED
@@ -1,17 +1,17 @@
1
1
  appraise "rails3" do
2
2
  gem "activerecord", "~> 3.2.0"
3
3
  gem "activesupport", "~> 3.2.0"
4
- gem "railties", "~> 3.2.0"
4
+ gem "mysql2", "~> 0.3"
5
5
  end
6
6
 
7
7
  appraise "rails40" do
8
8
  gem "activerecord", "~> 4.0.0"
9
9
  gem "activesupport", "~> 4.0.0"
10
- gem "railties", "~> 4.0.0"
10
+ gem "mysql2", "~> 0.3"
11
11
  end
12
12
 
13
13
  appraise "rails41" do
14
14
  gem "activerecord", "~> 4.1.0"
15
15
  gem "activesupport", "~> 4.1.0"
16
- gem "railties", "~> 4.1.0"
16
+ gem "mysql2", "~> 0.3"
17
17
  end
data/README.md CHANGED
@@ -1,11 +1,11 @@
1
1
  # FreshConnection
2
2
 
3
3
  FreshConnection supports to connect with Mysql slave servers via Load Balancers.
4
- All connections will be disconnected every time at the end of the action.
4
+ All connections will be disconnected every time at the end of the Rails controller's action.
5
+ FreshConnection does not support Rails 2.x.
5
6
 
6
7
  ## Installation
7
8
 
8
- ### For Rails3 and 4
9
9
  Add this line to your application's Gemfile:
10
10
 
11
11
  gem "fresh_connection"
@@ -38,11 +38,11 @@ Or install it yourself as:
38
38
  password: slave
39
39
  host: slave
40
40
 
41
- ```slave``` is config to connect to slave servers.
42
- Others will use the master setting. If you want to change, write in the slave.
41
+ ```slave``` is a config to connect to slave servers.
42
+ Others will use the master server setting.
43
43
 
44
44
  ### use multiple slave servers group
45
- If you may want to user multiple slave group, write multiple slave group to config/database.yml.
45
+ If you may want to use multiple slave groups, write the config to ```config/database.yml```.
46
46
 
47
47
  production:
48
48
  adapter: mysql2
@@ -65,13 +65,13 @@ If you may want to user multiple slave group, write multiple slave group to conf
65
65
  password: slave
66
66
  host: admin_slaves
67
67
 
68
- And call establish_fresh_connection method in model that access to ```admin_slave``` slave group.
68
+ And call the establish_fresh_connection method in a model that access to ```admin_slave``` slave group.
69
69
 
70
70
  class AdminUser < ActiveRecord::Base
71
71
  establish_fresh_connection :admin_slave
72
72
  end
73
73
 
74
- The children is access to same slave group of parent.
74
+ The model of children class will access to same slave group as the parent.
75
75
 
76
76
  class Parent < ActiveRecord::Base
77
77
  establish_fresh_connection :admin_slave
@@ -92,13 +92,19 @@ AdminUser and Benefit access to ```admin_slave``` slave group.
92
92
  master_db_only!
93
93
  end
94
94
 
95
- If model that always access to master servers is exist, You may want to write ```master_db_only!``` in model.
95
+ If a model that always access to the master server is exist, You write ```master_db_only!``` in the model.
96
96
  The model that master_db_only model's child is always access to master db.
97
97
 
98
98
  ### Slave Connection Manager
99
99
  Default slave connection manager is FreshConnection::ConnectionManager.
100
100
  If you would like to change slave connection manager, assign yourself slave connection manager.
101
101
 
102
+ #### config/application.rb
103
+
104
+ config.fresh_connection.connection_manager = MySlaveConnection
105
+
106
+ or
107
+
102
108
  #### config/initializers/fresh_connection.rb
103
109
 
104
110
  FreshConnection.connection_manager = MySlaveConnection
@@ -151,6 +157,8 @@ I'm glad that you would do test!
151
157
  To run the test suite, you need mysql installed.
152
158
  How to setup your test environment.
153
159
 
160
+ First of all, you setting the config of the test mysql server in ```spec/database.yml```
161
+
154
162
  ```bash
155
163
  bundle install --path bundle
156
164
  GEM_HOME=bundle/ruby/(your ruby version) gem install bundler --pre
@@ -18,13 +18,12 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ["lib"]
20
20
 
21
- spec.add_dependency 'activerecord', '>= 3.2.0'
22
- spec.add_dependency 'activesupport', '>= 3.2.0'
23
- spec.add_dependency 'railties', '>= 3.2.0'
21
+ spec.add_dependency 'activerecord', '>= 3.2.0', '< 4.2'
22
+ spec.add_dependency 'activesupport', '>= 3.2.0', '< 4.2'
23
+ spec.add_dependency 'mysql2', '~> 0.3'
24
24
 
25
- spec.add_development_dependency "bundler", "~> 1.3"
26
- spec.add_development_dependency "rake", '>= 10.0.0'
27
- spec.add_development_dependency "rspec", '>= 2.14.1'
28
- spec.add_development_dependency 'mysql2', '>= 0.3.15'
29
- spec.add_development_dependency 'appraisal', '>= 1.0.0'
25
+ spec.add_development_dependency "bundler", "~> 1.6"
26
+ spec.add_development_dependency "rake", '~> 10.0'
27
+ spec.add_development_dependency "rspec", '~> 2.14'
28
+ spec.add_development_dependency 'appraisal', '~> 1.0'
30
29
  end
@@ -4,6 +4,6 @@ source "https://rubygems.org"
4
4
 
5
5
  gem "activerecord", "~> 3.2.0"
6
6
  gem "activesupport", "~> 3.2.0"
7
- gem "railties", "~> 3.2.0"
7
+ gem "mysql2", "~> 0.3"
8
8
 
9
9
  gemspec :path => "../"
@@ -4,6 +4,6 @@ source "https://rubygems.org"
4
4
 
5
5
  gem "activerecord", "~> 4.0.0"
6
6
  gem "activesupport", "~> 4.0.0"
7
- gem "railties", "~> 4.0.0"
7
+ gem "mysql2", "~> 0.3"
8
8
 
9
9
  gemspec :path => "../"
@@ -4,6 +4,6 @@ source "https://rubygems.org"
4
4
 
5
5
  gem "activerecord", "~> 4.1.0"
6
6
  gem "activesupport", "~> 4.1.0"
7
- gem "railties", "~> 4.1.0"
7
+ gem "mysql2", "~> 0.3"
8
8
 
9
9
  gemspec :path => "../"
@@ -44,7 +44,7 @@ module FreshConnection
44
44
  end
45
45
 
46
46
  def get_spec
47
- ret = ActiveRecord::Base.configurations[Rails.env]
47
+ ret = ActiveRecord::Base.configurations[FreshConnection.env]
48
48
  ret.merge(ret[@slave_group] || {})
49
49
  end
50
50
  end
@@ -1,4 +1,3 @@
1
- require 'fresh_connection/rack/connection_management'
2
1
  require 'fresh_connection/extend/ar_base'
3
2
  require 'fresh_connection/extend/ar_relation'
4
3
  require 'fresh_connection/extend/connection_handler'
@@ -7,13 +6,6 @@ require 'fresh_connection/extend/mysql2_adapter'
7
6
  module FreshConnection
8
7
  class Initializer
9
8
  class << self
10
- def swap_rack(app)
11
- app.config.middleware.swap(
12
- ActiveRecord::ConnectionAdapters::ConnectionManagement,
13
- FreshConnection::Rack::ConnectionManagement
14
- )
15
- end
16
-
17
9
  def extend_active_record
18
10
  ActiveRecord::Base.extend FreshConnection::Extend::ArBase
19
11
 
@@ -1,11 +1,18 @@
1
+ require 'fresh_connection/rack/connection_management'
1
2
  require 'rails'
2
3
 
3
4
  module FreshConnection
4
5
  class Railtie < Rails::Railtie
5
- initializer "fresh_connection.configure_rails_initialization" do |app|
6
- Initializer.swap_rack(app)
6
+ config.fresh_connection = ActiveSupport::OrderedOptions.new
7
+ config.eager_load_namespaces << FreshConnection
7
8
 
9
+ initializer "fresh_connection.configure_rails_initialization" do |app|
8
10
  ActiveSupport.on_load(:active_record) do
11
+ app.config.app_middleware.swap(
12
+ ActiveRecord::ConnectionAdapters::ConnectionManagement,
13
+ FreshConnection::Rack::ConnectionManagement
14
+ )
15
+
9
16
  Initializer.extend_active_record
10
17
  end
11
18
  end
@@ -1,4 +1,4 @@
1
1
  module FreshConnection
2
- VERSION = "0.2.1"
2
+ VERSION = "0.2.2"
3
3
  end
4
4
 
@@ -12,18 +12,23 @@ module FreshConnection
12
12
  autoload :SlaveConnection
13
13
 
14
14
  class << self
15
- attr_writer :connection_manager, :ignore_configure_connection, :retry_limit
15
+ attr_writer :connection_manager, :ignore_configure_connection, :retry_limit, :env
16
16
 
17
17
  def connection_manager
18
- @connection_manager || ConnectionManager
18
+ manager_klass = @connection_manager || rails_config(:connection_manager) || ConnectionManager
19
+ manager_klass.is_a?(String) ? manager_klass.constantize : manager_klass
19
20
  end
20
21
 
21
22
  def ignore_configure_connection?
22
- !!@ignore_configure_connection
23
+ !!(@ignore_configure_connection || rails_config(:ignore_configure_connection))
23
24
  end
24
25
 
25
26
  def retry_limit
26
- @retry_limit || 3
27
+ @retry_limit || rails_config(:retry_limit) || 3
28
+ end
29
+
30
+ def env
31
+ @env || defined?(Rails) && Rails.env
27
32
  end
28
33
 
29
34
  def rails_3?
@@ -33,7 +38,14 @@ module FreshConnection
33
38
  def rails_4?
34
39
  ActiveRecord::VERSION::MAJOR == 4
35
40
  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
36
48
  end
37
49
  end
38
50
 
39
- require "fresh_connection/railtie.rb"
51
+ require "fresh_connection/railtie.rb" if defined?(Rails)
data/spec/prepare.rb CHANGED
@@ -5,7 +5,7 @@ system("mysql -uroot < spec/db_schema.sql")
5
5
  module ActiveRecord
6
6
  class Base
7
7
  self.configurations = YAML.load_file(File.join(File.dirname(__FILE__), "database.yml"))
8
- establish_connection
8
+ establish_connection(configurations["test"])
9
9
  establish_fresh_connection :slave1
10
10
  end
11
11
  end
data/spec/spec_helper.rb CHANGED
@@ -3,6 +3,7 @@ $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
3
3
  require 'fresh_connection'
4
4
 
5
5
  FreshConnection::Initializer.extend_active_record
6
+ FreshConnection.env = "test"
6
7
  require File.join(File.dirname(__FILE__), "prepare.rb")
7
8
 
8
9
  Dir[File.join(File.dirname(__FILE__), "/support/**/*.rb")].each {|f| require f}
@@ -48,7 +48,7 @@ describe FreshConnection::AccessControl do
48
48
  it "forced master state" do
49
49
  @ac.access(true) do
50
50
  @ac.force_master_access do
51
- expect(@ac.slave_access?).to be_false
51
+ expect(@ac.slave_access?).to be_falsey
52
52
  end
53
53
  end
54
54
  end
@@ -56,7 +56,7 @@ describe FreshConnection::AccessControl do
56
56
  it "not effect outside" do
57
57
  @ac.access(true) do
58
58
  @ac.force_master_access {}
59
- expect(@ac.slave_access?).to be_true
59
+ expect(@ac.slave_access?).to be_truthy
60
60
  end
61
61
  end
62
62
  end
@@ -29,14 +29,14 @@ describe ActiveRecord::Base do
29
29
  end
30
30
 
31
31
  it "childrend of master_db_only class is master_db_only" do
32
- expect(User2.master_db_only?).to be_false
32
+ expect(User2.master_db_only?).to be_falsey
33
33
  Parent.master_db_only!
34
- expect(User2.master_db_only?).to be_true
34
+ expect(User2.master_db_only?).to be_truthy
35
35
  end
36
36
 
37
37
  it "not effect other class" do
38
38
  Parent.master_db_only!
39
- expect(Address.master_db_only?).to be_false
39
+ expect(Address.master_db_only?).to be_falsey
40
40
  end
41
41
  end
42
42
  end
@@ -12,7 +12,7 @@ describe FreshConnection do
12
12
  Address.first.user.name,
13
13
  Tel.first.user.name,
14
14
  ]
15
-
15
+
16
16
  expect(data).to be_all{|n| n.include?("slave1")}
17
17
  end
18
18
 
@@ -21,7 +21,7 @@ describe FreshConnection do
21
21
  Address.first.prefecture,
22
22
  @user.address.prefecture
23
23
  ]
24
-
24
+
25
25
  expect(data).to be_all{|n| n.include?("slave1")}
26
26
  end
27
27
 
@@ -30,7 +30,7 @@ describe FreshConnection do
30
30
  Tel.first.number,
31
31
  @user.tels.first.number
32
32
  ]
33
-
33
+
34
34
  expect(data).to be_all{|n| n.include?("slave2")}
35
35
  end
36
36
 
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.1
4
+ version: 0.2.2
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-04-14 00:00:00.000000000 Z
11
+ date: 2014-06-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -17,6 +17,9 @@ dependencies:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: 3.2.0
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '4.2'
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
@@ -24,6 +27,9 @@ dependencies:
24
27
  - - ">="
25
28
  - !ruby/object:Gem::Version
26
29
  version: 3.2.0
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: '4.2'
27
33
  - !ruby/object:Gem::Dependency
28
34
  name: activesupport
29
35
  requirement: !ruby/object:Gem::Requirement
@@ -31,6 +37,9 @@ dependencies:
31
37
  - - ">="
32
38
  - !ruby/object:Gem::Version
33
39
  version: 3.2.0
40
+ - - "<"
41
+ - !ruby/object:Gem::Version
42
+ version: '4.2'
34
43
  type: :runtime
35
44
  prerelease: false
36
45
  version_requirements: !ruby/object:Gem::Requirement
@@ -38,90 +47,79 @@ dependencies:
38
47
  - - ">="
39
48
  - !ruby/object:Gem::Version
40
49
  version: 3.2.0
50
+ - - "<"
51
+ - !ruby/object:Gem::Version
52
+ version: '4.2'
41
53
  - !ruby/object:Gem::Dependency
42
- name: railties
54
+ name: mysql2
43
55
  requirement: !ruby/object:Gem::Requirement
44
56
  requirements:
45
- - - ">="
57
+ - - "~>"
46
58
  - !ruby/object:Gem::Version
47
- version: 3.2.0
59
+ version: '0.3'
48
60
  type: :runtime
49
61
  prerelease: false
50
62
  version_requirements: !ruby/object:Gem::Requirement
51
63
  requirements:
52
- - - ">="
64
+ - - "~>"
53
65
  - !ruby/object:Gem::Version
54
- version: 3.2.0
66
+ version: '0.3'
55
67
  - !ruby/object:Gem::Dependency
56
68
  name: bundler
57
69
  requirement: !ruby/object:Gem::Requirement
58
70
  requirements:
59
71
  - - "~>"
60
72
  - !ruby/object:Gem::Version
61
- version: '1.3'
73
+ version: '1.6'
62
74
  type: :development
63
75
  prerelease: false
64
76
  version_requirements: !ruby/object:Gem::Requirement
65
77
  requirements:
66
78
  - - "~>"
67
79
  - !ruby/object:Gem::Version
68
- version: '1.3'
80
+ version: '1.6'
69
81
  - !ruby/object:Gem::Dependency
70
82
  name: rake
71
83
  requirement: !ruby/object:Gem::Requirement
72
84
  requirements:
73
- - - ">="
85
+ - - "~>"
74
86
  - !ruby/object:Gem::Version
75
- version: 10.0.0
87
+ version: '10.0'
76
88
  type: :development
77
89
  prerelease: false
78
90
  version_requirements: !ruby/object:Gem::Requirement
79
91
  requirements:
80
- - - ">="
92
+ - - "~>"
81
93
  - !ruby/object:Gem::Version
82
- version: 10.0.0
94
+ version: '10.0'
83
95
  - !ruby/object:Gem::Dependency
84
96
  name: rspec
85
97
  requirement: !ruby/object:Gem::Requirement
86
98
  requirements:
87
- - - ">="
88
- - !ruby/object:Gem::Version
89
- version: 2.14.1
90
- type: :development
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - ">="
95
- - !ruby/object:Gem::Version
96
- version: 2.14.1
97
- - !ruby/object:Gem::Dependency
98
- name: mysql2
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - ">="
99
+ - - "~>"
102
100
  - !ruby/object:Gem::Version
103
- version: 0.3.15
101
+ version: '2.14'
104
102
  type: :development
105
103
  prerelease: false
106
104
  version_requirements: !ruby/object:Gem::Requirement
107
105
  requirements:
108
- - - ">="
106
+ - - "~>"
109
107
  - !ruby/object:Gem::Version
110
- version: 0.3.15
108
+ version: '2.14'
111
109
  - !ruby/object:Gem::Dependency
112
110
  name: appraisal
113
111
  requirement: !ruby/object:Gem::Requirement
114
112
  requirements:
115
- - - ">="
113
+ - - "~>"
116
114
  - !ruby/object:Gem::Version
117
- version: 1.0.0
115
+ version: '1.0'
118
116
  type: :development
119
117
  prerelease: false
120
118
  version_requirements: !ruby/object:Gem::Requirement
121
119
  requirements:
122
- - - ">="
120
+ - - "~>"
123
121
  - !ruby/object:Gem::Version
124
- version: 1.0.0
122
+ version: '1.0'
125
123
  description: https://github.com/tsukasaoishi/fresh_connection
126
124
  email:
127
125
  - tsukasa.oishi@gmail.com
@@ -183,7 +181,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
183
181
  version: '0'
184
182
  requirements: []
185
183
  rubyforge_project:
186
- rubygems_version: 2.2.0
184
+ rubygems_version: 2.2.2
187
185
  signing_key:
188
186
  specification_version: 4
189
187
  summary: FreshConnection supports to connect with Mysql slave servers via Load Balancers.