multi_config 0.0.1 → 0.1.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.
- data/.gitignore +1 -1
- data/lib/multi_config/orms/active_record.rb +14 -13
- data/lib/multi_config/version.rb +1 -1
- data/spec/active_record_spec.rb +1 -1
- data/spec/models/uses_other_yml_spec.rb +4 -0
- data/spec/multi_config_spec.rb +6 -5
- data/spec/support/config/database.yml +1 -1
- data/spec/support/config/other.yml +1 -1
- data/spec/support/config_helper.rb +1 -1
- metadata +4 -6
- data/spec/support/config/db +0 -0
data/.gitignore
CHANGED
@@ -3,7 +3,7 @@ module MultiConfig
|
|
3
3
|
module ActiveRecord
|
4
4
|
def self.included(mod)
|
5
5
|
mod.extend ClassMethods
|
6
|
-
mod.send(:class_variable_set, :'@@db_configs', [])
|
6
|
+
mod.send(:class_variable_set, :'@@db_configs', Hash.new { |h, k| h[k] = [] })
|
7
7
|
end
|
8
8
|
|
9
9
|
module ClassMethods
|
@@ -11,36 +11,37 @@ module MultiConfig
|
|
11
11
|
file_name += '.yml' unless File.extname(file_name).eql? '.yml'
|
12
12
|
unless file_name == 'database.yml'
|
13
13
|
namespace = File.basename(file_name, '.yml')
|
14
|
-
|
15
|
-
raise "Configuration for #{::Rails.env} environment not defined in #{
|
16
|
-
configurations.include? "#{namespace}_#{::Rails.env}"
|
14
|
+
add_db_config(file_name, namespace)
|
15
|
+
raise "Configuration for #{::Rails.env} environment not defined in #{Config.path file_name}" unless configurations.include? "#{namespace}_#{::Rails.env}"
|
17
16
|
establish_connection "#{namespace}_#{::Rails.env}"
|
18
17
|
end
|
19
18
|
end
|
20
19
|
|
21
20
|
private
|
22
|
-
|
23
|
-
def add_to_db_configs(file_name, namespace)
|
21
|
+
def add_db_config(file_name, namespace)
|
24
22
|
db_configs = class_variable_get(:'@@db_configs')
|
25
23
|
unless db_configs.include?(namespace)
|
26
|
-
configurations.merge!(
|
27
|
-
db_configs <<
|
24
|
+
configurations.merge!(Config.load(file_name, namespace))
|
25
|
+
db_configs[namespace] << name
|
28
26
|
end
|
29
27
|
end
|
28
|
+
end
|
30
29
|
|
31
|
-
|
30
|
+
module Config
|
31
|
+
def self.path(file_name)
|
32
32
|
File.join(Rails.root, 'config', file_name)
|
33
33
|
end
|
34
34
|
|
35
|
-
def
|
35
|
+
def self.load(file_name, namespace)
|
36
36
|
begin
|
37
|
-
|
37
|
+
require 'erb'
|
38
|
+
YAML.load(ERB.new(IO.read(path(file_name))).result).inject({}) do |hash, (k, v)|
|
38
39
|
hash["#{namespace}_#{k}"]=v
|
39
40
|
hash
|
40
41
|
end
|
41
42
|
rescue Exception => exc
|
42
|
-
raise "File #{
|
43
|
-
raise "Invalid config file #{
|
43
|
+
raise "File #{path file_name} does not exist in config" unless File.exists?(path(file_name))
|
44
|
+
raise "Invalid config file #{path file_name}"
|
44
45
|
end
|
45
46
|
end
|
46
47
|
end
|
data/lib/multi_config/version.rb
CHANGED
data/spec/active_record_spec.rb
CHANGED
@@ -14,7 +14,7 @@ describe ActiveRecord::Base, "methods" do
|
|
14
14
|
end
|
15
15
|
|
16
16
|
it "should have @@db_config class variable set" do
|
17
|
-
ActiveRecord::Base.send(:class_variable_get, '@@db_configs').should ==
|
17
|
+
ActiveRecord::Base.send(:class_variable_get, '@@db_configs').should == {}
|
18
18
|
end
|
19
19
|
|
20
20
|
end
|
@@ -9,4 +9,8 @@ describe UsesOtherYml do
|
|
9
9
|
it "should be connected to the default database" do
|
10
10
|
UsesOtherYml.connection.instance_variable_get(:@config)[:database].split('/').last.should == "other_db"
|
11
11
|
end
|
12
|
+
|
13
|
+
it "the @@db_configs should have entry for this class" do
|
14
|
+
UsesOtherYml.send(:class_variable_get,:'@@db_configs').should == {"other" => ["UsesOtherYml"]}
|
15
|
+
end
|
12
16
|
end
|
data/spec/multi_config_spec.rb
CHANGED
@@ -5,6 +5,7 @@ describe MultiConfig::ORMs::ActiveRecord do
|
|
5
5
|
let!(:other_config){ load_namespaced_config('other.yml') }
|
6
6
|
before(:each) do
|
7
7
|
@test_class = Class.new
|
8
|
+
@test_class.stub_chain(:name).and_return('test_class')
|
8
9
|
@test_class.stub(:configurations).and_return({})
|
9
10
|
@test_class.stub(:establish_connection)
|
10
11
|
@test_class.send(:include, MultiConfig::ORMs::ActiveRecord)
|
@@ -32,11 +33,11 @@ describe MultiConfig::ORMs::ActiveRecord do
|
|
32
33
|
|
33
34
|
describe "should modify class variable @@db_configs" do
|
34
35
|
before do
|
35
|
-
test_class.send(:class_variable_get, '@@db_configs').should ==
|
36
|
+
test_class.send(:class_variable_get, '@@db_configs').should == {}
|
36
37
|
test_class.config_file = 'other'
|
37
38
|
end
|
38
39
|
subject {test_class.send(:class_variable_get, '@@db_configs')}
|
39
|
-
it{should == [
|
40
|
+
it{should == {"other" => ["test_class"]}}
|
40
41
|
end
|
41
42
|
|
42
43
|
describe "should modify .configurations" do
|
@@ -86,9 +87,9 @@ describe MultiConfig::ORMs::ActiveRecord do
|
|
86
87
|
describe "should not do anything if database.yml specified" do
|
87
88
|
before do
|
88
89
|
test_class.should_not_receive(:establish_connection)
|
89
|
-
test_class.should_not_receive(:
|
90
|
-
|
91
|
-
|
90
|
+
test_class.should_not_receive(:add_db_config)
|
91
|
+
MultiConfig::ORMs::ActiveRecord::Config.should_not_receive(:path)
|
92
|
+
MultiConfig::ORMs::ActiveRecord::Config.should_not_receive(:load)
|
92
93
|
expect {
|
93
94
|
test_class.config_file = 'database'
|
94
95
|
}.not_to change(test_class, :configurations)
|
@@ -1,5 +1,5 @@
|
|
1
1
|
def load_namespaced_config(file)
|
2
2
|
namespace = File.basename(file, File.extname(file))
|
3
|
-
config = YAML.load(ERB.new(
|
3
|
+
config = YAML.load(ERB.new(IO.read(File.expand_path("../config/#{file}", __FILE__))).result)
|
4
4
|
config.inject({}){|h,(k,v)| h["#{namespace}_#{k}"]=v;h}
|
5
5
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: multi_config
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 27
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
- 0
|
9
8
|
- 1
|
10
|
-
|
9
|
+
- 0
|
10
|
+
version: 0.1.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Shadab Ahmed
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2012-09-
|
18
|
+
date: 2012-09-09 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
name: bundler
|
@@ -134,7 +134,6 @@ files:
|
|
134
134
|
- spec/spec_helper.rb
|
135
135
|
- spec/support/active_record_config.rb
|
136
136
|
- spec/support/config/database.yml
|
137
|
-
- spec/support/config/db
|
138
137
|
- spec/support/config/invalid.yml
|
139
138
|
- spec/support/config/other.yml
|
140
139
|
- spec/support/config_helper.rb
|
@@ -181,7 +180,6 @@ test_files:
|
|
181
180
|
- spec/spec_helper.rb
|
182
181
|
- spec/support/active_record_config.rb
|
183
182
|
- spec/support/config/database.yml
|
184
|
-
- spec/support/config/db
|
185
183
|
- spec/support/config/invalid.yml
|
186
184
|
- spec/support/config/other.yml
|
187
185
|
- spec/support/config_helper.rb
|
data/spec/support/config/db
DELETED
File without changes
|