config_plus 0.0.4 → 0.0.5
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 +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
|