config_plus 0.0.4 → 0.0.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.
- checksums.yaml +4 -4
- data/README.ja.md +20 -0
- data/README.md +22 -0
- data/lib/config_plus/base.rb +12 -8
- data/lib/config_plus/config.rb +29 -5
- data/lib/config_plus/default_loader_logic.rb +12 -6
- data/lib/config_plus/erb_yaml_loader_logic.rb +11 -0
- data/lib/config_plus/helper.rb +4 -5
- data/lib/config_plus/loader.rb +1 -1
- data/lib/config_plus/node.rb +1 -1
- data/lib/config_plus/version.rb +1 -1
- data/lib/config_plus.rb +10 -6
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 189eb84bec6ebcfa3fbb181d5d548c47fb7e4c3e
|
4
|
+
data.tar.gz: 8b71d5dc1ac70f6eadc0fe5d49d78e724d63ad6c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4c5807c8460291543b7c536d0394034b05cc3bdef580fddccf312f56ee7af0fd69f78a3481f661e131263b9b5eae7c3141c0c55006f10c682b19a2a807d897cc
|
7
|
+
data.tar.gz: 7ccf3c2d162116d904e5d56162461cfc1f311239af62158869efbeb25d6df09a72b3035bd2797eebb0d005657829a56e9eadaca6a7c506d3580b1cdb5b6bd754
|
data/README.ja.md
CHANGED
@@ -54,6 +54,25 @@ ConfigPlus.generate(from: '/path/to/configuration/directory')
|
|
54
54
|
ConfigPlus.generate(from: ['/path/to/directory1', '/path/to/file1.yml'])
|
55
55
|
```
|
56
56
|
|
57
|
+
ERB タグを含む YAML の読み込み
|
58
|
+
--------------------------------------------------
|
59
|
+
`loader_logic` に `erb_yaml` を指定すると、ERB タグを解釈して読み込むことができます。
|
60
|
+
|
61
|
+
たとえばこのような YAML ファイルがあった場合、
|
62
|
+
|
63
|
+
```yaml
|
64
|
+
abc:
|
65
|
+
foo: <%= (1..10).inject(&:+) %>
|
66
|
+
```
|
67
|
+
|
68
|
+
次のようになります。
|
69
|
+
|
70
|
+
```ruby
|
71
|
+
ConfigPlus.generate(from: 'path/to/configuration/file.erb.yml', loader_logic: :erb_yaml)
|
72
|
+
ConfigPlus.abc.foo
|
73
|
+
#=> 55
|
74
|
+
```
|
75
|
+
|
57
76
|
自動マッピング
|
58
77
|
--------------------------------------------------
|
59
78
|
YAML の構造と同じパスを持つクラスがある場合、
|
@@ -148,6 +167,7 @@ end
|
|
148
167
|
| `namespace` | 使用するネームスペース | |
|
149
168
|
| `root_dir` | `source` で指定するパスの親ディレクトリのパス | |
|
150
169
|
| `source` | 設定ファイル、またはそれが格納されているディレクトリのパス | |
|
170
|
+
| `loader_logic` | 設定ファイルの読み込みロジックの設定 | `default` |
|
151
171
|
|
152
172
|
ライセンス
|
153
173
|
--------------------------------------------------
|
data/README.md
CHANGED
@@ -48,6 +48,25 @@ ConfigPlus.generate(from: ['/path/to/directory1', '/path/to/file1.yml'])
|
|
48
48
|
```
|
49
49
|
|
50
50
|
|
51
|
+
YAML with ERB tags
|
52
|
+
------------------------------------------------------------
|
53
|
+
`ConfigPlus` can evaluate ERB tags when you add `loader_logic` setting.
|
54
|
+
For example, when there is a such YAML file:
|
55
|
+
|
56
|
+
```yaml
|
57
|
+
abc:
|
58
|
+
foo: <%= (1..10).inject(&:+) %>
|
59
|
+
```
|
60
|
+
|
61
|
+
You can get it with the following way:
|
62
|
+
|
63
|
+
```ruby
|
64
|
+
ConfigPlus.generate(from: '/path/to/configuration/file.yml', loader_logic: :erb_yaml)
|
65
|
+
ConfigPlus.abc.foo
|
66
|
+
#=> 55
|
67
|
+
```
|
68
|
+
|
69
|
+
|
51
70
|
Auto Mapping
|
52
71
|
------------------------------------------------------------
|
53
72
|
When data structure of loaded YAML and class structure of your
|
@@ -139,6 +158,9 @@ Properties you can set are following:
|
|
139
158
|
relative path as `source`
|
140
159
|
* `source`
|
141
160
|
* a file path or a directory path or an array of them
|
161
|
+
* `loader_logic`
|
162
|
+
* logic to load YAML files. When you specify `erb_yaml`
|
163
|
+
ERB tags can be evaluated
|
142
164
|
|
143
165
|
|
144
166
|
License
|
data/lib/config_plus/base.rb
CHANGED
@@ -27,11 +27,14 @@ module ConfigPlus
|
|
27
27
|
#
|
28
28
|
# ConfigPlus.generate(from: '/path/to/yaml/file.yml')
|
29
29
|
#
|
30
|
-
def generate(
|
31
|
-
config.source = from
|
32
|
-
|
33
|
-
|
34
|
-
|
30
|
+
def generate(options={})
|
31
|
+
config.source = options.delete(:from) or options.delete('from')
|
32
|
+
options.each do |k, v|
|
33
|
+
if config.has_property?(k)
|
34
|
+
config.property_set(k, v)
|
35
|
+
else
|
36
|
+
raise "Unknown configuration property `#{k}'"
|
37
|
+
end
|
35
38
|
end
|
36
39
|
load
|
37
40
|
end
|
@@ -50,7 +53,7 @@ module ConfigPlus
|
|
50
53
|
#
|
51
54
|
def load
|
52
55
|
hash = config.loader.load
|
53
|
-
@root =
|
56
|
+
@root = config.node_model.new(hash)
|
54
57
|
end
|
55
58
|
|
56
59
|
def inherited_config_of(klass)
|
@@ -72,12 +75,13 @@ module ConfigPlus
|
|
72
75
|
own = self::Helper.config_for(base, self.root)
|
73
76
|
inheritance = inherited_config_of(base)
|
74
77
|
|
78
|
+
node_model = config.node_model
|
75
79
|
[base, base.singleton_class].each do |obj|
|
76
80
|
obj.instance_eval do
|
77
81
|
config = inheritance ?
|
78
82
|
::ConfigPlus::Merger.merge(inheritance, own || {}) : own
|
79
|
-
config =
|
80
|
-
define_method method_name,
|
83
|
+
config = node_model.new(config)
|
84
|
+
define_method method_name, lambda { config }
|
81
85
|
end
|
82
86
|
end
|
83
87
|
end
|
data/lib/config_plus/config.rb
CHANGED
@@ -1,19 +1,31 @@
|
|
1
1
|
module ConfigPlus
|
2
2
|
class Config
|
3
|
-
|
3
|
+
class << self
|
4
|
+
attr_reader :properties
|
5
|
+
|
6
|
+
def prop_accessor(*names)
|
7
|
+
@properties ||= []
|
8
|
+
@properties.concat(names)
|
9
|
+
attr_accessor *names
|
10
|
+
end
|
11
|
+
|
12
|
+
private :prop_accessor
|
13
|
+
end
|
14
|
+
|
15
|
+
prop_accessor :config_method,
|
4
16
|
:extension,
|
5
17
|
:namespace,
|
18
|
+
:node_model,
|
6
19
|
:root_dir,
|
7
|
-
:source
|
8
|
-
|
9
|
-
attr_writer :loader_logic
|
20
|
+
:source,
|
21
|
+
:loader_logic
|
10
22
|
|
11
23
|
def initialize
|
12
|
-
@version = VERSION
|
13
24
|
@config_method = :config
|
14
25
|
@extension = nil
|
15
26
|
@loader_logic = :default
|
16
27
|
@namespace = nil
|
28
|
+
@node_model = Node
|
17
29
|
@root_dir = nil
|
18
30
|
@source = nil
|
19
31
|
end
|
@@ -31,5 +43,17 @@ module ConfigPlus
|
|
31
43
|
::ConfigPlus::const_defined?(name)
|
32
44
|
::ConfigPlus::const_get(name)
|
33
45
|
end
|
46
|
+
|
47
|
+
def version
|
48
|
+
VERSION
|
49
|
+
end
|
50
|
+
|
51
|
+
def has_property?(name)
|
52
|
+
self.class.properties.include?(name.to_sym)
|
53
|
+
end
|
54
|
+
|
55
|
+
def property_set(name, value)
|
56
|
+
instance_variable_set("@#{name}", value)
|
57
|
+
end
|
34
58
|
end
|
35
59
|
end
|
@@ -1,20 +1,26 @@
|
|
1
1
|
require 'yaml'
|
2
2
|
|
3
3
|
module ConfigPlus
|
4
|
+
# This loader reads configuration from the specified
|
5
|
+
# a YAML file with its ++load_from++ method.
|
6
|
+
# When a directory is specified this recurses a file
|
7
|
+
# tree and reads all YAML files.
|
8
|
+
#
|
4
9
|
class DefaultLoaderLogic
|
5
|
-
def initialize(
|
6
|
-
@
|
7
|
-
end
|
8
|
-
|
9
|
-
def extension
|
10
|
-
@config.extension || [:yml, :yaml]
|
10
|
+
def initialize(extension)
|
11
|
+
@extension = extension || [:yml, :yaml]
|
11
12
|
end
|
12
13
|
|
13
14
|
def load_from(path)
|
15
|
+
raise Errno::ENOENT, "No such file or directory: `#{path}'" unless File.exist?(path)
|
14
16
|
return load_file(path) if File.file?(path)
|
15
17
|
load_dir(path)
|
16
18
|
end
|
17
19
|
|
20
|
+
private
|
21
|
+
|
22
|
+
attr_reader :extension
|
23
|
+
|
18
24
|
def load_file(filepath)
|
19
25
|
content = open(filepath).read
|
20
26
|
YAML.load(content).to_hash
|
data/lib/config_plus/helper.rb
CHANGED
@@ -6,7 +6,7 @@ module ConfigPlus
|
|
6
6
|
return configs.first if configs.size <= 1
|
7
7
|
|
8
8
|
if configs.all? {|c| c.is_a? Hash }
|
9
|
-
configs.inject(
|
9
|
+
configs.inject(config.class.new) {|h, conf|
|
10
10
|
::ConfigPlus::Merger.merge(h, conf)
|
11
11
|
}
|
12
12
|
else
|
@@ -17,8 +17,7 @@ module ConfigPlus
|
|
17
17
|
def underscore(name)
|
18
18
|
return name.underscore if name.respond_to?(:underscore)
|
19
19
|
|
20
|
-
name.gsub(/::/, '.')
|
21
|
-
.gsub(/((\A|\b)([A-Z]+))|([A-Z]+)/) do
|
20
|
+
name.gsub(/::/, '.').gsub(/((\A|\b)([A-Z]+))|([A-Z]+)/) do
|
22
21
|
next $3.downcase if $3
|
23
22
|
"_#{$4.downcase}"
|
24
23
|
end
|
@@ -26,8 +25,8 @@ module ConfigPlus
|
|
26
25
|
|
27
26
|
def classify(name)
|
28
27
|
return name.classify if name.respond_to?(:classify)
|
29
|
-
name.to_s.gsub(/\/+/, '::')
|
30
|
-
|
28
|
+
name.to_s.gsub(/\/+/, '::').
|
29
|
+
gsub(/_?([a-z]+)/) { $1.capitalize }
|
31
30
|
end
|
32
31
|
|
33
32
|
private
|
data/lib/config_plus/loader.rb
CHANGED
data/lib/config_plus/node.rb
CHANGED
@@ -44,7 +44,7 @@ module ConfigPlus
|
|
44
44
|
return if respond_to?(method_name) or
|
45
45
|
private_methods.include?(method_name.to_sym)
|
46
46
|
singleton_class.class_eval do
|
47
|
-
define_method method_name,
|
47
|
+
define_method method_name, lambda { self[method_name] }
|
48
48
|
end
|
49
49
|
end
|
50
50
|
end
|
data/lib/config_plus/version.rb
CHANGED
data/lib/config_plus.rb
CHANGED
@@ -1,8 +1,12 @@
|
|
1
1
|
require 'config_plus/base'
|
2
|
-
require 'config_plus/config'
|
3
|
-
require 'config_plus/default_loader_logic'
|
4
|
-
require 'config_plus/helper'
|
5
|
-
require 'config_plus/loader'
|
6
|
-
require 'config_plus/merger'
|
7
|
-
require 'config_plus/node'
|
8
2
|
require 'config_plus/version'
|
3
|
+
|
4
|
+
module ConfigPlus
|
5
|
+
autoload :Config, 'config_plus/config'
|
6
|
+
autoload :DefaultLoaderLogic, 'config_plus/default_loader_logic'
|
7
|
+
autoload :ErbYamlLoaderLogic, 'config_plus/erb_yaml_loader_logic'
|
8
|
+
autoload :Helper, 'config_plus/helper'
|
9
|
+
autoload :Loader, 'config_plus/loader'
|
10
|
+
autoload :Merger, 'config_plus/merger'
|
11
|
+
autoload :Node, 'config_plus/node'
|
12
|
+
end
|
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.5
|
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: 2017-01-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
@@ -37,6 +37,7 @@ files:
|
|
37
37
|
- lib/config_plus/base.rb
|
38
38
|
- lib/config_plus/config.rb
|
39
39
|
- lib/config_plus/default_loader_logic.rb
|
40
|
+
- lib/config_plus/erb_yaml_loader_logic.rb
|
40
41
|
- lib/config_plus/helper.rb
|
41
42
|
- lib/config_plus/loader.rb
|
42
43
|
- lib/config_plus/merger.rb
|
@@ -54,7 +55,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
54
55
|
requirements:
|
55
56
|
- - ">="
|
56
57
|
- !ruby/object:Gem::Version
|
57
|
-
version:
|
58
|
+
version: 1.9.2
|
58
59
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
59
60
|
requirements:
|
60
61
|
- - ">="
|
@@ -62,7 +63,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
62
63
|
version: '0'
|
63
64
|
requirements: []
|
64
65
|
rubyforge_project:
|
65
|
-
rubygems_version: 2.
|
66
|
+
rubygems_version: 2.5.1
|
66
67
|
signing_key:
|
67
68
|
specification_version: 4
|
68
69
|
summary: An easy-to-use, powerful configuration module using YAML files
|