mediator 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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)) || data.has_key?(selector) || data.has_key?(selector.to_s)
20
+ (options && options.has_key?(:value)) || mediator.data_has?(data,selector)
21
21
  end
22
22
 
23
23
  def id name, options = {}
@@ -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)) || mediator.subject.respond_to?(selector) || mediator.subject.respond_to?(selector.to_s)
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 if 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
@@ -9,7 +9,7 @@ Gem::Specification.new do |gem|
9
9
  gem.test_files = `git ls-files -- test/*`.split "\n"
10
10
  gem.name = "mediator"
11
11
  gem.require_paths = ["lib"]
12
- gem.version = "0.1.1"
12
+ gem.version = "0.2.0"
13
13
 
14
14
  gem.required_ruby_version = ">= 1.9.2"
15
15
  end
@@ -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 when defined" do
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
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mediator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors: