config_plus 0.0.3 → 0.0.4
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 +44 -27
- data/lib/config_plus/base.rb +16 -16
- data/lib/config_plus/config.rb +5 -3
- data/lib/config_plus/helper.rb +8 -0
- data/lib/config_plus/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6ec4ceff4f380e588b0e43d98ff99ca52877041c
|
4
|
+
data.tar.gz: bed1b98ab63af2868bdb19fdf7942e6d85d828f2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b780e303acb8ce8a639bba7cd7f44120d59ec132230e081c0274032c784e709e75c3a5284aa230946fa8a7718880ecdcd1f5eda8378564ee6515961c38bea243
|
7
|
+
data.tar.gz: ef9f084b4b87ddb467278902b6b509f2ce7cf93b3459a2b9d57ec59fbc7a4442f3b787a2fc1cf6bb2d9317ac752025d52ac5161a604ffd21ed4dafe200de2301
|
data/README.ja.md
CHANGED
@@ -20,17 +20,17 @@ foo:
|
|
20
20
|
|
21
21
|
```ruby
|
22
22
|
ConfigPlus.generate(from: '/path/to/configuration/file.yml')
|
23
|
-
ConfigPlus.root
|
24
|
-
#=>
|
23
|
+
ConfigPlus.root.foo.baa.baz.spam
|
24
|
+
#=> 123
|
25
25
|
|
26
|
-
ConfigPlus.root['foo']['baa']['baz']
|
27
|
-
#=>
|
26
|
+
ConfigPlus.root['foo']['baa']['baz']['spam']
|
27
|
+
#=> 123
|
28
28
|
|
29
|
-
ConfigPlus.root
|
30
|
-
#=>
|
29
|
+
ConfigPlus.root[:foo][:baa][:baz][:spam]
|
30
|
+
#=> 123
|
31
31
|
|
32
|
-
ConfigPlus.root.get('foo.baa.baz')
|
33
|
-
#=>
|
32
|
+
ConfigPlus.root.get('foo.baa.baz.spam')
|
33
|
+
#=> 123
|
34
34
|
```
|
35
35
|
|
36
36
|
メソッド風のアクセスには多少の制限があります。
|
@@ -41,29 +41,46 @@ ConfigPlus.root.get('foo.baa.baz')
|
|
41
41
|
おおよそ `Hash` のメソッドを上書きできない(正確には `ConfigPlus::Node`
|
42
42
|
のメソッドを上書きできない)、ということになります。
|
43
43
|
|
44
|
+
なお、`ConfigPlus.generate from:` にディレクトリパスを指定すると、
|
45
|
+
指定したディレクトリを再帰的に検索して YAML ファイルを読み込みます。
|
46
|
+
|
47
|
+
```ruby
|
48
|
+
ConfigPlus.generate(from: '/path/to/configuration/directory')
|
49
|
+
```
|
50
|
+
|
51
|
+
ディレクトリパスやファイルパスを複数指定する場合は配列を使います。
|
52
|
+
|
53
|
+
```ruby
|
54
|
+
ConfigPlus.generate(from: ['/path/to/directory1', '/path/to/file1.yml'])
|
55
|
+
```
|
56
|
+
|
44
57
|
自動マッピング
|
45
58
|
--------------------------------------------------
|
46
|
-
YAML
|
59
|
+
YAML の構造と同じパスを持つクラスがある場合、
|
47
60
|
次のようにして設定情報にアクセスすることもできます。
|
48
61
|
|
62
|
+
```yaml
|
63
|
+
fizz:
|
64
|
+
buzz:
|
65
|
+
spam: bacon
|
66
|
+
ham: sausage
|
67
|
+
```
|
68
|
+
|
49
69
|
```ruby
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
70
|
+
ConfigPlus.generate(from: '/path/to/configuration/file.yml')
|
71
|
+
|
72
|
+
module Fizz
|
73
|
+
class Buzz
|
74
|
+
include ConfigPlus
|
55
75
|
end
|
56
76
|
end
|
57
77
|
|
58
|
-
|
59
|
-
#=>
|
60
|
-
|
61
|
-
Foo::Baa::Baz.config.spam
|
62
|
-
#=> 123
|
78
|
+
Fizz::Buzz.config.ham
|
79
|
+
#=> "sausage"
|
63
80
|
|
64
|
-
|
65
|
-
|
66
|
-
#=> "
|
81
|
+
buzz = Fizz::Buzz.new
|
82
|
+
buzz.config.spam
|
83
|
+
#=> "bacon"
|
67
84
|
```
|
68
85
|
|
69
86
|
`ConfigPlus` を `include` することで、クラスメソッドとインスタンスメソッドに
|
@@ -86,23 +103,23 @@ baz.config.ham
|
|
86
103
|
# sample-00.yml
|
87
104
|
sample:
|
88
105
|
setting_a:
|
89
|
-
spam:
|
90
|
-
ham:
|
91
|
-
egg:
|
106
|
+
spam: bacon
|
107
|
+
ham: sausage
|
108
|
+
egg: baked beans
|
92
109
|
```
|
93
110
|
|
94
111
|
```yml
|
95
112
|
# sample-01.yml
|
96
113
|
sample:
|
97
114
|
setting_a:
|
98
|
-
ham:
|
115
|
+
ham: spam
|
99
116
|
```
|
100
117
|
|
101
118
|
`sample-00.yml` がベースとなり、そこに `sample-01.yml` が上書きされて読み込まれます。
|
102
119
|
|
103
120
|
```ruby
|
104
121
|
Sample::SettingA.config
|
105
|
-
#=> {"spam"=>"
|
122
|
+
#=> {"spam"=>"bacon", "ham"=>"spam", "egg"=>"baked beans"}
|
106
123
|
```
|
107
124
|
|
108
125
|
その他
|
data/lib/config_plus/base.rb
CHANGED
@@ -36,22 +36,6 @@ module ConfigPlus
|
|
36
36
|
load
|
37
37
|
end
|
38
38
|
|
39
|
-
def included(base)
|
40
|
-
method_name = self.config.config_method
|
41
|
-
return unless method_name
|
42
|
-
own = self::Helper.config_for(base, self.root)
|
43
|
-
inheritance = inherited_config_of(base)
|
44
|
-
|
45
|
-
[base, base.singleton_class].each do |obj|
|
46
|
-
obj.instance_eval do
|
47
|
-
config = inheritance ?
|
48
|
-
::ConfigPlus::Merger.merge(inheritance, own || {}) : own
|
49
|
-
config = ::ConfigPlus::Node.new(config)
|
50
|
-
define_method method_name, -> { config }
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
39
|
protected
|
56
40
|
|
57
41
|
def config
|
@@ -81,5 +65,21 @@ module ConfigPlus
|
|
81
65
|
self::Merger.merge(hsh, h)
|
82
66
|
}
|
83
67
|
end
|
68
|
+
|
69
|
+
def included(base)
|
70
|
+
method_name = self.config.config_method
|
71
|
+
return unless method_name
|
72
|
+
own = self::Helper.config_for(base, self.root)
|
73
|
+
inheritance = inherited_config_of(base)
|
74
|
+
|
75
|
+
[base, base.singleton_class].each do |obj|
|
76
|
+
obj.instance_eval do
|
77
|
+
config = inheritance ?
|
78
|
+
::ConfigPlus::Merger.merge(inheritance, own || {}) : own
|
79
|
+
config = ::ConfigPlus::Node.new(config)
|
80
|
+
define_method method_name, -> { config }
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
84
|
end
|
85
85
|
end
|
data/lib/config_plus/config.rb
CHANGED
@@ -23,11 +23,13 @@ module ConfigPlus
|
|
23
23
|
end
|
24
24
|
|
25
25
|
def loader_logic
|
26
|
-
|
26
|
+
return @loader_logic if @loader_logic.is_a?(Class)
|
27
|
+
|
28
|
+
name = ::ConfigPlus::Helper.classify(@loader_logic.to_s)
|
27
29
|
name = "#{name}LoaderLogic"
|
28
30
|
raise "Unknown loader logic named `#{name}'" unless
|
29
|
-
ConfigPlus::const_defined?(name)
|
30
|
-
ConfigPlus::const_get(name)
|
31
|
+
::ConfigPlus::const_defined?(name)
|
32
|
+
::ConfigPlus::const_get(name)
|
31
33
|
end
|
32
34
|
end
|
33
35
|
end
|
data/lib/config_plus/helper.rb
CHANGED
@@ -15,6 +15,8 @@ module ConfigPlus
|
|
15
15
|
end
|
16
16
|
|
17
17
|
def underscore(name)
|
18
|
+
return name.underscore if name.respond_to?(:underscore)
|
19
|
+
|
18
20
|
name.gsub(/::/, '.')
|
19
21
|
.gsub(/((\A|\b)([A-Z]+))|([A-Z]+)/) do
|
20
22
|
next $3.downcase if $3
|
@@ -22,6 +24,12 @@ module ConfigPlus
|
|
22
24
|
end
|
23
25
|
end
|
24
26
|
|
27
|
+
def classify(name)
|
28
|
+
return name.classify if name.respond_to?(:classify)
|
29
|
+
name.to_s.gsub(/\/+/, '::')
|
30
|
+
.gsub(/_?([a-z]+)/) { $1.capitalize }
|
31
|
+
end
|
32
|
+
|
25
33
|
private
|
26
34
|
|
27
35
|
def matched_configs(object, node)
|
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.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- m4oda
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-09-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|