config_module 1.0.0 → 1.1.0
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/.travis.yml +2 -1
- data/README.markdown +89 -22
- data/lib/config_module/config_helper.rb +4 -1
- data/lib/config_module/config_option.rb +5 -1
- data/lib/config_module/version.rb +1 -1
- data/lib/config_module.rb +4 -1
- data/spec/config_module_spec.rb +4 -0
- data/spec/config_option_spec.rb +12 -0
- 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: d6792656b2d9b4c12032dbdc18f8cd23616d7e30
|
4
|
+
data.tar.gz: 0783bade48f7706ed7c98250955c0fb2e2f6f521
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d0898b4cf1494a0691235b4620bd76c2a829a1c8e268ac1804f02bbdb8b438cc4cb7278eb29ca0b6c0260c7306f10463957af74b22e4aa518f7e645866653da1
|
7
|
+
data.tar.gz: d44917bb9a1a70b59d03453ced028c8e7d05b64d7ce1173336c14dfacc040e18f0d5f4c432fdffcade9933dc0bf5530fddc4cb172340de872084599c83fa83c6
|
data/.travis.yml
CHANGED
data/README.markdown
CHANGED
@@ -3,6 +3,9 @@ ConfigModule
|
|
3
3
|
|
4
4
|
Load important configuration files into their own modules!
|
5
5
|
|
6
|
+
Reference documentation for the [Latest Released](http://rubydoc.info/gems/config_module/file/README.markdown) and [Edge Version](https://github.com/acook/config_module#readme) is available.
|
7
|
+
|
8
|
+
[](https://travis-ci.org/acook/config_module)
|
6
9
|
[](https://codeclimate.com/github/acook/config_module)
|
7
10
|
[](https://gemnasium.com/acook/config_module)
|
8
11
|
|
@@ -42,7 +45,7 @@ You only need to add two lines inside any module definition to make it a ConfigM
|
|
42
45
|
config_file './some_config.yml'
|
43
46
|
```
|
44
47
|
|
45
|
-
Done!
|
48
|
+
Done!
|
46
49
|
|
47
50
|
You're set up, and you can add any other functionality, aliases, or derived values to your module
|
48
51
|
like any other Ruby module.
|
@@ -50,7 +53,7 @@ like any other Ruby module.
|
|
50
53
|
Usage
|
51
54
|
-----
|
52
55
|
|
53
|
-
Now give it a try, any [valid](
|
56
|
+
Now give it a try, any [valid](#caveats)
|
54
57
|
key in your configuration file will now be a method:
|
55
58
|
|
56
59
|
```ruby
|
@@ -70,26 +73,80 @@ Extras
|
|
70
73
|
|
71
74
|
In addition to the basics, ConfigModule also supplies a couple of helpers you might find useful.
|
72
75
|
|
73
|
-
|
76
|
+
### Namespaces
|
77
|
+
|
78
|
+
You can also set the "namespace" you want to use, this is great for apps with different configurations per environment:
|
79
|
+
|
80
|
+
```ruby
|
81
|
+
namespace ENV['my_environment']
|
82
|
+
```
|
83
|
+
|
84
|
+
This will set the root of the configuration tree to whichever branch you specify, so you don't have to.
|
85
|
+
|
86
|
+
Depending on your configuration file's structure, it might be useful to pull out a deeper subtree, in that case you can include multiple keys separated by commas, or even give it an array.
|
87
|
+
|
88
|
+
Check out the [example section](#example) below to see how it's used.
|
89
|
+
|
90
|
+
### The `config` Method
|
91
|
+
|
92
|
+
There's also a new method available in your module that points to the root of your configuration data:
|
93
|
+
|
94
|
+
```ruby
|
95
|
+
def foo
|
96
|
+
config.foo
|
97
|
+
end
|
98
|
+
```
|
99
|
+
|
100
|
+
### Check for Presence of Configuration Keys with `has_key?`
|
101
|
+
|
102
|
+
There are times you want to provde defaults for values, and in typical Ruby fashion you would probably do this:
|
103
|
+
|
104
|
+
```ruby
|
105
|
+
MyConfig.some_option || 'my default value'
|
106
|
+
```
|
107
|
+
|
108
|
+
Occassionally though, that won't be good enough because the value could intentionally be `false` or even `nil`. In those situations, you might want to check to see if the key exists (especially useful along with namespaces). Much like a Hash, you can use the `has_key?` method and do something like:
|
109
|
+
|
110
|
+
```ruby
|
111
|
+
if MyConfig.has_key? :some_option then
|
112
|
+
MyConfig.some_option
|
113
|
+
else
|
114
|
+
'my default value'
|
115
|
+
end
|
116
|
+
```
|
117
|
+
|
118
|
+
### Hash-like Access
|
119
|
+
|
120
|
+
You can access config options like a hash too, if you want:
|
74
121
|
|
75
122
|
```ruby
|
76
|
-
|
123
|
+
MyConfig[:some_key].is_a? Hash #=> true
|
77
124
|
```
|
78
125
|
|
79
|
-
This
|
80
|
-
|
81
|
-
2. There's also a new method available in your module that points directly to the raw configuration data:
|
82
|
-
|
126
|
+
This is useful mainly when you'd rather get a `nil` instead of raising an error for nonexistant keys:
|
127
|
+
|
83
128
|
```ruby
|
84
|
-
|
129
|
+
MyConfig[:nonexistant_key] #=> nil
|
130
|
+
MyConfig.nonexistant_key #=> raises ConfigModule::ConfigOption::NotFoundError
|
85
131
|
```
|
86
|
-
|
87
|
-
Don't overwrite this method!
|
88
132
|
|
89
|
-
|
90
|
-
|
133
|
+
It'll also avoid any naming conflicts that might arise between methods defined on ConfigModule or ConfigOption and your key names. You can use it in concert with the above `config` method instead of `self` to enhance readability:
|
134
|
+
|
91
135
|
```ruby
|
92
|
-
|
136
|
+
def bar
|
137
|
+
config[:namespace]
|
138
|
+
end
|
139
|
+
```
|
140
|
+
|
141
|
+
|
142
|
+
### Enumerable
|
143
|
+
|
144
|
+
`ConfigOption` is the way ConfigModule packages up subtrees, and unlike `OpenStruct`, it is `Enumerable`:
|
145
|
+
|
146
|
+
```ruby
|
147
|
+
MyConfig.some_key_with_subkeys.each do |subkey|
|
148
|
+
puts subkey
|
149
|
+
end
|
93
150
|
```
|
94
151
|
|
95
152
|
Example
|
@@ -99,9 +156,10 @@ Given a YAML file `./config/example.yml':
|
|
99
156
|
|
100
157
|
```yaml
|
101
158
|
---
|
102
|
-
:
|
103
|
-
:
|
104
|
-
|
159
|
+
:example:
|
160
|
+
:production:
|
161
|
+
:foo: bar
|
162
|
+
:noodle: boom!
|
105
163
|
```
|
106
164
|
|
107
165
|
And you set up your module:
|
@@ -113,12 +171,18 @@ module ExampleConfig
|
|
113
171
|
extend ConfigModule
|
114
172
|
|
115
173
|
config_file './config/example.yml'
|
116
|
-
namespace Rails.env
|
174
|
+
namespace :example, Rails.env
|
117
175
|
|
118
176
|
module_function
|
119
177
|
|
120
178
|
def kanoodle
|
121
|
-
'ka' +
|
179
|
+
'ka' + noodle
|
180
|
+
end
|
181
|
+
|
182
|
+
def all_keys
|
183
|
+
config.map do |key, _|
|
184
|
+
key
|
185
|
+
end
|
122
186
|
end
|
123
187
|
end
|
124
188
|
```
|
@@ -127,7 +191,10 @@ Then you can use it like this:
|
|
127
191
|
|
128
192
|
```ruby
|
129
193
|
ExampleConfig.foo #=> 'bar'
|
194
|
+
ExampleConfig[:foo] #=> 'bar'
|
195
|
+
ExampleConfig[:notakey] #=> nil
|
130
196
|
ExampleConfig.kanoodle #=> 'kaboom!'
|
197
|
+
ExampleConfig.all_keys #=> [:foo, :noodle]
|
131
198
|
```
|
132
199
|
|
133
200
|
Pretty nifty, huh?
|
@@ -135,8 +202,8 @@ Pretty nifty, huh?
|
|
135
202
|
Caveats
|
136
203
|
-------
|
137
204
|
|
138
|
-
- **Q:** You mention "valid key". What's a valid key?
|
139
|
-
- **A:** It's any object that you can call `.to_sym` on!
|
205
|
+
- **Q:** You mention "valid key". What's a valid key?
|
206
|
+
- **A:** It's any object that you can call `.to_sym` on (same as `OpenStruct`)!
|
140
207
|
|
141
208
|
Who made this anyway?
|
142
209
|
---------------------
|
@@ -144,4 +211,4 @@ Who made this anyway?
|
|
144
211
|
I'm glad you asked!
|
145
212
|
|
146
213
|
Anthony M. Cook 2013
|
147
|
-
|
214
|
+
|
@@ -19,7 +19,10 @@ module ConfigModule
|
|
19
19
|
raise
|
20
20
|
end
|
21
21
|
end
|
22
|
-
|
22
|
+
|
23
|
+
def field_lookup_handler name, source, *args, &block
|
24
|
+
config[name]
|
25
|
+
end
|
23
26
|
|
24
27
|
def load_config
|
25
28
|
@raw_config = YAML.load_file config_file
|
@@ -19,10 +19,14 @@ module ConfigModule
|
|
19
19
|
@table[name.to_sym]
|
20
20
|
end
|
21
21
|
|
22
|
+
def has_key? key
|
23
|
+
@table.has_key? key
|
24
|
+
end
|
25
|
+
|
22
26
|
def method_missing name, *args, &block
|
23
27
|
result = super
|
24
28
|
|
25
|
-
if result || @table.
|
29
|
+
if result || @table.has_key?(name) then
|
26
30
|
self.class.wrap result
|
27
31
|
else
|
28
32
|
raise(
|
data/lib/config_module.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
require 'ostruct'
|
2
2
|
require 'yaml'
|
3
|
-
require 'pry'
|
4
3
|
|
5
4
|
require_relative 'config_module/version'
|
6
5
|
require_relative 'config_module/exceptions'
|
@@ -16,6 +15,10 @@ module ConfigModule
|
|
16
15
|
__config_module_helper.config
|
17
16
|
end
|
18
17
|
|
18
|
+
def has_key? key
|
19
|
+
__config_module_helper.config.has_key? key
|
20
|
+
end
|
21
|
+
|
19
22
|
protected
|
20
23
|
|
21
24
|
def config_file new_config_file
|
data/spec/config_module_spec.rb
CHANGED
@@ -17,6 +17,10 @@ spec 'config modules return correct data using []' do
|
|
17
17
|
ExampleConfig[:foo] == 'bar'
|
18
18
|
end
|
19
19
|
|
20
|
+
spec 'when using [], return nil for nonexistant keys' do
|
21
|
+
ExampleConfig[:nonexistant] == nil
|
22
|
+
end
|
23
|
+
|
20
24
|
spec 'nested hash values are properly wrapped' do
|
21
25
|
ExampleConfig.dictionary.class == ConfigModule::ConfigOption
|
22
26
|
end
|
data/spec/config_option_spec.rb
CHANGED
@@ -15,6 +15,18 @@ spec 'ConfigOptions are Enumerable' do
|
|
15
15
|
opt.map{|k,v| v[:b]} == [5]
|
16
16
|
end
|
17
17
|
|
18
|
+
spec 'identifies the presence of keys' do
|
19
|
+
opt.has_key? :a
|
20
|
+
end
|
21
|
+
|
22
|
+
spec 'identifies the lack of keys' do
|
23
|
+
opt.has_key?('nonexistant') == false
|
24
|
+
end
|
25
|
+
|
26
|
+
spec 'identifies the presence of nested keys' do
|
27
|
+
opt.a.has_key? :b
|
28
|
+
end
|
29
|
+
|
18
30
|
spec 'to_ary' do
|
19
31
|
begin
|
20
32
|
opt.to_ary
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: config_module
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Anthony Cook
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-05-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: uspec
|