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.
@@ -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: