ar-multidb 0.1.4 → 0.1.5

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.
@@ -0,0 +1,3 @@
1
+ /pkg
2
+ *~
3
+ \.DS_Store
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in ar-multidb.gemspec
4
+ gemspec
@@ -14,32 +14,31 @@ support in a production environment.
14
14
  Randomized balancing of multiple connections within a group is supported. In the
15
15
  future, some kind of automatic balancing of read/write queries might be implemented.
16
16
 
17
- Testet with Rails 2.3.11. No guarantees about Rails 3.
17
+ Tested with Rails 2.3.11. No guarantees about Rails 3.
18
18
 
19
19
 
20
20
  Comparison to other ActiveRecord extensions
21
21
  ===========================================
22
22
 
23
- Unlike other, more full-featured extensions such as Octopus and Seamless Database Pool,
24
- Multidb aims to be:
23
+ Compared to other, more full-featured extensions such as Octopus and Seamless Database Pool:
25
24
 
26
- * Implemented using a minimal amount of
27
- monkeypatching magic. The only part of ActiveRecord that is overriden is
25
+ **Minimal amount of monkeypatching magic**. The only part of ActiveRecord that is overridden is
28
26
  `ActiveRecord::Base#connection`.
29
27
 
30
- * Non-invasive. Very small amounts of configuration and changes to the client
28
+ **Non-invasive**. Very small amounts of configuration and changes to the client
31
29
  application are required.
32
30
 
33
- * Orthogonal. Unlike Octopus, for example, connections follow context:
31
+ **Orthogonal**. Unlike Octopus, for example, connections follow
32
+ context:
34
33
 
35
- Multidb.use(:master) do
36
- @post = Post.find(1)
37
- Multidb.use(:slave) do
38
- @post.authors # This will use the slave
39
- end
34
+ Multidb.use(:master) do
35
+ @post = Post.find(1)
36
+ Multidb.use(:slave) do
37
+ @post.authors # This will use the slave
40
38
  end
39
+ end
41
40
 
42
- * Low-overhead. Since `connection` is called on every single
41
+ **Low-overhead**. Since `connection` is called on every single
43
42
  database operation, it needs to be fast. Which it is: Multidb's implementation of
44
43
  `connection` incurs only a single hash lookup in `Thread.current`.
45
44
 
@@ -124,12 +123,15 @@ Development mode
124
123
 
125
124
  In development you will typically want `Multidb.use(:slave)` to still work, but you
126
125
  probably don't want to run multiple databases on your development box. To make `use`
127
- silently fall back to using the default connection, simply set `fallback: true` in
128
- `database.yml`:
126
+ silently fall back to using the default connection, Multidb can run in fallback
127
+ mode.
129
128
 
130
- production:
129
+ If you are using Rails, this will be automatically enabled in 'development' and
130
+ 'test' environments. Otherwise, simply set `fallback: true` in `database.yml`:
131
+
132
+ development:
131
133
  adapter: postgresql
132
- database: myapp_production
134
+ database: myapp_development
133
135
  username: ohoh
134
136
  password: mymy
135
137
  host: db1
@@ -0,0 +1,21 @@
1
+ require "bundler/gem_tasks"
2
+
3
+ desc 'Bump version'
4
+ task :bump do
5
+ if `git status -uno -s --porcelain | wc -l`.to_i > 0
6
+ abort "You have uncommitted changed."
7
+ end
8
+ text = File.read('lib/multidb/version.rb')
9
+ if text =~ /VERSION = '(.*)'/
10
+ old_version = $1
11
+ version_parts = old_version.split('.')
12
+ version_parts[-1] = version_parts[-1].to_i + 1
13
+ new_version = version_parts.join('.')
14
+ text.gsub!(/VERSION = '(.*)'/, "VERSION = '#{new_version}'")
15
+ File.open('lib/multidb/version.rb', 'w') { |f| f << text }
16
+ (system("git add lib/multidb/version.rb") and
17
+ system("git commit -m 'Bump to #{new_version}.'")) or abort "Failed to commit."
18
+ else
19
+ abort "Could not find version number"
20
+ end
21
+ end
@@ -0,0 +1,22 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "multidb/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "ar-multidb"
7
+ s.version = Multidb::VERSION
8
+ s.authors = ["Alexander Staubo"]
9
+ s.email = ["alex@origo.no"]
10
+ s.homepage = ""
11
+ s.summary = s.description = %q{Multidb is an ActiveRecord extension for switching between multiple database connections, such as master/slave setups.}
12
+
13
+ s.rubyforge_project = "ar-multidb"
14
+
15
+ s.files = `git ls-files`.split("\n")
16
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
17
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
18
+ s.require_paths = ["lib"]
19
+
20
+ s.add_runtime_dependency 'activesupport', '>= 2.3'
21
+ s.add_runtime_dependency 'activerecord', '>= 2.3'
22
+ end
data/init.rb ADDED
@@ -0,0 +1,2 @@
1
+ # Init file for running as Rails plugin.
2
+ require 'multidb'
@@ -1,3 +1,6 @@
1
+ require 'active_record'
2
+ require 'active_support/core_ext/module/delegation'
3
+
1
4
  require 'multidb/configuration'
2
5
  require 'multidb/model_extensions'
3
6
  require 'multidb/balancer'
@@ -30,24 +30,26 @@ module Multidb
30
30
  def initialize(configuration)
31
31
  @candidates = {}.with_indifferent_access
32
32
  @configuration = configuration
33
- (@configuration.raw_configuration[:databases] || {}).each_pair do |name, config|
34
- configs = config.is_a?(Array) ? config : [config]
35
- configs.each do |config|
36
- candidate = Candidate.new(@configuration.default_adapter.merge(config))
37
- @candidates[name] ||= []
38
- @candidates[name].push(candidate)
33
+ if @configuration
34
+ (@configuration.raw_configuration[:databases] || {}).each_pair do |name, config|
35
+ configs = config.is_a?(Array) ? config : [config]
36
+ configs.each do |config|
37
+ candidate = Candidate.new(@configuration.default_adapter.merge(config))
38
+ @candidates[name] ||= []
39
+ @candidates[name].push(candidate)
40
+ end
41
+ end
42
+ if @configuration.raw_configuration.include?(:fallback)
43
+ @fallback = @configuration.raw_configuration[:fallback]
44
+ elsif defined?(Rails)
45
+ @fallback = %w(development test).include?(Rails.env)
46
+ else
47
+ @fallback = false
48
+ end
49
+ @default_candidate = Candidate.new(@configuration.default_pool)
50
+ unless @candidates.include?(:default)
51
+ @candidates[:default] = [@default_candidate]
39
52
  end
40
- end
41
- if @configuration.raw_configuration.include?(:fallback)
42
- @fallback = @configuration.raw_configuration[:fallback]
43
- elsif defined?(Rails)
44
- @fallback = %w(development test).include?(Rails.env)
45
- else
46
- @fallback = false
47
- end
48
- @default_candidate = Candidate.new(@configuration.default_pool)
49
- unless @candidates.include?(:default)
50
- @candidates[:default] = [@default_candidate]
51
53
  end
52
54
  end
53
55
 
@@ -3,10 +3,14 @@ module Multidb
3
3
  class << self
4
4
 
5
5
  def configure!
6
- activerecord_config = ActiveRecord::Base.connection_pool.connection.instance_variable_get(:@config).dup.with_indifferent_access
7
- default_adapter, configuration_hash = activerecord_config, activerecord_config.delete(:multidb)
8
- configuration_hash ||= {}
9
- @configuration = Configuration.new(default_adapter, configuration_hash)
6
+ connection_pool = ActiveRecord::Base.connection_pool
7
+ if connection_pool
8
+ connection = connection_pool.connection
9
+ activerecord_config = connection.instance_variable_get(:@config).dup.with_indifferent_access
10
+ default_adapter, configuration_hash = activerecord_config, activerecord_config.delete(:multidb)
11
+ configuration_hash ||= {}
12
+ @configuration = Configuration.new(default_adapter, configuration_hash)
13
+ end
10
14
  end
11
15
 
12
16
  attr_reader :configuration
@@ -0,0 +1,3 @@
1
+ module Multidb
2
+ VERSION = '0.1.5'
3
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ar-multidb
3
3
  version: !ruby/object:Gem::Version
4
- hash: 19
4
+ hash: 17
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 4
10
- version: 0.1.4
9
+ - 5
10
+ version: 0.1.5
11
11
  platform: ruby
12
12
  authors:
13
13
  - Alexander Staubo
@@ -15,89 +15,62 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-05-20 00:00:00 +02:00
19
- default_executable:
18
+ date: 2012-02-07 00:00:00 Z
20
19
  dependencies:
21
20
  - !ruby/object:Gem::Dependency
22
- type: :runtime
21
+ name: activesupport
22
+ prerelease: false
23
23
  requirement: &id001 !ruby/object:Gem::Requirement
24
24
  none: false
25
25
  requirements:
26
26
  - - ">="
27
27
  - !ruby/object:Gem::Version
28
- hash: 7
28
+ hash: 5
29
29
  segments:
30
30
  - 2
31
- - 2
32
- version: "2.2"
33
- name: activesupport
31
+ - 3
32
+ version: "2.3"
33
+ type: :runtime
34
34
  version_requirements: *id001
35
- prerelease: false
36
35
  - !ruby/object:Gem::Dependency
37
- type: :runtime
38
- requirement: &id002 !ruby/object:Gem::Requirement
39
- none: false
40
- requirements:
41
- - - ">="
42
- - !ruby/object:Gem::Version
43
- hash: 7
44
- segments:
45
- - 2
46
- - 2
47
- version: "2.2"
48
36
  name: activerecord
49
- version_requirements: *id002
50
37
  prerelease: false
51
- - !ruby/object:Gem::Dependency
52
- type: :runtime
53
- requirement: &id003 !ruby/object:Gem::Requirement
38
+ requirement: &id002 !ruby/object:Gem::Requirement
54
39
  none: false
55
40
  requirements:
56
41
  - - ">="
57
42
  - !ruby/object:Gem::Version
58
- hash: 7
43
+ hash: 5
59
44
  segments:
60
45
  - 2
61
- - 2
62
- version: "2.2"
63
- name: activesupport
64
- version_requirements: *id003
65
- prerelease: false
66
- - !ruby/object:Gem::Dependency
46
+ - 3
47
+ version: "2.3"
67
48
  type: :runtime
68
- requirement: &id004 !ruby/object:Gem::Requirement
69
- none: false
70
- requirements:
71
- - - ">="
72
- - !ruby/object:Gem::Version
73
- hash: 7
74
- segments:
75
- - 2
76
- - 2
77
- version: "2.2"
78
- name: activerecord
79
- version_requirements: *id004
80
- prerelease: false
49
+ version_requirements: *id002
81
50
  description: Multidb is an ActiveRecord extension for switching between multiple database connections, such as master/slave setups.
82
- email: alex@bengler.no
51
+ email:
52
+ - alex@origo.no
83
53
  executables: []
84
54
 
85
55
  extensions: []
86
56
 
87
- extra_rdoc_files:
88
- - LICENSE
89
- - README.markdown
57
+ extra_rdoc_files: []
58
+
90
59
  files:
60
+ - .gitignore
61
+ - Gemfile
91
62
  - LICENSE
92
63
  - README.markdown
93
- - VERSION
64
+ - Rakefile
65
+ - ar-multidb.gemspec
66
+ - init.rb
94
67
  - lib/ar-multidb.rb
95
68
  - lib/multidb.rb
96
69
  - lib/multidb/balancer.rb
97
70
  - lib/multidb/configuration.rb
98
71
  - lib/multidb/model_extensions.rb
99
- has_rdoc: true
100
- homepage: http://github.com/alexstaubo/multidb
72
+ - lib/multidb/version.rb
73
+ homepage: ""
101
74
  licenses: []
102
75
 
103
76
  post_install_message:
@@ -125,8 +98,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
125
98
  version: "0"
126
99
  requirements: []
127
100
 
128
- rubyforge_project:
129
- rubygems_version: 1.5.0
101
+ rubyforge_project: ar-multidb
102
+ rubygems_version: 1.8.6
130
103
  signing_key:
131
104
  specification_version: 3
132
105
  summary: Multidb is an ActiveRecord extension for switching between multiple database connections, such as master/slave setups.
data/VERSION DELETED
@@ -1 +0,0 @@
1
- 0.1.4