constellation 0.0.2 → 0.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.
- data/README.md +4 -3
- data/lib/constellation.rb +14 -8
- data/spec/constellation_spec.rb +26 -1
- metadata +10 -10
data/README.md
CHANGED
@@ -8,11 +8,11 @@ let your users set some configuration parameters.
|
|
8
8
|
|
9
9
|
### Ruby Parameters
|
10
10
|
|
11
|
-
Start by creating a class and calling `
|
11
|
+
Start by creating a class and calling `Constellation.enhance`:
|
12
12
|
|
13
13
|
```ruby
|
14
14
|
class MyConfiguration
|
15
|
-
|
15
|
+
Constellation.enhance self
|
16
16
|
end
|
17
17
|
```
|
18
18
|
|
@@ -39,6 +39,7 @@ ENV['MY_FOO'] = 'bar'
|
|
39
39
|
...
|
40
40
|
config = MyConfiguration.new
|
41
41
|
config.foo # => "bar"
|
42
|
+
```
|
42
43
|
|
43
44
|
### Configuration Files
|
44
45
|
|
@@ -110,4 +111,4 @@ class MyConfiguration
|
|
110
111
|
result
|
111
112
|
end
|
112
113
|
end
|
113
|
-
```
|
114
|
+
```
|
data/lib/constellation.rb
CHANGED
@@ -6,12 +6,10 @@ module Constellation
|
|
6
6
|
end
|
7
7
|
end
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
include Constellation::InstanceMethods
|
14
|
-
end
|
9
|
+
def self.enhance(klass)
|
10
|
+
klass.extend Constellation::ClassMethods
|
11
|
+
klass.env_params = {}
|
12
|
+
klass.send :include, Constellation::InstanceMethods
|
15
13
|
end
|
16
14
|
|
17
15
|
module ClassMethods
|
@@ -20,6 +18,8 @@ module Constellation
|
|
20
18
|
|
21
19
|
module InstanceMethods
|
22
20
|
|
21
|
+
include Enumerable
|
22
|
+
|
23
23
|
def initialize(data = nil)
|
24
24
|
@data = {}
|
25
25
|
reverse_merge(data || {})
|
@@ -29,10 +29,18 @@ module Constellation
|
|
29
29
|
fall_back_on_gems
|
30
30
|
end
|
31
31
|
|
32
|
+
def to_hash
|
33
|
+
@data.dup
|
34
|
+
end
|
35
|
+
|
32
36
|
def [](key)
|
33
37
|
@data[key.to_s]
|
34
38
|
end
|
35
39
|
|
40
|
+
def each(&block)
|
41
|
+
@data.each &block
|
42
|
+
end
|
43
|
+
|
36
44
|
def method_missing(name, *arguments, &block)
|
37
45
|
if data.has_key?(name.to_s)
|
38
46
|
data[name.to_s]
|
@@ -110,5 +118,3 @@ module Constellation
|
|
110
118
|
end
|
111
119
|
|
112
120
|
end
|
113
|
-
|
114
|
-
Class.send :include, Constellation::ActsAs
|
data/spec/constellation_spec.rb
CHANGED
@@ -10,7 +10,7 @@ describe Constellation do
|
|
10
10
|
|
11
11
|
let(:config_class) do
|
12
12
|
Class.new.tap do |c|
|
13
|
-
c
|
13
|
+
Constellation.enhance c
|
14
14
|
c.env_params = { foo: 'MY_FOO', bar: 'MY_BAR' }
|
15
15
|
c.config_file = path
|
16
16
|
c.load_from_gems = load_from_gems
|
@@ -121,4 +121,29 @@ describe Constellation do
|
|
121
121
|
it('parses with the given parse method') { subject.foo.should == 'colonfoo' }
|
122
122
|
end
|
123
123
|
end
|
124
|
+
|
125
|
+
describe '#to_hash' do
|
126
|
+
subject { config_class.new(foo: 'FOO') }
|
127
|
+
|
128
|
+
it 'returns a Hash containing the settings' do
|
129
|
+
subject.to_hash['foo'].should == 'FOO'
|
130
|
+
end
|
131
|
+
|
132
|
+
it 'returns a defensive copy' do
|
133
|
+
subject.to_hash['foo'] = 'BAR'
|
134
|
+
subject.foo.should == 'FOO'
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
describe 'enumerable methods' do
|
139
|
+
subject { config_class.new(foo: 'FOO') }
|
140
|
+
|
141
|
+
it 'enumerates over the settings' do
|
142
|
+
result = []
|
143
|
+
subject.each { |k,v| result << [k,v] }
|
144
|
+
result.should == [ ['foo', 'FOO'] ]
|
145
|
+
end
|
146
|
+
|
147
|
+
it('is an Enumerable') { subject.should be_kind_of(Enumerable) }
|
148
|
+
end
|
124
149
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: constellation
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-03-
|
12
|
+
date: 2012-03-10 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: multi_json
|
16
|
-
requirement: &
|
16
|
+
requirement: &70157990197000 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70157990197000
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rspec
|
27
|
-
requirement: &
|
27
|
+
requirement: &70157990196420 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70157990196420
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: fakefs
|
38
|
-
requirement: &
|
38
|
+
requirement: &70157990195860 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70157990195860
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: mocha
|
49
|
-
requirement: &
|
49
|
+
requirement: &70157990195320 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,7 +54,7 @@ dependencies:
|
|
54
54
|
version: '0'
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70157990195320
|
58
58
|
description: Load configuration settings from ENV, dotfiles, and gems
|
59
59
|
email:
|
60
60
|
- james.a.rosen@gmail.com
|