config_plus 0.0.5 → 0.0.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.ja.md +24 -0
- data/README.md +23 -0
- data/lib/config_plus.rb +5 -1
- data/lib/config_plus/base.rb +31 -9
- data/lib/config_plus/collection.rb +193 -0
- data/lib/config_plus/config.rb +28 -26
- data/lib/config_plus/helper.rb +2 -0
- data/lib/config_plus/loader.rb +11 -7
- data/lib/config_plus/merger.rb +5 -1
- data/lib/config_plus/node.rb +76 -24
- data/lib/config_plus/single.rb +10 -0
- data/lib/config_plus/version.rb +1 -1
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e208952531353609f29e28211515eb3b11bf0781
|
4
|
+
data.tar.gz: 76453e257d4804a459336cd536d5a0ba5654ae48
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: eea53a7069d354366b6bf0e9f6155736514459c0fe8e1dab6178a0d3f70500f33539f8a7b63f57b551ae3ab40622ec1d0ccc7e66938edaa95a5001d0216b7a07
|
7
|
+
data.tar.gz: 53697c89a5c3400e9d3e9179e67d78f4021a04160a647c00afe4a84afbbb9e1238d51736f99deb9e9ea3350f15a56e740ea06938397d2114b58b733834e4c41e
|
data/README.ja.md
CHANGED
@@ -141,6 +141,30 @@ Sample::SettingA.config
|
|
141
141
|
#=> {"spam"=>"bacon", "ham"=>"spam", "egg"=>"baked beans"}
|
142
142
|
```
|
143
143
|
|
144
|
+
個別ロード
|
145
|
+
--------------------------------------------------
|
146
|
+
`ConfigPlus` の基本動作では、指定された設定ファイル群の情報を `ConfigPlus.root`
|
147
|
+
に読み込みます。つまり、すべての情報は基本的にひとつのオプジェクトで管理されます。
|
148
|
+
|
149
|
+
これはシンプルな方法ですが、個別に読み込み、管理したいということもあるかもしれません。
|
150
|
+
次のようにすると、個別に設定情報を持たせることができます。
|
151
|
+
|
152
|
+
```ruby
|
153
|
+
class Foo
|
154
|
+
extend ConfigPlus::Single
|
155
|
+
generate_config '/path/to/configuration/file.yml', as: :conf
|
156
|
+
end
|
157
|
+
|
158
|
+
Foo.conf[:foo]
|
159
|
+
# => foo の値
|
160
|
+
|
161
|
+
ConfigPlus.root
|
162
|
+
# => nil
|
163
|
+
```
|
164
|
+
|
165
|
+
オプションの `as` で設定情報にアクセスするメソッド名を指定できます。
|
166
|
+
省略すると `config` が使われます。
|
167
|
+
|
144
168
|
その他
|
145
169
|
--------------------------------------------------
|
146
170
|
`ConfigPlus` の動作は設定で変更できます。
|
data/README.md
CHANGED
@@ -126,6 +126,29 @@ Sample::SettingA.config
|
|
126
126
|
#=> {"spam"=>"bacon", "ham"=>"spam", "egg"=>"baked beans"}
|
127
127
|
```
|
128
128
|
|
129
|
+
Load Individually
|
130
|
+
------------------------------------------------------------
|
131
|
+
Basically, `ConfigPlus` loads the specified configuration files
|
132
|
+
and merges all of the data into a single hash `ConfigPlus.root`.
|
133
|
+
|
134
|
+
But if you want to get the data in an other hash, you can do by
|
135
|
+
the following way:
|
136
|
+
|
137
|
+
```ruby
|
138
|
+
class Foo
|
139
|
+
extend ConfigPlus::Single
|
140
|
+
generate_config '/path/to/configuration/file.yml', as: :conf
|
141
|
+
end
|
142
|
+
|
143
|
+
Foo.conf[:foo]
|
144
|
+
# => a value of `foo'
|
145
|
+
|
146
|
+
ConfigPlus.root
|
147
|
+
# => nil
|
148
|
+
```
|
149
|
+
|
150
|
+
You can specify the method name for access to configuration data
|
151
|
+
by the option `as`, which default value is `config`.
|
129
152
|
|
130
153
|
Others
|
131
154
|
------------------------------------------------------------
|
data/lib/config_plus.rb
CHANGED
@@ -1,7 +1,8 @@
|
|
1
|
-
require 'config_plus/base'
|
2
1
|
require 'config_plus/version'
|
3
2
|
|
4
3
|
module ConfigPlus
|
4
|
+
autoload :Base, 'config_plus/base'
|
5
|
+
autoload :Collection, 'config_plus/collection'
|
5
6
|
autoload :Config, 'config_plus/config'
|
6
7
|
autoload :DefaultLoaderLogic, 'config_plus/default_loader_logic'
|
7
8
|
autoload :ErbYamlLoaderLogic, 'config_plus/erb_yaml_loader_logic'
|
@@ -9,4 +10,7 @@ module ConfigPlus
|
|
9
10
|
autoload :Loader, 'config_plus/loader'
|
10
11
|
autoload :Merger, 'config_plus/merger'
|
11
12
|
autoload :Node, 'config_plus/node'
|
13
|
+
autoload :Single, 'config_plus/single'
|
14
|
+
|
15
|
+
extend Base
|
12
16
|
end
|
data/lib/config_plus/base.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
module ConfigPlus
|
2
|
-
|
2
|
+
module Base
|
3
3
|
attr_reader :root
|
4
4
|
|
5
5
|
# Sets up configuration of ++ConfigPlus++ and loads data
|
@@ -28,7 +28,7 @@ module ConfigPlus
|
|
28
28
|
# ConfigPlus.generate(from: '/path/to/yaml/file.yml')
|
29
29
|
#
|
30
30
|
def generate(options={})
|
31
|
-
config.source = options.delete(:from)
|
31
|
+
config.source = options.delete(:from) || options.delete('from')
|
32
32
|
options.each do |k, v|
|
33
33
|
if config.has_property?(k)
|
34
34
|
config.property_set(k, v)
|
@@ -39,16 +39,38 @@ module ConfigPlus
|
|
39
39
|
load
|
40
40
|
end
|
41
41
|
|
42
|
+
def single_generate(source, options={})
|
43
|
+
meth = [:as, :config_method].lazy.map {|nm|
|
44
|
+
options.delete(nm) || options.delete(nm.to_s)
|
45
|
+
}.find {|v| v } || :config
|
46
|
+
klass = options.delete(:to) || options.delete('to')
|
47
|
+
raise unless klass
|
48
|
+
|
49
|
+
conf = self::Config.new
|
50
|
+
conf.source = source
|
51
|
+
options.each do |k, v|
|
52
|
+
conf.has_property?(k) and conf.property_set(k, v) or
|
53
|
+
raise "Unknown configuration property `#{k}'"
|
54
|
+
end
|
55
|
+
|
56
|
+
hsh = conf.loader.load
|
57
|
+
conf.node_model.new(hsh).tap do |tree|
|
58
|
+
[klass.singleton_class, klass].each do |obj|
|
59
|
+
obj.instance_eval { define_method meth, lambda { tree } }
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
42
64
|
protected
|
43
65
|
|
44
66
|
def config
|
45
|
-
@config ||=
|
67
|
+
@config ||= ::ConfigPlus::Config.new
|
46
68
|
end
|
47
69
|
|
48
70
|
private
|
49
71
|
|
50
72
|
# Loads a configuration data as a hash object
|
51
|
-
# from files specified with ++source++ or
|
73
|
+
# from files specified with ++source++ or
|
52
74
|
# ++root_dir++ settings.
|
53
75
|
#
|
54
76
|
def load
|
@@ -63,23 +85,23 @@ module ConfigPlus
|
|
63
85
|
clazz.ancestors.include?(self)
|
64
86
|
}.reverse.each.inject({}) {|hsh, clazz|
|
65
87
|
h = clazz.public_send(self.config.config_method)
|
66
|
-
h =
|
88
|
+
h = ::ConfigPlus::Helper.config_for(clazz, self.root) unless
|
67
89
|
h or h.is_a?(Hash)
|
68
|
-
|
90
|
+
::ConfigPlus::Merger.merge(hsh, h)
|
69
91
|
}
|
70
92
|
end
|
71
93
|
|
72
94
|
def included(base)
|
73
95
|
method_name = self.config.config_method
|
74
96
|
return unless method_name
|
75
|
-
own =
|
97
|
+
own = ::ConfigPlus::Helper.config_for(base, self.root)
|
76
98
|
inheritance = inherited_config_of(base)
|
77
99
|
|
78
100
|
node_model = config.node_model
|
79
101
|
[base, base.singleton_class].each do |obj|
|
80
102
|
obj.instance_eval do
|
81
|
-
config = inheritance ?
|
82
|
-
::ConfigPlus::Merger.merge(inheritance, own || {})
|
103
|
+
config = inheritance.empty? ? own :
|
104
|
+
::ConfigPlus::Merger.merge(inheritance, own || {})
|
83
105
|
config = node_model.new(config)
|
84
106
|
define_method method_name, lambda { config }
|
85
107
|
end
|
@@ -0,0 +1,193 @@
|
|
1
|
+
require 'forwardable'
|
2
|
+
|
3
|
+
module ConfigPlus
|
4
|
+
class Collection
|
5
|
+
extend Forwardable
|
6
|
+
|
7
|
+
def_delegators :data,
|
8
|
+
:each,
|
9
|
+
:include?,
|
10
|
+
:inspect,
|
11
|
+
:size,
|
12
|
+
:to_a,
|
13
|
+
:to_s,
|
14
|
+
:values_at
|
15
|
+
|
16
|
+
def initialize(collection)
|
17
|
+
@hash_data = nil
|
18
|
+
@array_data = nil
|
19
|
+
data = retrieve_data_out_of(collection)
|
20
|
+
|
21
|
+
case data
|
22
|
+
when Hash
|
23
|
+
@hash_data = {}
|
24
|
+
when Array
|
25
|
+
@array_data = []
|
26
|
+
else
|
27
|
+
raise TypeError, "An argument should be Hash or Array " \
|
28
|
+
"but #{collection.class.name}"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def [](key)
|
33
|
+
self.fetch(key, nil)
|
34
|
+
end
|
35
|
+
|
36
|
+
def fetch(*arguments)
|
37
|
+
raise ArgumentError if arguments.size > 2 or arguments.empty?
|
38
|
+
args = arguments.dup
|
39
|
+
args[0] = args[0].to_s
|
40
|
+
|
41
|
+
if array? and args[0] =~ /\A\d+\z/
|
42
|
+
args[0] = args[0].to_i
|
43
|
+
data.fetch(*args)
|
44
|
+
elsif hash?
|
45
|
+
v = data.fetch(*args)
|
46
|
+
if !v and args[0] =~ /\A\d+\z/
|
47
|
+
args[0] = args[0].to_i
|
48
|
+
v = data.fetch(*args)
|
49
|
+
end
|
50
|
+
v
|
51
|
+
else
|
52
|
+
raise
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def merge(collection)
|
57
|
+
raise TypeError, "An argument should be an instance of #{data.class.name}" \
|
58
|
+
" but #{collection.class.name}" if
|
59
|
+
self.miss_match?(collection)
|
60
|
+
data = retrieve_data_out_of collection
|
61
|
+
|
62
|
+
if hash?
|
63
|
+
hash_data.merge(data)
|
64
|
+
else
|
65
|
+
array_data + data
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def merge!(collection)
|
70
|
+
raise TypeError, "An argument should be an instance of #{data.class.name}" \
|
71
|
+
" but #{collection.class.name}" if
|
72
|
+
self.miss_match?(collection)
|
73
|
+
data = retrieve_data_out_of collection
|
74
|
+
|
75
|
+
if hash?
|
76
|
+
hash_data.merge!(data)
|
77
|
+
else
|
78
|
+
array_data.concat(data)
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
def each_key
|
83
|
+
if hash?
|
84
|
+
hash_data.each_key
|
85
|
+
else
|
86
|
+
(0...array_data.size).each
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
def each_pair
|
91
|
+
if hash?
|
92
|
+
hash_data.each_pair
|
93
|
+
else
|
94
|
+
array_data.lazy.with_index.map {|v, n|
|
95
|
+
[n, v]
|
96
|
+
}.each
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
def keys
|
101
|
+
if hash?
|
102
|
+
hash_data.keys
|
103
|
+
else
|
104
|
+
Array.new(array_data, &:to_i)
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
def key?(val)
|
109
|
+
if hash?
|
110
|
+
hash_data.key?(val.to_s)
|
111
|
+
elsif val.to_s =~ /\A\d+\z/
|
112
|
+
val.to_i.between?(0, array_data.size - 1)
|
113
|
+
else
|
114
|
+
false
|
115
|
+
end
|
116
|
+
end
|
117
|
+
alias :has_key? :key?
|
118
|
+
|
119
|
+
def store(key, val)
|
120
|
+
if hash?
|
121
|
+
hash_data.store(key.to_s, val)
|
122
|
+
elsif key.to_s =~ /\A\d+\z/
|
123
|
+
array_data[key.to_i] = val
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
def to_hash
|
128
|
+
if hash?
|
129
|
+
hash_data.to_hash
|
130
|
+
else
|
131
|
+
Hash.try_convert(data)
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
def value?(val)
|
136
|
+
if hash?
|
137
|
+
hash_data.value?(val)
|
138
|
+
else
|
139
|
+
array_data.include?(val)
|
140
|
+
end
|
141
|
+
end
|
142
|
+
alias :has_value? :value?
|
143
|
+
|
144
|
+
def values
|
145
|
+
if hash?
|
146
|
+
hash_data.values
|
147
|
+
else
|
148
|
+
array_data
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
def data
|
153
|
+
hash_data || array_data
|
154
|
+
end
|
155
|
+
|
156
|
+
def hash?
|
157
|
+
!!hash_data
|
158
|
+
end
|
159
|
+
|
160
|
+
def array?
|
161
|
+
!!array_data
|
162
|
+
end
|
163
|
+
|
164
|
+
protected
|
165
|
+
|
166
|
+
def miss_match?(collection)
|
167
|
+
data.class != collection.class && !collection.is_a?(self.class)
|
168
|
+
end
|
169
|
+
|
170
|
+
private
|
171
|
+
|
172
|
+
attr_reader :hash_data, :array_data
|
173
|
+
|
174
|
+
def retrieve_data_out_of(object)
|
175
|
+
case object
|
176
|
+
when Hash, Array
|
177
|
+
object
|
178
|
+
when self.class
|
179
|
+
object.data
|
180
|
+
else
|
181
|
+
raise TypeError, "#{object.class.name} could not be acceptable"
|
182
|
+
end
|
183
|
+
end
|
184
|
+
|
185
|
+
class << self
|
186
|
+
def generate_for(collection)
|
187
|
+
new(collection)
|
188
|
+
end
|
189
|
+
|
190
|
+
private :new
|
191
|
+
end
|
192
|
+
end
|
193
|
+
end
|
data/lib/config_plus/config.rb
CHANGED
@@ -1,39 +1,32 @@
|
|
1
1
|
module ConfigPlus
|
2
|
+
# Configuration of ConfigPlus
|
2
3
|
class Config
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
4
|
+
def self.default_properties
|
5
|
+
{
|
6
|
+
config_method: :config,
|
7
|
+
extension: nil,
|
8
|
+
namespace: nil,
|
9
|
+
node_model: Node,
|
10
|
+
root_dir: nil,
|
11
|
+
source: nil,
|
12
|
+
loader_logic: :default,
|
13
|
+
}
|
13
14
|
end
|
14
15
|
|
15
|
-
prop_accessor :config_method,
|
16
|
-
:extension,
|
17
|
-
:namespace,
|
18
|
-
:node_model,
|
19
|
-
:root_dir,
|
20
|
-
:source,
|
21
|
-
:loader_logic
|
22
|
-
|
23
16
|
def initialize
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
@root_dir = nil
|
30
|
-
@source = nil
|
17
|
+
props = self.class.default_properties.each do |k, v|
|
18
|
+
instance_variable_set("@#{k}", v)
|
19
|
+
end
|
20
|
+
|
21
|
+
setup_attrs(props.keys)
|
31
22
|
end
|
32
23
|
|
24
|
+
# returns a new loader instance
|
33
25
|
def loader
|
34
26
|
Loader.new(self)
|
35
27
|
end
|
36
28
|
|
29
|
+
# returns loader class specified by +loader_logic+ property
|
37
30
|
def loader_logic
|
38
31
|
return @loader_logic if @loader_logic.is_a?(Class)
|
39
32
|
|
@@ -49,11 +42,20 @@ module ConfigPlus
|
|
49
42
|
end
|
50
43
|
|
51
44
|
def has_property?(name)
|
52
|
-
|
45
|
+
instance_variable_defined?("@#{name}")
|
53
46
|
end
|
54
47
|
|
55
48
|
def property_set(name, value)
|
56
49
|
instance_variable_set("@#{name}", value)
|
57
50
|
end
|
51
|
+
|
52
|
+
private
|
53
|
+
|
54
|
+
def setup_attrs(attr_names)
|
55
|
+
singleton_class.instance_eval do
|
56
|
+
attr_writer *attr_names
|
57
|
+
attr_reader *(attr_names - instance_methods)
|
58
|
+
end
|
59
|
+
end
|
58
60
|
end
|
59
61
|
end
|
data/lib/config_plus/helper.rb
CHANGED
data/lib/config_plus/loader.rb
CHANGED
@@ -8,9 +8,9 @@ module ConfigPlus
|
|
8
8
|
paths = source_paths
|
9
9
|
raise "No specified `source'" if paths.empty?
|
10
10
|
|
11
|
-
paths.
|
11
|
+
paths.inject({}) do |h, path|
|
12
12
|
hsh = loader_logic.load_from(path)
|
13
|
-
hsh = hsh[
|
13
|
+
hsh = hsh[config.namespace.to_s] if config.namespace
|
14
14
|
Merger.merge(h, hsh)
|
15
15
|
end
|
16
16
|
end
|
@@ -18,20 +18,24 @@ module ConfigPlus
|
|
18
18
|
protected
|
19
19
|
|
20
20
|
def loader_logic
|
21
|
-
@loader_logic ||=
|
21
|
+
@loader_logic ||= config.loader_logic.new(config.extension)
|
22
22
|
end
|
23
23
|
|
24
24
|
def source_paths
|
25
|
-
Array(
|
25
|
+
Array(config.source).map {|s|
|
26
26
|
source_path(s)
|
27
27
|
}.reverse.uniq.compact.reverse
|
28
28
|
end
|
29
29
|
|
30
30
|
def source_path(filepath)
|
31
|
-
return filepath unless
|
32
|
-
return
|
31
|
+
return filepath unless config.root_dir
|
32
|
+
return config.root_dir unless filepath
|
33
33
|
return filepath if filepath.start_with?('/')
|
34
|
-
File.join(
|
34
|
+
File.join(config.root_dir, filepath)
|
35
35
|
end
|
36
|
+
|
37
|
+
private
|
38
|
+
|
39
|
+
attr_reader :config
|
36
40
|
end
|
37
41
|
end
|
data/lib/config_plus/merger.rb
CHANGED
@@ -15,8 +15,12 @@ module ConfigPlus
|
|
15
15
|
if collection1.is_a?(Array) and
|
16
16
|
collection2.is_a?(Array)
|
17
17
|
collection1.concat(collection2)
|
18
|
+
elsif collection2.is_a?(::ConfigPlus::Node)
|
19
|
+
collection1.merge(collection2.__send__(:node), &MERGER)
|
18
20
|
else
|
19
|
-
|
21
|
+
object = collection2.__send__(:node) if collection2.is_a?(::ConfigPlus::Node)
|
22
|
+
object ||= collection2
|
23
|
+
collection1.merge(object, &MERGER)
|
20
24
|
end
|
21
25
|
end
|
22
26
|
end
|
data/lib/config_plus/node.rb
CHANGED
@@ -1,18 +1,42 @@
|
|
1
|
+
require 'forwardable'
|
2
|
+
|
1
3
|
module ConfigPlus
|
2
|
-
class Node
|
3
|
-
|
4
|
-
|
5
|
-
|
4
|
+
class Node
|
5
|
+
extend Forwardable
|
6
|
+
include Enumerable
|
7
|
+
|
8
|
+
def_delegators :node,
|
9
|
+
:array?,
|
10
|
+
:each,
|
11
|
+
:each_key,
|
12
|
+
:each_pair,
|
13
|
+
:hash?,
|
14
|
+
:keys,
|
15
|
+
:key?,
|
16
|
+
:has_key?,
|
17
|
+
:to_a,
|
18
|
+
:to_hash,
|
19
|
+
:to_s,
|
20
|
+
:value?,
|
21
|
+
:values,
|
22
|
+
:values_at
|
23
|
+
|
24
|
+
def initialize(collection)
|
25
|
+
data = data_of(collection)
|
26
|
+
@node = ::ConfigPlus::Collection.generate_for(data)
|
27
|
+
self.merge!(data) if hash
|
6
28
|
end
|
7
29
|
|
8
30
|
def [](key)
|
9
|
-
value =
|
10
|
-
value = self.fetch(key.to_i, nil) if
|
11
|
-
value.nil? and key.to_s =~ /\A\d+\z/
|
12
|
-
return value unless value.is_a?(Hash)
|
31
|
+
value = node[key]
|
13
32
|
return value if value.is_a?(self.class)
|
14
33
|
|
15
|
-
|
34
|
+
case value
|
35
|
+
when Hash, Array, ::ConfigPlus::Collection
|
36
|
+
node.store(key.to_s, self.class.new(value))
|
37
|
+
else
|
38
|
+
value
|
39
|
+
end
|
16
40
|
end
|
17
41
|
|
18
42
|
def get(path)
|
@@ -22,29 +46,57 @@ module ConfigPlus
|
|
22
46
|
self[key].get(rest)
|
23
47
|
end
|
24
48
|
|
25
|
-
def
|
26
|
-
|
27
|
-
|
28
|
-
|
49
|
+
def dig(*keys)
|
50
|
+
key = keys.first
|
51
|
+
rest = keys[1..-1]
|
52
|
+
return self[key] if rest.empty?
|
53
|
+
return nil unless self[key]
|
54
|
+
self[key].dig(*rest)
|
55
|
+
end
|
56
|
+
|
57
|
+
def merge(collection)
|
58
|
+
data = data_of(collection)
|
59
|
+
self.class.new(node.merge(convert(data)))
|
60
|
+
end
|
61
|
+
|
62
|
+
def ==(object)
|
63
|
+
node.data == data_of(object)
|
29
64
|
end
|
30
65
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
66
|
+
protected
|
67
|
+
|
68
|
+
attr_reader :node
|
69
|
+
|
70
|
+
def merge!(collection)
|
71
|
+
data = data_of(collection)
|
72
|
+
node.merge!(convert(data)).tap {
|
73
|
+
(node.hash? ? data : node).keys.each {|k| define_accessor(k) }
|
35
74
|
}
|
36
|
-
result
|
37
75
|
end
|
38
76
|
|
39
77
|
private
|
40
78
|
|
79
|
+
def data_of(collection)
|
80
|
+
collection.is_a?(self.class) ? collection.node : collection
|
81
|
+
end
|
82
|
+
|
83
|
+
def convert(collection)
|
84
|
+
case collection
|
85
|
+
when Array
|
86
|
+
collection.map do |data|
|
87
|
+
data.is_a?(Array) || data.is_a?(Hash) ? self.class.new(data) : data
|
88
|
+
end
|
89
|
+
else
|
90
|
+
collection
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
41
94
|
def define_accessor(method_name)
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
define_method method_name, lambda { self[method_name] }
|
95
|
+
name = method_name.to_s
|
96
|
+
return if respond_to?(name) or
|
97
|
+
private_methods.include?(name.to_sym)
|
98
|
+
singleton_class.class_exec(self) do |node|
|
99
|
+
define_method name, lambda { node[method_name] }
|
48
100
|
end
|
49
101
|
end
|
50
102
|
end
|
data/lib/config_plus/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: config_plus
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- m4oda
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-02-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
@@ -35,6 +35,7 @@ files:
|
|
35
35
|
- README.md
|
36
36
|
- lib/config_plus.rb
|
37
37
|
- lib/config_plus/base.rb
|
38
|
+
- lib/config_plus/collection.rb
|
38
39
|
- lib/config_plus/config.rb
|
39
40
|
- lib/config_plus/default_loader_logic.rb
|
40
41
|
- lib/config_plus/erb_yaml_loader_logic.rb
|
@@ -42,6 +43,7 @@ files:
|
|
42
43
|
- lib/config_plus/loader.rb
|
43
44
|
- lib/config_plus/merger.rb
|
44
45
|
- lib/config_plus/node.rb
|
46
|
+
- lib/config_plus/single.rb
|
45
47
|
- lib/config_plus/version.rb
|
46
48
|
homepage: https://github.com/m4oda/config_plus
|
47
49
|
licenses:
|
@@ -63,7 +65,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
63
65
|
version: '0'
|
64
66
|
requirements: []
|
65
67
|
rubyforge_project:
|
66
|
-
rubygems_version: 2.
|
68
|
+
rubygems_version: 2.6.8
|
67
69
|
signing_key:
|
68
70
|
specification_version: 4
|
69
71
|
summary: An easy-to-use, powerful configuration module using YAML files
|