config_module 1.0.0 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
+
[![Build Status](https://travis-ci.org/acook/config_module.png?branch=master)](https://travis-ci.org/acook/config_module)
|
6
9
|
[![Code Climate](https://codeclimate.com/github/acook/config_module.png)](https://codeclimate.com/github/acook/config_module)
|
7
10
|
[![Dependency Status](https://gemnasium.com/acook/config_module.png)](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
|