funfig 0.0.5 → 0.0.6
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/lib/funfig/declaration_sugar.rb +26 -2
- data/lib/funfig/group.rb +65 -0
- data/lib/funfig/root.rb +3 -3
- data/lib/funfig/version.rb +1 -1
- metadata +2 -2
@@ -23,10 +23,19 @@ module Funfig
|
|
23
23
|
end
|
24
24
|
end
|
25
25
|
|
26
|
+
class ProxyRef < BasicObject
|
27
|
+
def initialize(group)
|
28
|
+
@group = group
|
29
|
+
end
|
30
|
+
def method_missing(name, group, &block)
|
31
|
+
@group.reference name, group, &block
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
26
35
|
class Group
|
27
36
|
# syntax sugar proxy for declaring params
|
28
37
|
#
|
29
|
-
# :call-seq
|
38
|
+
# :call-seq:
|
30
39
|
# conf = Funfig.new do
|
31
40
|
# p.name_of_param :default_value
|
32
41
|
# p.other_param { calculate_default }
|
@@ -37,7 +46,7 @@ module Funfig
|
|
37
46
|
|
38
47
|
# syntax sugar proxy for declaring group
|
39
48
|
#
|
40
|
-
# :call-seq
|
49
|
+
# :call-seq:
|
41
50
|
# conf = Funfig.new do
|
42
51
|
# g.name_of_group do
|
43
52
|
# end
|
@@ -45,5 +54,20 @@ module Funfig
|
|
45
54
|
def self.g
|
46
55
|
@group_param ||= ProxyGroup.new(self)
|
47
56
|
end
|
57
|
+
|
58
|
+
# syntax sugar proxy for declaring references
|
59
|
+
#
|
60
|
+
# :call-seq:
|
61
|
+
# conf = Funfig.new do
|
62
|
+
# r.name_of_reference _.path.to.group do
|
63
|
+
# end
|
64
|
+
# end
|
65
|
+
#
|
66
|
+
# conf = Funfig.new do
|
67
|
+
# r.name_of_reference _.path.to.group
|
68
|
+
# end
|
69
|
+
def self.r
|
70
|
+
@ref_param ||= ProxyRef.new(self)
|
71
|
+
end
|
48
72
|
end
|
49
73
|
end
|
data/lib/funfig/group.rb
CHANGED
@@ -26,6 +26,8 @@ module Funfig
|
|
26
26
|
k = k.to_s.gsub('-', '_')
|
27
27
|
self.send("#{k}=", v)
|
28
28
|
}
|
29
|
+
else
|
30
|
+
raise "Could not use #{hash} as value for group #{_path}"
|
29
31
|
end
|
30
32
|
self
|
31
33
|
end
|
@@ -65,6 +67,14 @@ module Funfig
|
|
65
67
|
h
|
66
68
|
end
|
67
69
|
|
70
|
+
def to_yaml(explicit=false)
|
71
|
+
to_hash(explicit).to_yaml
|
72
|
+
end
|
73
|
+
|
74
|
+
def to_json(explicit=false)
|
75
|
+
to_hash(explicit).to_json
|
76
|
+
end
|
77
|
+
|
68
78
|
# Imitate aget
|
69
79
|
def [](k)
|
70
80
|
if self.class._params[k.to_sym]
|
@@ -133,6 +143,26 @@ module Funfig
|
|
133
143
|
|
134
144
|
# :startdoc:
|
135
145
|
|
146
|
+
def self._parent
|
147
|
+
@parent
|
148
|
+
end
|
149
|
+
|
150
|
+
def self._root
|
151
|
+
@parent._root
|
152
|
+
end
|
153
|
+
|
154
|
+
def self._
|
155
|
+
_root
|
156
|
+
end
|
157
|
+
|
158
|
+
def self.method_missing(name, *args)
|
159
|
+
(args.empty? && _params[name.to_sym]) || super
|
160
|
+
end
|
161
|
+
|
162
|
+
def self._path_proc
|
163
|
+
eval "lambda{ #{_path} }"
|
164
|
+
end
|
165
|
+
|
136
166
|
# Define named group of values
|
137
167
|
#
|
138
168
|
# :call-seq:
|
@@ -152,6 +182,7 @@ module Funfig
|
|
152
182
|
klass.send(:define_singleton_method, :_path) do
|
153
183
|
path
|
154
184
|
end
|
185
|
+
klass.instance_variable_set(:@parent, self)
|
155
186
|
|
156
187
|
define_method(name) do |*args, &block|
|
157
188
|
instance_variable_get(vname) ||
|
@@ -167,6 +198,7 @@ module Funfig
|
|
167
198
|
remove_instance_variable(vname) if instance_variable_defined?(vname)
|
168
199
|
end
|
169
200
|
klass.class_exec &block
|
201
|
+
klass
|
170
202
|
end
|
171
203
|
|
172
204
|
# define named parameter
|
@@ -216,6 +248,39 @@ module Funfig
|
|
216
248
|
end
|
217
249
|
end
|
218
250
|
|
251
|
+
# Create a reference to other group in config
|
252
|
+
#
|
253
|
+
# :call-seq:
|
254
|
+
# conf = Funfug.new do
|
255
|
+
# group :some do
|
256
|
+
# group :origin do
|
257
|
+
# param :first, 1
|
258
|
+
# param :second, 2
|
259
|
+
# end
|
260
|
+
# end
|
261
|
+
# group :awe do
|
262
|
+
# reference :copy, _.some.origin do
|
263
|
+
# # implicitly added:
|
264
|
+
# # param :first do _.some.origin.first end
|
265
|
+
# # param :second do _.some.origin.second end
|
266
|
+
# param :third, 3
|
267
|
+
# end
|
268
|
+
# end
|
269
|
+
def self.reference(name, refered, &block)
|
270
|
+
path_proc = refered._path_proc
|
271
|
+
refered_params = refered._params
|
272
|
+
group name do
|
273
|
+
refered_params.each do |name, value|
|
274
|
+
if value == true
|
275
|
+
param(name){ instance_exec(&path_proc).send(name) }
|
276
|
+
else
|
277
|
+
reference(name, value)
|
278
|
+
end
|
279
|
+
end
|
280
|
+
class_exec &block if block
|
281
|
+
end
|
282
|
+
end
|
283
|
+
|
219
284
|
# Create a copy of configuration scheme
|
220
285
|
#
|
221
286
|
# :call-seq:
|
data/lib/funfig/root.rb
CHANGED
data/lib/funfig/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: funfig
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
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: 2012-
|
12
|
+
date: 2012-07-26 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: Defines configuration schema with calculable defaults
|
15
15
|
email:
|