ruby-conf 1.4.0 → 1.4.1
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/VERSION +1 -1
- data/lib/ruby-conf.rb +71 -20
- data/ruby-conf.gemspec +1 -1
- data/spec/lib/ruby-conf_spec.rb +44 -1
- metadata +3 -3
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.4.
|
1
|
+
1.4.1
|
data/lib/ruby-conf.rb
CHANGED
@@ -5,44 +5,95 @@ class RubyConf
|
|
5
5
|
@@configs = {}
|
6
6
|
|
7
7
|
class Config
|
8
|
+
attr_reader :attributes
|
9
|
+
|
8
10
|
def initialize
|
9
11
|
@attributes = {}
|
10
12
|
end
|
11
13
|
|
12
14
|
def [](name)
|
13
|
-
@attributes[name.to_sym]
|
15
|
+
value = @attributes[name.to_sym]
|
16
|
+
|
17
|
+
if value.is_a?(Proc)
|
18
|
+
value.call
|
19
|
+
else
|
20
|
+
value
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def []=(name,value)
|
25
|
+
@attributes[name.to_sym] = value
|
26
|
+
end
|
27
|
+
|
28
|
+
def inherit(name, parent)
|
29
|
+
self[name] = Config.new
|
30
|
+
self[name].attributes.merge! parent.attributes.clone
|
31
|
+
end
|
32
|
+
|
33
|
+
def []=(name,value)
|
34
|
+
@attributes[name.to_sym] = value
|
14
35
|
end
|
15
36
|
|
16
37
|
def method_missing(name, *args, &block)
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
elsif @attributes.has_key? name.to_sym
|
22
|
-
value = @attributes[name.to_sym]
|
23
|
-
|
24
|
-
if value.is_a?(Proc)
|
25
|
-
value.call
|
26
|
-
else
|
27
|
-
value
|
28
|
-
end
|
29
|
-
else
|
30
|
-
super
|
31
|
-
end
|
32
|
-
when 1:
|
33
|
-
@attributes[name.to_sym] = args.first
|
34
|
-
else
|
35
|
-
@attributes[name.to_sym] = args
|
38
|
+
if block_given?
|
39
|
+
_inherit(name, args)
|
40
|
+
_set_config_with_block(name,block)
|
41
|
+
return
|
36
42
|
end
|
43
|
+
|
44
|
+
super if 0 == args.size && !@attributes.has_key?(name.to_sym)
|
45
|
+
|
46
|
+
_set_or_get_attribute(name, args)
|
37
47
|
end
|
38
48
|
|
39
49
|
def respond_to?(name)
|
40
50
|
if @attributes.has_key? name.to_sym
|
41
51
|
true
|
52
|
+
elsif @parent
|
53
|
+
@parent.respond_to?(name)
|
42
54
|
else
|
43
55
|
super
|
44
56
|
end
|
45
57
|
end
|
58
|
+
|
59
|
+
private
|
60
|
+
|
61
|
+
def _set_or_get_attribute(name, args)
|
62
|
+
case(args.size)
|
63
|
+
when 0:
|
64
|
+
# config.something
|
65
|
+
# => 'value'
|
66
|
+
self[name]
|
67
|
+
when 1:
|
68
|
+
# config.something "value"
|
69
|
+
self[name] = args.first
|
70
|
+
else
|
71
|
+
# config.something "value", "value2"
|
72
|
+
self[name] = args
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def _update_config_with_block(name,block)
|
77
|
+
self[name].instance_eval(&block)
|
78
|
+
end
|
79
|
+
|
80
|
+
def _new_config_with_block(name, block)
|
81
|
+
self[name] = RubyConf.define(&block)
|
82
|
+
end
|
83
|
+
|
84
|
+
def _set_config_with_block(name, block)
|
85
|
+
if self[name].is_a?(Config)
|
86
|
+
_update_config_with_block(name,block)
|
87
|
+
else
|
88
|
+
_new_config_with_block(name,block)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
def _inherit(name, args)
|
93
|
+
if args.size > 0 && args.first.is_a?(Hash) && args.first.has_key?(:inherits)
|
94
|
+
inherit name, args.first[:inherits]
|
95
|
+
end
|
96
|
+
end
|
46
97
|
end
|
47
98
|
# Define a configuration:
|
48
99
|
#
|
data/ruby-conf.gemspec
CHANGED
data/spec/lib/ruby-conf_spec.rb
CHANGED
@@ -14,7 +14,7 @@ require 'ruby-conf'
|
|
14
14
|
|
15
15
|
describe RubyConf do
|
16
16
|
subject { RubyConf }
|
17
|
-
|
17
|
+
|
18
18
|
describe ".define" do
|
19
19
|
context "no arguments" do
|
20
20
|
it "returns anonymous config" do
|
@@ -24,6 +24,36 @@ describe RubyConf do
|
|
24
24
|
config.equality.should be_true
|
25
25
|
end
|
26
26
|
end
|
27
|
+
context ":inherit" do
|
28
|
+
let(:inherited_config) do
|
29
|
+
RubyConf.define "inherited_config" do
|
30
|
+
basic do
|
31
|
+
thing do
|
32
|
+
origin "swamp"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
laboritory :inherits => basic do
|
37
|
+
thing do
|
38
|
+
strong true
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
city :inherits => basic do
|
43
|
+
thing do
|
44
|
+
origin "ocean"
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
end
|
50
|
+
it "pre-loads a config with a existing config" do
|
51
|
+
inherited_config.laboritory.thing.origin.should == inherited_config.basic.thing.origin
|
52
|
+
end
|
53
|
+
it "does not overwrite values" do
|
54
|
+
inherited_config.city.thing.origin.should == "ocean"
|
55
|
+
end
|
56
|
+
end
|
27
57
|
context ":as" do
|
28
58
|
it "creates a global Constant" do
|
29
59
|
subject.define "rails_database", :as => :RailsDatabase do
|
@@ -34,6 +64,19 @@ describe RubyConf do
|
|
34
64
|
::RailsDatabase.production[:password].should_not be_nil
|
35
65
|
end
|
36
66
|
end
|
67
|
+
it "can reopen configs" do
|
68
|
+
config = subject.define do
|
69
|
+
godzilla do
|
70
|
+
spines false
|
71
|
+
awesome true
|
72
|
+
end
|
73
|
+
end
|
74
|
+
config.godzilla do
|
75
|
+
spines true
|
76
|
+
end
|
77
|
+
config.godzilla.spines.should == true
|
78
|
+
config.godzilla.awesome.should == true
|
79
|
+
end
|
37
80
|
it "returns a named config" do
|
38
81
|
config = subject.define "a_name" do
|
39
82
|
something "hi"
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby-conf
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 5
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 1
|
8
8
|
- 4
|
9
|
-
-
|
10
|
-
version: 1.4.
|
9
|
+
- 1
|
10
|
+
version: 1.4.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Curtis Schofield & Hollin Wilkins
|