config_plus 0.0.3 → 0.0.4

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: 93199817135b965a48712d1c659c03c93f6cd27b
4
- data.tar.gz: b6f9ddced4e4e05a876b4d78aafa6552b5589b2e
3
+ metadata.gz: 6ec4ceff4f380e588b0e43d98ff99ca52877041c
4
+ data.tar.gz: bed1b98ab63af2868bdb19fdf7942e6d85d828f2
5
5
  SHA512:
6
- metadata.gz: 49e59f9dc8bd1b3a5cd5d3ba14cc07eba8a3e38154d71198a37f95f7a3744a1e8cb874f93bd39c68e47f20f4fa776789290aff56486380d31694385b836ab1fe
7
- data.tar.gz: 594a37efbd171daf932e102f021abde34b221a31ddcf5b6b5baf6cc70a58298a76d52edbcd0b635aecf187eeb810bb5e8b26d50649d4bbb0479ec4c6b634cfaa
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[:foo][:baa][:baz]
24
- #=> {"spam"=>123, "ham"=>"abc"}
23
+ ConfigPlus.root.foo.baa.baz.spam
24
+ #=> 123
25
25
 
26
- ConfigPlus.root['foo']['baa']['baz']
27
- #=> {"spam"=>123, "ham"=>"abc"}
26
+ ConfigPlus.root['foo']['baa']['baz']['spam']
27
+ #=> 123
28
28
 
29
- ConfigPlus.root.foo.baa.baz
30
- #=> {"spam"=>123, "ham"=>"abc"}
29
+ ConfigPlus.root[:foo][:baa][:baz][:spam]
30
+ #=> 123
31
31
 
32
- ConfigPlus.root.get('foo.baa.baz')
33
- #=> {"spam"=>123, "ham"=>"abc"}
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 の構造と同じパスを持つクラス(上記の場合であれば `Foo::Baa::Baz` というクラス)がある場合、
59
+ YAML の構造と同じパスを持つクラスがある場合、
47
60
  次のようにして設定情報にアクセスすることもできます。
48
61
 
62
+ ```yaml
63
+ fizz:
64
+ buzz:
65
+ spam: bacon
66
+ ham: sausage
67
+ ```
68
+
49
69
  ```ruby
50
- module Foo
51
- module Baa
52
- class Baz
53
- include ConfigPlus
54
- end
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
- Foo::Baa::Baz.config
59
- #=> {"spam"=>123, "ham"=>"abc"}
60
-
61
- Foo::Baa::Baz.config.spam
62
- #=> 123
78
+ Fizz::Buzz.config.ham
79
+ #=> "sausage"
63
80
 
64
- baz = Foo::Baa::Baz.new
65
- baz.config.ham
66
- #=> "abc"
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: spam-00
90
- ham: ham-00
91
- egg: egg-00
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: ham-01
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"=>"spam-00", "ham"=>"ham-01", "egg"=>"egg-00"}
122
+ #=> {"spam"=>"bacon", "ham"=>"spam", "egg"=>"baked beans"}
106
123
  ```
107
124
 
108
125
  その他
@@ -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
@@ -23,11 +23,13 @@ module ConfigPlus
23
23
  end
24
24
 
25
25
  def loader_logic
26
- name = @loader_logic.to_s.capitalize
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
@@ -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)
@@ -1,3 +1,3 @@
1
1
  module ConfigPlus
2
- VERSION = '0.0.3'
2
+ VERSION = '0.0.4'
3
3
  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.3
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-04-03 00:00:00.000000000 Z
11
+ date: 2016-09-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec