fresh_connection 0.2.1 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  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.