configue 0.1.0 → 0.1.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 86dd4fa550a529d4050ba85051d25b434c657dff
4
- data.tar.gz: 54fd3e9d60f20f95863df2431020dcdce4252222
3
+ metadata.gz: b2a6932c57f41d3a8e0face2437eb0ed9c6c9577
4
+ data.tar.gz: 4efa8934701bd705a9c79030782465f2a8a93813
5
5
  SHA512:
6
- metadata.gz: e2c90a3fd197642ee4fb7a92bfc307aa69b5a903135bb88a24e2ac9d487c0d3527367a5f840f12ff1774e4c60ab2e498bb710fca84a3ef81944ed53a97f09221
7
- data.tar.gz: 7bb08f81f3621dab09766199e4a00aa1b35d92792877eaa0dad6da686e7c2b74af9131aa6235fe8acdce0863bd5c913d3644c9f5b596cba7b7fb2a6b01dd358f
6
+ metadata.gz: 61a7c799b95237f0278b333a85fb460f17790106940145e22c8a34f3e26fe2a04c5cd62762bac6988a04ec716a06c3da21ed829d5ac747ecb3d8db6afb923674
7
+ data.tar.gz: d00f683e0554cde0dd4f43ce81f947a2133f96146d7fe8e6061017190feae6ad6aefd649620dd161b4b5b9856b477727d58e1c59730ada7800f205021155a05e
data/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  # Configue
2
2
  Configue is a configuration / settings solution that uses YAML files.
3
3
  It is almost a fork of SettingsLogic.
4
- Configue can read multiple YAML files and you can use big configration data
4
+ Configue can read multiple YAML files and you can use big configuration data
5
5
  simply.
6
6
 
7
7
  ## Installation
@@ -9,10 +9,91 @@ simply.
9
9
  gem install configue
10
10
  ```
11
11
 
12
- ## Usage
12
+ ## Basic Usage
13
13
  ### Define your class
14
14
  ```ruby
15
- class Conf < Configue::Container
16
- config_setting.source_dir "#{File.dirname(__FILE__)}/config"
15
+ class MyConf < Configue::Container
16
+ config.source_dir "#{File.dirname(__FILE__)}/config"
17
17
  end
18
18
  ```
19
+
20
+ ### Write your settings in YAML file
21
+ ```yaml
22
+ # config/accounts/admin_users.yml
23
+ config:
24
+ accounts:
25
+ admin_users:
26
+ - grumpy
27
+ - sneezy
28
+ ```
29
+
30
+ You can make multiple settings files.
31
+
32
+ ```yaml
33
+ # config/accounts/test_users.yml
34
+ config:
35
+ accounts:
36
+ test_users:
37
+ - sleepy
38
+ - dopey
39
+ ```
40
+
41
+ ### Access your settings
42
+ ```
43
+ >> MyConf.config.accounts.admin_users
44
+ => ["grumpy", "sneezy"]
45
+
46
+ >> MyConf.config.accounts.test_users
47
+ => ["sleepy", "dopey"]
48
+ ```
49
+
50
+ ## Other usage
51
+ ### namespace
52
+ You can specify `namespace` and `base_namespace`.
53
+
54
+ When you write settings as follows:
55
+ ```yaml
56
+ # config/settings/base.yml
57
+ base:
58
+ foo:
59
+ baa:
60
+ - a
61
+ - b
62
+ - c
63
+ baz:
64
+ - one
65
+ - two
66
+ - three
67
+
68
+ # config/settings/dev.yml
69
+ dev:
70
+ foo:
71
+ baa:
72
+ - pee
73
+ - kaa
74
+ - boo
75
+
76
+ # config/settings/test.yml
77
+ test:
78
+ foo:
79
+ baa:
80
+ - boo
81
+ - foo
82
+ - woo
83
+ ```
84
+ and define a class for the settings
85
+ ```ruby
86
+ class MyConf < Configue::Container
87
+ config.source_dir "#{File.dirname(__FILE__)}/config/settings"
88
+ config.base_namespace :base
89
+ config.namespace :test
90
+ end
91
+ ```
92
+ you can access it in the following manner:
93
+ ```
94
+ >> MyConf.foo.baa
95
+ => ["boo", "foo", "woo"]
96
+
97
+ >> MyConf.foo.baz
98
+ => ["one", "two", "three"]
99
+ ```
data/configue.gemspec CHANGED
@@ -12,7 +12,7 @@ Gem::Specification.new do |s|
12
12
  s.files = `git ls-files`.split("\n")
13
13
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
14
14
  s.require_paths = ["lib"]
15
- s.version = "0.1.0"
15
+ s.version = "0.1.1"
16
16
  s.license = "MIT"
17
17
 
18
18
  s.add_development_dependency 'rspec'
@@ -1,19 +1,39 @@
1
1
  # coding: utf-8
2
2
 
3
+ require "forwardable"
4
+ require "configue/criteria"
5
+
3
6
  module Configue
4
7
  class Container
8
+ extend Forwardable
9
+
10
+ def_delegators :@node, :keys, :key?, :has_key?, :[]
11
+
12
+ def initialize(hash)
13
+ @node = hash
14
+ end
15
+
16
+ def query(key=nil)
17
+ q = Criteria.new(@node)
18
+ q = key.split('.').each.inject(q) {|c, k| c[k] } if key
19
+ q
20
+ end
21
+
5
22
  class << self
6
- def config_setting
23
+ def config
7
24
  @setting ||= Setting.new(self)
8
25
  end
26
+ alias_method :config_setting, :config
9
27
 
10
- def [](*args)
11
- key = args[0].to_s
12
- @setting.hash[key]
28
+ private
29
+ def method_missing(name, *args, &block)
30
+ @instance ||= new(@setting.load_source)
31
+ if @instance.key?(name)
32
+ @instance[name]
33
+ else
34
+ @instance.__send__(name, *args, &block)
35
+ end
13
36
  end
14
-
15
- def key?(key); @setting.hash.key?(key.to_s); end
16
- alias_method :has_key?, :key?
17
37
  end
18
38
  end
19
39
  end
@@ -0,0 +1,29 @@
1
+ # coding: utf-8
2
+
3
+ module Configue
4
+ class Criteria
5
+ def initialize(hash, *path)
6
+ @hash = hash
7
+ @path = path
8
+ end
9
+
10
+ def [](key)
11
+ self.class.new(@hash, *@path, key.to_s)
12
+ end
13
+
14
+ def retrieve
15
+ @path.each.inject(@hash) do |h, key|
16
+ return nil unless h.is_a?(Hash) and h.has_key?(key)
17
+ h[key]
18
+ end
19
+ end
20
+
21
+ def exist?
22
+ @path.each.inject(@hash) do |h, key|
23
+ return false unless h.is_a?(Hash) and h.has_key?(key)
24
+ h[key]
25
+ end
26
+ true
27
+ end
28
+ end
29
+ end
@@ -3,14 +3,17 @@
3
3
  module Configue
4
4
  class InnerHash < Hash
5
5
  def initialize(source_hash=nil)
6
- if source_hash
7
- deep_update(source_hash)
6
+ deep_merge!(source_hash) if source_hash
7
+ end
8
8
 
9
- sig = class << self; self; end
10
- source_hash.keys.each do |k|
11
- sig.__send__(:define_method, k, ->{ self[k] })
12
- end
9
+ def deep_merge!(other)
10
+ deep_update(other)
11
+
12
+ sig = class << self; self; end
13
+ other.keys.each do |k|
14
+ sig.__send__(:define_method, k, ->{ self[k] })
13
15
  end
16
+ self
14
17
  end
15
18
 
16
19
  def fetch(key, *args); super(key.to_s, *args); end
@@ -1,25 +1,82 @@
1
1
  # coding: utf-8
2
2
 
3
+ require "configue/yaml_loader"
4
+
3
5
  module Configue
4
6
  class Setting
5
7
  def initialize(owner_class)
6
8
  @owner_class = owner_class
9
+ @loader = YamlLoader.new
10
+ end
11
+
12
+ def base_namespace(key=nil)
13
+ @base_namespace = key if key
14
+ @base_namespace
15
+ end
16
+
17
+ def base_namespace=(key)
18
+ base_namespace(key)
7
19
  end
8
20
 
9
- def source_dir(dir)
10
- @hash ||= InnerHash.new
11
- Dir.glob("#{dir}/**/*.yml") do |filenm|
12
- h = YAML.load_file(filenm)
13
- @hash.__send__(:deep_update, h)
21
+ def namespace(key=nil)
22
+ @namespace = key if key
23
+ @namespace
24
+ end
25
+
26
+ def namespace=(key)
27
+ namespace(key)
28
+ end
29
+
30
+ def source_dir(*dirs)
31
+ @source_dirs ||= []
32
+ @source_dirs += dirs unless dirs.empty?
33
+ @source_dirs
34
+ end
14
35
 
15
- sig = class << @owner_class; self; end
16
- h.keys.each do |k|
17
- sig.__send__(:define_method, k, ->{ self[k] })
36
+ def source_dir=(dir)
37
+ if dir.is_a?(Array)
38
+ source_dir(*dir)
39
+ else
40
+ source_dir(dir)
41
+ end
42
+ end
43
+
44
+ def load_source
45
+ hash = load_sources
46
+
47
+ space = namespace.to_s
48
+ unless space.empty?
49
+ base = base_namespace.to_s
50
+ result = InnerHash.new
51
+ result.deep_merge!(hash[base]) if base_namespace
52
+ result.deep_merge!(hash[space]) if hash[space]
53
+ hash = result
54
+ end
55
+ hash
56
+ end
57
+
58
+ private
59
+ def load_sources
60
+ @source_dirs.each.inject(InnerHash.new) do |root, dir|
61
+ Dir.glob("#{dir}/**/*.#{@loader.extention}") do |path|
62
+ source = @loader.load(path)
63
+ if namespace and source[namespace.to_s]
64
+ namespaced_hash(root, source)
65
+ else
66
+ root.deep_merge!(source)
67
+ end
18
68
  end
69
+ root
19
70
  end
20
- @hash
21
71
  end
22
72
 
23
- attr_reader :hash
73
+ def namespaced_hash(root, hash)
74
+ base = base_namespace.to_s
75
+ space = namespace.to_s
76
+
77
+ root.deep_merge!(base => hash[base]) if ! base.empty? and hash[base]
78
+ root.deep_merge!(space => hash[space])
79
+ root
80
+ end
24
81
  end
25
82
  end
@@ -0,0 +1,14 @@
1
+ # coding: utf-8
2
+ require "yaml"
3
+
4
+ module Configue
5
+ class YamlLoader
6
+ def extention
7
+ "yml"
8
+ end
9
+
10
+ def load(path)
11
+ YAML.load_file(path)
12
+ end
13
+ end
14
+ end
data/lib/configue.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # coding: utf-8
2
- require "yaml"
3
2
  require "configue/setting"
4
3
  require "configue/container"
5
4
  require "configue/inner_hash"
5
+
@@ -0,0 +1,8 @@
1
+ # coding: utf-8
2
+ require "configue"
3
+
4
+ class BaseNamespaceConf < Configue::Container
5
+ config.source_dir "#{File.dirname(__FILE__)}/namespace"
6
+ config.base_namespace :base
7
+ config.namespace :test
8
+ end
@@ -0,0 +1,49 @@
1
+ # coding: utf-8
2
+ require File.expand_path("../../spec_helper", __FILE__)
3
+
4
+ describe "Configue::Container" do
5
+ context "when reading a single yaml file" do
6
+ require "#{File.dirname(__FILE__)}/../single_yaml_conf"
7
+
8
+ context "1st level" do
9
+ it_should_behave_like "an InnerHash instance",
10
+ SingleYamlConf,
11
+ {"foo" => ["baa"], "pee" => ["kaa0", "kaa1"]}
12
+ end
13
+
14
+ context "2nd level" do
15
+ it_should_behave_like "an InnerHash instance",
16
+ SingleYamlConf["foo"],
17
+ {"baa" => ["baz0", "baz1"]}
18
+ it_should_behave_like "an InnerHash instance",
19
+ SingleYamlConf["pee"],
20
+ {"kaa0" => ["boo"], "kaa1" => ["boo"]}
21
+ end
22
+ end
23
+
24
+ context "when reading multiple yaml files" do
25
+ require "#{File.dirname(__FILE__)}/../multiple_yaml_conf"
26
+
27
+ context "1st level" do
28
+ it_should_behave_like "an InnerHash instance",
29
+ MultipleYamlConf,
30
+ {"foo" => ["baa", "bar", "pee"]}
31
+ end
32
+
33
+ context "2nd level" do
34
+ it_should_behave_like "an InnerHash instance",
35
+ MultipleYamlConf["foo"],
36
+ {"baa" => ["baz"], "bar" => ["ding", "tick"], "pee" => ["kaa", "boo"]}
37
+ end
38
+
39
+ context "3rd level" do
40
+ it_should_behave_like "an InnerHash instance",
41
+ MultipleYamlConf["foo"]["baa"], {"baz" => nil}
42
+ it_should_behave_like "an InnerHash instance",
43
+ MultipleYamlConf["foo"]["pee"], {"kaa" => nil, "boo" => nil}
44
+ it_should_behave_like "an InnerHash instance",
45
+ MultipleYamlConf["foo"]["bar"],
46
+ {"ding" => ["dong", "dang"], "tick" => ["tack", "toe"]}
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,55 @@
1
+ # coding: utf-8
2
+ require File.expand_path("../../spec_helper", __FILE__)
3
+
4
+ describe "Configue::Container" do
5
+ context "when specifing 'namespace'" do
6
+ require "#{File.dirname(__FILE__)}/../namespace_conf"
7
+
8
+ context "1st level" do
9
+ it_should_behave_like "an InnerHash instance",
10
+ NamespaceConf,
11
+ {"pee" => ["kaa"]}
12
+ end
13
+
14
+ context "2nd level" do
15
+ it_should_behave_like "an InnerHash instance",
16
+ NamespaceConf["pee"],
17
+ {"kaa" => ["boo"]}
18
+ end
19
+
20
+ context "3rd level" do
21
+ it_should_behave_like "an InnerHash instance",
22
+ NamespaceConf["pee"]["kaa"],
23
+ {"boo" => ["foo", "baa", "baz"]}
24
+ end
25
+ end
26
+
27
+ context "when specifing 'namespace' and 'base_namespace'" do
28
+ require "#{File.dirname(__FILE__)}/../base_namespace_conf"
29
+
30
+ context "1st level" do
31
+ it_should_behave_like "an InnerHash instance",
32
+ BaseNamespaceConf,
33
+ {"pee" => ["kaa"]}
34
+ end
35
+
36
+ context "2nd level" do
37
+ it_should_behave_like "an InnerHash instance",
38
+ BaseNamespaceConf["pee"],
39
+ {"kaa" => ["boo"]}
40
+ end
41
+
42
+ context "3rd level" do
43
+ it_should_behave_like "an InnerHash instance",
44
+ BaseNamespaceConf["pee"]["kaa"],
45
+ {"boo" => ["foo", "baa", "baz", "boo", "woo", "poo"]}
46
+
47
+ it "returns values defined in namespaced hash" do
48
+ root = BaseNamespaceConf.query[:pee][:kaa][:boo]
49
+ expect(root[:foo].retrieve).to eq "one"
50
+ expect(root[:baa].retrieve).to eq "two"
51
+ expect(root[:baz].retrieve).to eq "three"
52
+ end
53
+ end
54
+ end
55
+ end
@@ -1,5 +1,5 @@
1
1
  # coding: utf-8
2
2
 
3
3
  class MultipleYamlConf < Configue::Container
4
- config_setting.source_dir "#{File.dirname(__FILE__)}/multiple_yaml"
4
+ config.source_dir "#{File.dirname(__FILE__)}/multiple_yaml"
5
5
  end
@@ -0,0 +1,10 @@
1
+ base:
2
+ pee:
3
+ kaa:
4
+ boo:
5
+ foo: a
6
+ baa: b
7
+ baz: c
8
+ boo: x
9
+ woo: y
10
+ poo: z
@@ -0,0 +1,7 @@
1
+ dev:
2
+ pee:
3
+ kaa:
4
+ boo:
5
+ foo: un
6
+ baa: deux
7
+ baz: trois
@@ -0,0 +1,7 @@
1
+ test:
2
+ pee:
3
+ kaa:
4
+ boo:
5
+ foo: one
6
+ baa: two
7
+ baz: three
@@ -0,0 +1,7 @@
1
+ # coding: utf-8
2
+ require "configue"
3
+
4
+ class NamespaceConf < Configue::Container
5
+ config.source_dir "#{File.dirname(__FILE__)}/namespace"
6
+ config.namespace :dev
7
+ end
@@ -1,5 +1,5 @@
1
1
  # coding: utf-8
2
2
 
3
3
  class SingleYamlConf < Configue::Container
4
- config_setting.source_dir "#{File.dirname(__FILE__)}/single_yaml"
4
+ config.source_dir "#{File.dirname(__FILE__)}/single_yaml"
5
5
  end
data/spec/spec_helper.rb CHANGED
@@ -2,5 +2,9 @@
2
2
  require 'rspec'
3
3
  require 'configue'
4
4
 
5
+ Dir.glob("#{File.dirname(__FILE__)}/support/**/*.rb") do |f|
6
+ require f
7
+ end
8
+
5
9
  RSpec.configure do |config|
6
10
  end
@@ -0,0 +1,91 @@
1
+ # coding: utf-8
2
+
3
+ shared_examples_for "an InnerHash instance" do |object, hash|
4
+ describe ".has_key?" do
5
+ context "when specifing the existing key names" do
6
+ it "returns true" do
7
+ hash.keys.each do |key|
8
+ expect(object).to have_key(key)
9
+ end
10
+ end
11
+ end
12
+
13
+ context "when specifing the non-existing key names" do
14
+ it "returns false" do
15
+ hash.keys.each do |key|
16
+ expect(object).not_to have_key(key.reverse)
17
+ end
18
+ end
19
+ end
20
+
21
+ context "when specifing the existing key names in symbol" do
22
+ it "returns true" do
23
+ hash.keys.each do |key|
24
+ expect(object).to have_key(key.to_sym)
25
+ end
26
+ end
27
+ end
28
+
29
+ context "when specifing the non-existing key names in symbol" do
30
+ it "returns false" do
31
+ hash.keys.each do |key|
32
+ expect(object).not_to have_key(key.reverse.to_sym)
33
+ end
34
+ end
35
+ end
36
+ end
37
+
38
+ describe ".[]" do
39
+ context "when specifing the existing key names" do
40
+ it "returns a Hash value" do
41
+ hash.each do |key, value|
42
+ expect(object[key]).to be_a(Hash) if value
43
+ end
44
+ end
45
+
46
+ describe "the Hash value" do
47
+ it "has keys described in the setting(s)" do
48
+ hash.each do |key, value|
49
+ expect(object[key].keys).to match_array(value) if value
50
+ end
51
+ end
52
+ end
53
+ end
54
+
55
+ context "when specifing the existing key names in symbol" do
56
+ it "returns a Hash value" do
57
+ hash.each do |key, value|
58
+ expect(object[key.to_sym]).to be_a(Hash) if value
59
+ end
60
+ end
61
+
62
+ describe "the Hash value" do
63
+ it "has keys described in the setting(s)" do
64
+ hash.each do |key, value|
65
+ expect(object[key.to_sym].keys).to match_array(value) if value
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end
71
+
72
+ describe ".(key_name)" do
73
+ context "when call methods which names are existing in the setting(s)" do
74
+ it "returns a Hash value" do
75
+ hash.each do |key, value|
76
+ expect(object.__send__(key)).to be_a(Hash) if value
77
+ end
78
+ end
79
+
80
+ describe "the Hash value" do
81
+ it "has keys described in the setting(s)" do
82
+ hash.each do |key, value|
83
+ next unless value
84
+ actual = object.__send__(key)
85
+ expect(actual.keys).to match_array(value)
86
+ end
87
+ end
88
+ end
89
+ end
90
+ end
91
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: configue
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - hosim
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-03-16 00:00:00.000000000 Z
11
+ date: 2014-03-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -37,17 +37,26 @@ files:
37
37
  - configue.gemspec
38
38
  - lib/configue.rb
39
39
  - lib/configue/container.rb
40
+ - lib/configue/criteria.rb
40
41
  - lib/configue/inner_hash.rb
41
42
  - lib/configue/setting.rb
42
- - spec/configue_spec.rb
43
+ - lib/configue/yaml_loader.rb
44
+ - spec/base_namespace_conf.rb
45
+ - spec/configue/basic_spec.rb
46
+ - spec/configue/namespace_spec.rb
43
47
  - spec/multiple_yaml/foo/baa.yml
44
48
  - spec/multiple_yaml/foo/bar/ding.yml
45
49
  - spec/multiple_yaml/foo/bar/tick.yml
46
50
  - spec/multiple_yaml/foo/pee.yml
47
51
  - spec/multiple_yaml_conf.rb
52
+ - spec/namespace/base/pee/kaa/conf.yml
53
+ - spec/namespace/dev/pee/kaa/conf.yml
54
+ - spec/namespace/test/pee/kaa/conf.yml
55
+ - spec/namespace_conf.rb
48
56
  - spec/single_yaml/conf.yml
49
57
  - spec/single_yaml_conf.rb
50
58
  - spec/spec_helper.rb
59
+ - spec/support/inner_hash.rb
51
60
  homepage: https://github.com/hosim/configue
52
61
  licenses:
53
62
  - MIT
@@ -73,12 +82,19 @@ signing_key:
73
82
  specification_version: 4
74
83
  summary: A simple configuration solution
75
84
  test_files:
76
- - spec/configue_spec.rb
85
+ - spec/base_namespace_conf.rb
86
+ - spec/configue/basic_spec.rb
87
+ - spec/configue/namespace_spec.rb
77
88
  - spec/multiple_yaml/foo/baa.yml
78
89
  - spec/multiple_yaml/foo/bar/ding.yml
79
90
  - spec/multiple_yaml/foo/bar/tick.yml
80
91
  - spec/multiple_yaml/foo/pee.yml
81
92
  - spec/multiple_yaml_conf.rb
93
+ - spec/namespace/base/pee/kaa/conf.yml
94
+ - spec/namespace/dev/pee/kaa/conf.yml
95
+ - spec/namespace/test/pee/kaa/conf.yml
96
+ - spec/namespace_conf.rb
82
97
  - spec/single_yaml/conf.yml
83
98
  - spec/single_yaml_conf.rb
84
99
  - spec/spec_helper.rb
100
+ - spec/support/inner_hash.rb
@@ -1,126 +0,0 @@
1
- # coding: utf-8
2
- require File.expand_path(File.dirname(__FILE__) + "/spec_helper")
3
-
4
- describe "Configue::Container" do
5
- context "when reading a single yaml file" do
6
- require "#{File.dirname(__FILE__)}/single_yaml_conf"
7
-
8
- describe ".[]" do
9
- context "when specifing the root keys in the yaml" do
10
- it "returns a Hash value" do
11
- expect(SingleYamlConf["foo"]).to be_a(Hash)
12
- expect(SingleYamlConf["pee"]).to be_a(Hash)
13
- end
14
-
15
- describe "the Hash value (2nd level)" do
16
- subject { SingleYamlConf["foo"] }
17
-
18
- it "has keys described in the yaml" do
19
- expect(subject).to have_key("baa")
20
- expect(subject.keys.size).to be 1
21
- end
22
-
23
- describe "the Hash value (3rd level)" do
24
- subject { SingleYamlConf["foo"]["baa"] }
25
-
26
- it "has keys described in the yaml" do
27
- expect(subject).to have_key("baz0")
28
- expect(subject).to have_key("baz1")
29
- expect(subject.keys.size).to be 2
30
- end
31
- end
32
- end
33
- end
34
-
35
- context "when specifing the existing root key in symbol" do
36
- it "returns a Hash value" do
37
- expect(SingleYamlConf[:foo]).to be_a(Hash)
38
- expect(SingleYamlConf[:pee]).to be_a(Hash)
39
- end
40
-
41
- describe "the Hash value" do
42
- subject { SingleYamlConf[:foo] }
43
-
44
- it "has a key described in the yaml" do
45
- expect(subject).to have_key(:baa)
46
- expect(subject.keys.size).to be 1
47
- end
48
-
49
- describe "the Hash value (3rd level)" do
50
- subject { SingleYamlConf[:foo][:baa] }
51
-
52
- it "has keys described in the yaml" do
53
- expect(subject).to have_key(:baz0)
54
- expect(subject).to have_key(:baz1)
55
- expect(subject.keys.size).to be 2
56
- end
57
- end
58
- end
59
- end
60
- end
61
-
62
- describe ".(key)" do
63
- context "when call a method which name is the root key in the yaml" do
64
- it "returns a Hash value" do
65
- expect(SingleYamlConf.foo).to be_a(Hash)
66
- expect(SingleYamlConf.pee).to be_a(Hash)
67
- end
68
-
69
- describe "the Hash value (2nd level)" do
70
- subject { SingleYamlConf.foo }
71
-
72
- it "has methods which names are name of keys described in the yaml" do
73
- expect(subject).to respond_to(:baa)
74
- end
75
-
76
- describe "the Hash value (3rd level)" do
77
- subject { SingleYamlConf.foo.baa }
78
-
79
- it "has methods which names are name of keys described in the yaml" do
80
- expect(subject).to respond_to(:baz0)
81
- expect(subject).to respond_to(:baz1)
82
- end
83
- end
84
- end
85
- end
86
- end
87
- end
88
-
89
- context "when reading multiple yaml files" do
90
- require "#{File.dirname(__FILE__)}/multiple_yaml_conf"
91
-
92
- describe ".[]" do
93
- context "when specifing the root keys in the yaml" do
94
- it "return a Hash value" do
95
- expect(MultipleYamlConf["foo"]).to be_a(Hash)
96
- end
97
-
98
- describe "the Hash value (2nd level)" do
99
- subject { MultipleYamlConf["foo"] }
100
-
101
- it "has keys described in the yaml files" do
102
- expect(subject.keys).to match_array(["baa", "bar", "pee"])
103
- end
104
-
105
- describe "the Hash value (3rd level)" do
106
- subject do
107
- ["baa", "bar", "pee"].map {|k|
108
- MultipleYamlConf["foo"][k]
109
- }
110
- end
111
-
112
- it "has keys described in the yaml files" do
113
- expect(subject[0]).to have_key("baz")
114
-
115
- expect(subject[1]).to have_key("ding")
116
- expect(subject[1]).to have_key("tick")
117
-
118
- expect(subject[2]).to have_key("kaa")
119
- expect(subject[2]).to have_key("boo")
120
- end
121
- end
122
- end
123
- end
124
- end
125
- end
126
- end