mediator 0.1.1 → 0.2.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/lib/mediator/parser.rb +1 -1
- data/lib/mediator/renderer.rb +1 -3
- data/lib/mediator.rb +14 -5
- data/mediator.gemspec +1 -1
- data/test/mediator_renderer_test.rb +23 -17
- metadata +1 -1
data/lib/mediator/parser.rb
CHANGED
|
@@ -17,7 +17,7 @@ class Mediator
|
|
|
17
17
|
|
|
18
18
|
def has? name, options = nil
|
|
19
19
|
selector = (options && options[:from]) || name
|
|
20
|
-
(options && options.has_key?(:value))
|
|
20
|
+
(options && options.has_key?(:value)) || mediator.data_has?(data,selector)
|
|
21
21
|
end
|
|
22
22
|
|
|
23
23
|
def id name, options = {}
|
data/lib/mediator/renderer.rb
CHANGED
|
@@ -17,7 +17,7 @@ class Mediator
|
|
|
17
17
|
|
|
18
18
|
def has? name, options = nil
|
|
19
19
|
selector = (options && options[:from]) || name
|
|
20
|
-
(options && options.has_key?(:value))
|
|
20
|
+
(options && options.has_key?(:value)) || mediator.subject_has?(selector)
|
|
21
21
|
end
|
|
22
22
|
|
|
23
23
|
def id name, options = {}
|
|
@@ -42,8 +42,6 @@ class Mediator
|
|
|
42
42
|
name = name[0..-2].intern
|
|
43
43
|
end
|
|
44
44
|
|
|
45
|
-
return unless has? name, options
|
|
46
|
-
|
|
47
45
|
value = get name, options
|
|
48
46
|
return if empty? value, options
|
|
49
47
|
|
data/lib/mediator.rb
CHANGED
|
@@ -137,17 +137,26 @@ class Mediator
|
|
|
137
137
|
Mediator::Renderer.new self
|
|
138
138
|
end
|
|
139
139
|
|
|
140
|
+
# True if subject can construct a value for name
|
|
141
|
+
|
|
142
|
+
def subject_has? name
|
|
143
|
+
subject.respond_to?(name) || subject.respond_to?(name.to_s)
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
# True if data can return a value for name
|
|
147
|
+
|
|
148
|
+
def data_has? data, name
|
|
149
|
+
data.has_key?(name) || data.has_key?(name.to_s)
|
|
150
|
+
end
|
|
151
|
+
|
|
140
152
|
# Gets the `name` property from `subject`. The default
|
|
141
153
|
# implementation calls the `name` method if it exists.
|
|
142
154
|
|
|
143
155
|
def get name
|
|
144
156
|
value = subject.send name if subject.respond_to? name
|
|
145
|
-
|
|
146
|
-
return value unless value.nil?
|
|
147
|
-
|
|
148
|
-
value ||= construct name
|
|
157
|
+
value = construct name if value.nil?
|
|
149
158
|
|
|
150
|
-
getting name, value
|
|
159
|
+
getting name, value unless value.nil?
|
|
151
160
|
end
|
|
152
161
|
|
|
153
162
|
# Called when getting `name` from `subject`. Can be used to
|
data/mediator.gemspec
CHANGED
|
@@ -221,7 +221,7 @@ describe Mediator::Renderer do
|
|
|
221
221
|
assert_equal Hash.new, d
|
|
222
222
|
end
|
|
223
223
|
|
|
224
|
-
it "optionally allows empty values
|
|
224
|
+
it "optionally allows empty values" do
|
|
225
225
|
c = Class.new Mediator do
|
|
226
226
|
def render! r
|
|
227
227
|
r.key :foo, empty: true
|
|
@@ -229,7 +229,6 @@ describe Mediator::Renderer do
|
|
|
229
229
|
end
|
|
230
230
|
|
|
231
231
|
s = OpenStruct.new
|
|
232
|
-
s.foo = nil
|
|
233
232
|
m = c.new s
|
|
234
233
|
d = m.render
|
|
235
234
|
e = { foo: nil }
|
|
@@ -237,21 +236,6 @@ describe Mediator::Renderer do
|
|
|
237
236
|
assert_equal e, d
|
|
238
237
|
end
|
|
239
238
|
|
|
240
|
-
it "ditches empty values when not defined in any case" do
|
|
241
|
-
c = Class.new Mediator do
|
|
242
|
-
def render! r
|
|
243
|
-
r.key :foo, empty: true
|
|
244
|
-
end
|
|
245
|
-
end
|
|
246
|
-
|
|
247
|
-
s = OpenStruct.new
|
|
248
|
-
m = c.new s
|
|
249
|
-
d = m.render
|
|
250
|
-
e = { }
|
|
251
|
-
|
|
252
|
-
assert_equal e, d
|
|
253
|
-
end
|
|
254
|
-
|
|
255
239
|
it "optionally maps names" do
|
|
256
240
|
c = Class.new Mediator do
|
|
257
241
|
def render! r
|
|
@@ -294,6 +278,28 @@ describe Mediator::Renderer do
|
|
|
294
278
|
|
|
295
279
|
assert_equal "bar", d[:foo]
|
|
296
280
|
end
|
|
281
|
+
|
|
282
|
+
it "can define its own access to data" do
|
|
283
|
+
c = Class.new Mediator do
|
|
284
|
+
def construct name
|
|
285
|
+
subject[name]
|
|
286
|
+
end
|
|
287
|
+
|
|
288
|
+
def subject_has? name
|
|
289
|
+
!!subject[name]
|
|
290
|
+
end
|
|
291
|
+
|
|
292
|
+
def render! r
|
|
293
|
+
r.key :foo
|
|
294
|
+
end
|
|
295
|
+
end
|
|
296
|
+
|
|
297
|
+
s = { :foo => "bar" }
|
|
298
|
+
m = c.new s
|
|
299
|
+
d = m.render
|
|
300
|
+
|
|
301
|
+
assert_equal "bar", d[:foo]
|
|
302
|
+
end
|
|
297
303
|
end
|
|
298
304
|
|
|
299
305
|
describe "one" do
|