ruby-conf 2.7.2 → 2.8.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/VERSION +1 -1
- data/lib/ruby-conf.rb +28 -6
- data/ruby-conf.gemspec +2 -2
- data/spec/lib/ruby-conf_spec.rb +40 -0
- metadata +3 -3
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.
|
1
|
+
2.8.0
|
data/lib/ruby-conf.rb
CHANGED
@@ -73,7 +73,7 @@ module RubyConf
|
|
73
73
|
end
|
74
74
|
|
75
75
|
class Config
|
76
|
-
attr_reader :__rc_attributes, :__rc_parent, :__rc_name, :__rc_chains, :__rc_locked
|
76
|
+
attr_reader :__rc_attributes, :__rc_parent, :__rc_name, :__rc_chains, :__rc_locked, :__rc_static_values
|
77
77
|
|
78
78
|
def __rc_root() __rc_parent ? __rc_parent.__rc_root : self end
|
79
79
|
def detach(parent = nil)
|
@@ -85,7 +85,7 @@ module RubyConf
|
|
85
85
|
end
|
86
86
|
|
87
87
|
def initialize(name = nil, parent = nil, &block)
|
88
|
-
@__rc_locked, @__rc_attributes, @__rc_chains, @__rc_parent = false, {}, [], parent
|
88
|
+
@__rc_locked, @__rc_attributes, @__rc_chains, @__rc_parent, @__rc_static_values = false, {}, [], parent, {}
|
89
89
|
@__rc_name = name.to_sym if name
|
90
90
|
instance_eval(&block) if block_given?
|
91
91
|
__rc_lock
|
@@ -97,6 +97,12 @@ module RubyConf
|
|
97
97
|
self
|
98
98
|
end
|
99
99
|
|
100
|
+
def __rc_static_proc(name, *args)
|
101
|
+
name = name.to_sym
|
102
|
+
static_key = "#{name}:#{args}"
|
103
|
+
@__rc_static_values[static_key] || self[name, *args]
|
104
|
+
end
|
105
|
+
|
100
106
|
def [](name, *args)
|
101
107
|
name = name.to_sym
|
102
108
|
value = @__rc_attributes[name]
|
@@ -109,7 +115,10 @@ module RubyConf
|
|
109
115
|
else
|
110
116
|
@@stack << name
|
111
117
|
begin
|
112
|
-
__rc_root.instance_exec(*args, &value)
|
118
|
+
value = __rc_root.instance_exec(*args, &value)
|
119
|
+
static_key = "#{name}:#{args}"
|
120
|
+
@__rc_static_values[static_key] = value
|
121
|
+
value
|
113
122
|
ensure
|
114
123
|
@@stack.delete(name)
|
115
124
|
end
|
@@ -198,11 +207,24 @@ module RubyConf
|
|
198
207
|
end
|
199
208
|
|
200
209
|
if args.empty?
|
201
|
-
modifier == '?'
|
210
|
+
if modifier == '?'
|
211
|
+
!!self[name]
|
212
|
+
elsif modifier == '!' && __rc_attributes[name.to_sym].is_a?(Proc)
|
213
|
+
__rc_static_proc(name)
|
214
|
+
else
|
215
|
+
self[name]
|
216
|
+
end
|
202
217
|
else
|
203
218
|
arg = args.size == 1 ? args.first : args
|
204
|
-
|
205
|
-
|
219
|
+
if @__rc_locked && __rc_attributes[name.to_sym].is_a?(Proc)
|
220
|
+
if modifier == '!'
|
221
|
+
__rc_static_proc(name, *args)
|
222
|
+
else
|
223
|
+
self[name, *args]
|
224
|
+
end
|
225
|
+
else
|
226
|
+
self[name] = arg
|
227
|
+
end
|
206
228
|
end
|
207
229
|
end
|
208
230
|
end
|
data/ruby-conf.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "ruby-conf"
|
8
|
-
s.version = "2.
|
8
|
+
s.version = "2.8.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Curtis Schofield & Hollin Wilkins & Mason"]
|
12
|
-
s.date = "2013-
|
12
|
+
s.date = "2013-02-28"
|
13
13
|
s.description = "rubyconf is a ruby configuration dsl that aims to make it simple to write and read configurations for ruby apps without a yaml or xml file"
|
14
14
|
s.email = "blazingpair@blazingcloud.net"
|
15
15
|
s.extra_rdoc_files = [
|
data/spec/lib/ruby-conf_spec.rb
CHANGED
@@ -13,6 +13,46 @@ describe RubyConf do
|
|
13
13
|
subject { RubyConf }
|
14
14
|
|
15
15
|
describe "lambda arguments" do
|
16
|
+
|
17
|
+
it "uses bang to ensure lambdas get called only once" do
|
18
|
+
RubyConf.define :Lambang do
|
19
|
+
noargs -> { "#{rand(1000)}" }
|
20
|
+
bang ->(a, b) { "#{a}-#{b}-#{rand(1000)}" }
|
21
|
+
end
|
22
|
+
|
23
|
+
normal = Lambang.noargs
|
24
|
+
Lambang.noargs!.should == normal
|
25
|
+
Lambang.noargs.should_not == normal
|
26
|
+
|
27
|
+
bang = Lambang.noargs!
|
28
|
+
Lambang.noargs!.should == bang
|
29
|
+
|
30
|
+
#reset it by not using bang
|
31
|
+
Lambang.noargs.should_not == bang
|
32
|
+
|
33
|
+
bang2 = Lambang.noargs!
|
34
|
+
bang2.should_not == bang
|
35
|
+
Lambang.noargs!.should == bang2
|
36
|
+
|
37
|
+
|
38
|
+
normal = Lambang.bang(:a, :b)
|
39
|
+
Lambang.bang!(:a, :b).should == normal
|
40
|
+
Lambang.bang(:a, :b).should_not == normal
|
41
|
+
|
42
|
+
bangcd = Lambang.bang!(:c, :d)
|
43
|
+
bangef = Lambang.bang!(:e, :f)
|
44
|
+
Lambang.bang!(:c, :d).should == bangcd
|
45
|
+
Lambang.bang!(:e, :f).should == bangef
|
46
|
+
Lambang.bang!(:c, :d).should == bangcd
|
47
|
+
|
48
|
+
#reset it by not using bang
|
49
|
+
Lambang.bang(:c, :d).should_not == bangcd
|
50
|
+
|
51
|
+
bangcd2 = Lambang.bang!(:c, :d)
|
52
|
+
bangcd2.should_not == bangcd
|
53
|
+
Lambang.bang!(:c, :d).should == bangcd2
|
54
|
+
end
|
55
|
+
|
16
56
|
it "handles hash arguments properly" do
|
17
57
|
RubyConf.define :LambdaHashes do
|
18
58
|
key ->(options) {
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby-conf
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.8.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-02-28 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: awesome_print
|
@@ -131,7 +131,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
131
131
|
version: '0'
|
132
132
|
segments:
|
133
133
|
- 0
|
134
|
-
hash:
|
134
|
+
hash: 1480920585190021958
|
135
135
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
136
136
|
none: false
|
137
137
|
requirements:
|