rock_config 0.0.0 → 0.0.1
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/Rakefile +5 -0
- data/lib/rock_config/config.rb +21 -0
- data/lib/rock_config/configuration.rb +3 -3
- data/lib/rock_config/manager.rb +2 -5
- data/lib/rock_config/scanner.rb +5 -12
- data/lib/rock_config/version.rb +1 -1
- data/lib/rock_config/yaml_loader.rb +31 -0
- data/lib/rock_config.rb +14 -4
- data/spec/config_spec.rb +54 -0
- data/spec/configuration_spec.rb +7 -5
- data/spec/fixtures/database_invalid.yml +8 -0
- data/spec/manager_spec.rb +15 -20
- data/spec/rock_config_spec.rb +14 -0
- data/spec/scanner_spec.rb +12 -9
- data/spec/yaml_loader_spec.rb +23 -0
- metadata +12 -2
data/Rakefile
CHANGED
@@ -0,0 +1,21 @@
|
|
1
|
+
module RockConfig
|
2
|
+
class Config
|
3
|
+
def initialize(hash)
|
4
|
+
@hash = hash
|
5
|
+
end
|
6
|
+
|
7
|
+
def method_missing(*args, &block)
|
8
|
+
if value = @hash[args.first.to_s]
|
9
|
+
if Hash === value
|
10
|
+
Config.new(value)
|
11
|
+
else
|
12
|
+
value
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def raw
|
18
|
+
@hash.dup
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -1,10 +1,10 @@
|
|
1
1
|
module RockConfig
|
2
2
|
class Configuration
|
3
|
-
attr_accessor :scanned_directories
|
3
|
+
attr_accessor :scanned_directories, :config_loaders
|
4
4
|
|
5
5
|
def initialize
|
6
|
-
|
7
|
-
@
|
6
|
+
@scanned_directories = []
|
7
|
+
@config_loaders = []
|
8
8
|
end
|
9
9
|
end
|
10
10
|
end
|
data/lib/rock_config/manager.rb
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
require "rock_config/scanner"
|
2
|
-
|
3
1
|
module RockConfig
|
4
2
|
class Manager
|
5
3
|
def initialize(configuration, scanner = Scanner)
|
@@ -9,9 +7,7 @@ module RockConfig
|
|
9
7
|
|
10
8
|
def fetch(config_name, environment)
|
11
9
|
if config = @configs[config_name]
|
12
|
-
config.
|
13
|
-
else
|
14
|
-
yield if block_given?
|
10
|
+
config.send environment
|
15
11
|
end
|
16
12
|
end
|
17
13
|
|
@@ -22,5 +18,6 @@ module RockConfig
|
|
22
18
|
end
|
23
19
|
end
|
24
20
|
end
|
21
|
+
|
25
22
|
end
|
26
23
|
end
|
data/lib/rock_config/scanner.rb
CHANGED
@@ -5,22 +5,15 @@ module RockConfig
|
|
5
5
|
end
|
6
6
|
|
7
7
|
def find(file_name)
|
8
|
-
full_file_name = resolve_full_file_name(file_name)
|
9
|
-
|
10
8
|
@configuration.scanned_directories.each do |directory|
|
11
|
-
|
12
|
-
|
13
|
-
|
9
|
+
@configuration.config_loaders.each do |loader|
|
10
|
+
if config = loader.find_at(directory, file_name)
|
11
|
+
return config
|
12
|
+
end
|
14
13
|
end
|
15
14
|
end
|
16
15
|
|
17
|
-
|
18
|
-
end
|
19
|
-
|
20
|
-
private
|
21
|
-
|
22
|
-
def resolve_full_file_name(file_name)
|
23
|
-
"#{file_name}.yml"
|
16
|
+
raise ConfigNotFound, "Config not found"
|
24
17
|
end
|
25
18
|
end
|
26
19
|
end
|
data/lib/rock_config/version.rb
CHANGED
@@ -0,0 +1,31 @@
|
|
1
|
+
require "yaml"
|
2
|
+
|
3
|
+
module RockConfig
|
4
|
+
class YamlLoader
|
5
|
+
def find_at(directory, file_name)
|
6
|
+
path = full_path(directory, file_name)
|
7
|
+
|
8
|
+
if readable?(path)
|
9
|
+
return Config.new(load_yaml_from(path))
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def full_path(directory, file_name)
|
16
|
+
File.join(directory, full_name(file_name))
|
17
|
+
end
|
18
|
+
|
19
|
+
def full_name(file_name)
|
20
|
+
"#{file_name}.yml"
|
21
|
+
end
|
22
|
+
|
23
|
+
def readable?(path)
|
24
|
+
File.exists?(path) && File.readable?(path)
|
25
|
+
end
|
26
|
+
|
27
|
+
def load_yaml_from(path)
|
28
|
+
YAML.load_file(path)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
data/lib/rock_config.rb
CHANGED
@@ -2,15 +2,16 @@ require "rock_config/version"
|
|
2
2
|
require "rock_config/environment_detector"
|
3
3
|
require "rock_config/configuration"
|
4
4
|
require "rock_config/manager"
|
5
|
+
require "rock_config/scanner"
|
6
|
+
require "rock_config/yaml_loader"
|
7
|
+
require "rock_config/config"
|
5
8
|
|
6
9
|
module RockConfig
|
7
10
|
class ConfigNotFound < Exception; end
|
8
11
|
|
9
12
|
class << self
|
10
13
|
def for(config_name, environment = detect_environment)
|
11
|
-
manager.fetch(config_name, environment)
|
12
|
-
raise ConfigNotFound, "Config not found"
|
13
|
-
end
|
14
|
+
manager.fetch(config_name, environment)
|
14
15
|
end
|
15
16
|
|
16
17
|
def configure
|
@@ -28,7 +29,16 @@ module RockConfig
|
|
28
29
|
end
|
29
30
|
|
30
31
|
def configuration
|
31
|
-
@configuration ||=
|
32
|
+
@configuration ||= initialize_configuration
|
33
|
+
end
|
34
|
+
|
35
|
+
def initialize_configuration
|
36
|
+
configuration = Configuration.new
|
37
|
+
|
38
|
+
configuration.scanned_directories << File.join(Dir.pwd, "config")
|
39
|
+
configuration.config_loaders << YamlLoader.new
|
40
|
+
|
41
|
+
configuration
|
32
42
|
end
|
33
43
|
|
34
44
|
def manager
|
data/spec/config_spec.rb
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
module RockConfig
|
4
|
+
describe Config do
|
5
|
+
it "accepts a hash" do
|
6
|
+
hash = {foo: "bar"}
|
7
|
+
|
8
|
+
config = Config.new(hash)
|
9
|
+
config.raw.should eq(hash)
|
10
|
+
end
|
11
|
+
|
12
|
+
it "returns config for given environment" do
|
13
|
+
subhash_dev = {"a" => 123}
|
14
|
+
subhash_prod = {"a" => 321}
|
15
|
+
hash = {
|
16
|
+
"development" => subhash_dev,
|
17
|
+
"production" => subhash_prod
|
18
|
+
}
|
19
|
+
|
20
|
+
config = Config.new(hash)
|
21
|
+
config.development.raw.should eq(subhash_dev)
|
22
|
+
config.production.raw.should eq(subhash_prod)
|
23
|
+
end
|
24
|
+
|
25
|
+
it "returns nil when asked for non existing environment" do
|
26
|
+
config = Config.new({})
|
27
|
+
config.for_environment("I do not exist").should be_nil
|
28
|
+
end
|
29
|
+
|
30
|
+
it "returns correct values when asked for" do
|
31
|
+
hash = {
|
32
|
+
"development" => {
|
33
|
+
"host" => "localhost"
|
34
|
+
}
|
35
|
+
}
|
36
|
+
|
37
|
+
config = Config.new(hash)
|
38
|
+
config.development.host.should eq("localhost")
|
39
|
+
end
|
40
|
+
|
41
|
+
it "returns correct nested values when asked for" do
|
42
|
+
hash = {
|
43
|
+
"development" => {
|
44
|
+
"elastic" => {
|
45
|
+
"host" => "localhost"
|
46
|
+
}
|
47
|
+
}
|
48
|
+
}
|
49
|
+
|
50
|
+
config = Config.new(hash)
|
51
|
+
config.development.elastic.host.should eq("localhost")
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
data/spec/configuration_spec.rb
CHANGED
@@ -2,16 +2,18 @@ require "spec_helper"
|
|
2
2
|
|
3
3
|
module RockConfig
|
4
4
|
describe Configuration do
|
5
|
-
it "has default scanned directory" do
|
6
|
-
configuration = Configuration.new
|
7
|
-
configuration.scanned_directories.count.should eq 1
|
8
|
-
end
|
9
|
-
|
10
5
|
it "accepts scanned directories" do
|
11
6
|
configuration = Configuration.new
|
12
7
|
|
13
8
|
configuration.scanned_directories << "/custom/path"
|
14
9
|
configuration.scanned_directories.should include "/custom/path"
|
15
10
|
end
|
11
|
+
|
12
|
+
it "accepts config loaders" do
|
13
|
+
configuration = Configuration.new
|
14
|
+
|
15
|
+
configuration.config_loaders << "duck"
|
16
|
+
configuration.config_loaders.should include "duck"
|
17
|
+
end
|
16
18
|
end
|
17
19
|
end
|
data/spec/manager_spec.rb
CHANGED
@@ -2,35 +2,30 @@ require "spec_helper"
|
|
2
2
|
|
3
3
|
module RockConfig
|
4
4
|
describe Manager do
|
5
|
-
|
6
|
-
@configuration = Configuration.new
|
7
|
-
end
|
5
|
+
let(:configuration) { Configuration.new }
|
8
6
|
|
9
7
|
it "returns config if found" do
|
10
|
-
result =
|
11
|
-
result.should_receive(:
|
8
|
+
result = mock("Config")
|
9
|
+
result.should_receive(:send).with("development") { "yay" }
|
12
10
|
|
13
|
-
scanner =
|
14
|
-
scanner.should_receive(:new).with(
|
15
|
-
scanner.should_receive(:find).with("sample")
|
11
|
+
scanner = mock("Scanner")
|
12
|
+
scanner.should_receive(:new) .with(configuration) { scanner }
|
13
|
+
scanner.should_receive(:find).with("sample") { result }
|
16
14
|
|
17
|
-
manager = Manager.new(
|
15
|
+
manager = Manager.new(configuration, scanner)
|
18
16
|
manager_result = manager.fetch "sample", "development"
|
19
17
|
|
20
18
|
manager_result.should eq("yay")
|
21
19
|
end
|
22
20
|
|
23
|
-
it "
|
24
|
-
scanner =
|
25
|
-
scanner.should_receive(:new).with(
|
26
|
-
scanner.should_receive(:find).with("sample")
|
27
|
-
|
28
|
-
manager = Manager.new(
|
29
|
-
|
30
|
-
|
31
|
-
raise Exception
|
32
|
-
end
|
33
|
-
end.should raise_error(Exception)
|
21
|
+
it "returns nul if config not found" do
|
22
|
+
scanner = mock("Scanner")
|
23
|
+
scanner.should_receive(:new) .with(configuration) { scanner }
|
24
|
+
scanner.should_receive(:find).with("sample") { nil }
|
25
|
+
|
26
|
+
manager = Manager.new(configuration, scanner)
|
27
|
+
|
28
|
+
manager.fetch("sample", "development").should be_nil
|
34
29
|
end
|
35
30
|
end
|
36
31
|
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
module RockConfig
|
4
|
+
describe RockConfig do
|
5
|
+
it "it loads valid configs" do
|
6
|
+
RockConfig.configure do |config|
|
7
|
+
config.scanned_directories << File.join(Dir.pwd, "spec", "fixtures")
|
8
|
+
config.config_loaders << YamlLoader.new
|
9
|
+
end
|
10
|
+
|
11
|
+
RockConfig.for("database", "development").magic_number.should eq(213)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
data/spec/scanner_spec.rb
CHANGED
@@ -2,21 +2,24 @@ require "spec_helper"
|
|
2
2
|
|
3
3
|
module RockConfig
|
4
4
|
describe Scanner do
|
5
|
-
|
5
|
+
let(:configuration) do
|
6
6
|
configuration = Configuration.new
|
7
|
-
|
7
|
+
configuration.scanned_directories << File.join(Dir.pwd, "config")
|
8
|
+
configuration.config_loaders << YamlLoader.new
|
9
|
+
configuration
|
10
|
+
end
|
8
11
|
|
9
|
-
|
12
|
+
let(:scanner) { Scanner.new(configuration) }
|
13
|
+
let(:fixtures_path) { File.join(Dir.pwd, "spec", "fixtures") }
|
14
|
+
|
15
|
+
it "finds nothing when the target doesnt exist" do
|
16
|
+
expect do
|
17
|
+
scanner.find("database")
|
18
|
+
end.to raise_error(ConfigNotFound)
|
10
19
|
end
|
11
20
|
|
12
21
|
it "scans additional directories" do
|
13
|
-
fixtures_path = File.join(Dir.pwd, "spec", "fixtures")
|
14
|
-
|
15
|
-
configuration = Configuration.new
|
16
22
|
configuration.scanned_directories << fixtures_path
|
17
|
-
|
18
|
-
scanner = Scanner.new(configuration)
|
19
|
-
|
20
23
|
scanner.find("database").should_not be_nil
|
21
24
|
end
|
22
25
|
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
module RockConfig
|
4
|
+
describe YamlLoader do
|
5
|
+
it "loads config when given valid path and filename" do
|
6
|
+
directory = File.join(Dir.pwd, "spec", "fixtures")
|
7
|
+
|
8
|
+
loader = YamlLoader.new
|
9
|
+
config = loader.find_at(directory, "database")
|
10
|
+
|
11
|
+
config.should_not be_nil
|
12
|
+
end
|
13
|
+
|
14
|
+
it "throws exception when given valid path to an invalid file" do
|
15
|
+
directory = File.join(Dir.pwd, "spec", "fixtures")
|
16
|
+
loader = YamlLoader.new
|
17
|
+
|
18
|
+
expect do
|
19
|
+
config = loader.find_at(directory, "database_invalid")
|
20
|
+
end.to raise_error(Psych::SyntaxError)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rock_config
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-11-02 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
@@ -73,18 +73,24 @@ files:
|
|
73
73
|
- README.md
|
74
74
|
- Rakefile
|
75
75
|
- lib/rock_config.rb
|
76
|
+
- lib/rock_config/config.rb
|
76
77
|
- lib/rock_config/configuration.rb
|
77
78
|
- lib/rock_config/environment_detector.rb
|
78
79
|
- lib/rock_config/manager.rb
|
79
80
|
- lib/rock_config/scanner.rb
|
80
81
|
- lib/rock_config/version.rb
|
82
|
+
- lib/rock_config/yaml_loader.rb
|
81
83
|
- rock_config.gemspec
|
84
|
+
- spec/config_spec.rb
|
82
85
|
- spec/configuration_spec.rb
|
83
86
|
- spec/environment_detector_spec.rb
|
84
87
|
- spec/fixtures/database.yml
|
88
|
+
- spec/fixtures/database_invalid.yml
|
85
89
|
- spec/manager_spec.rb
|
90
|
+
- spec/rock_config_spec.rb
|
86
91
|
- spec/scanner_spec.rb
|
87
92
|
- spec/spec_helper.rb
|
93
|
+
- spec/yaml_loader_spec.rb
|
88
94
|
homepage: ''
|
89
95
|
licenses: []
|
90
96
|
post_install_message:
|
@@ -110,10 +116,14 @@ signing_key:
|
|
110
116
|
specification_version: 3
|
111
117
|
summary: RockConfig allows you to use custom config files easily.
|
112
118
|
test_files:
|
119
|
+
- spec/config_spec.rb
|
113
120
|
- spec/configuration_spec.rb
|
114
121
|
- spec/environment_detector_spec.rb
|
115
122
|
- spec/fixtures/database.yml
|
123
|
+
- spec/fixtures/database_invalid.yml
|
116
124
|
- spec/manager_spec.rb
|
125
|
+
- spec/rock_config_spec.rb
|
117
126
|
- spec/scanner_spec.rb
|
118
127
|
- spec/spec_helper.rb
|
128
|
+
- spec/yaml_loader_spec.rb
|
119
129
|
has_rdoc:
|