porras / hyperdelegate

Rails plugin which adds two options to delegate to make it more flexible and support two frequent patterns in delegation.

This URL has Read+Write access

porras (author)
Sat Sep 20 05:48:02 -0700 2008
hyperdelegate / test / hyperdelegate_test.rb
100644 36 lines (28 sloc) 1.037 kb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
require 'test/unit'
require 'hyperdelegate'
 
Somewhere = Struct.new(:street, :city)
Someone = Struct.new(:name, :place) do
  delegate :street, :city, :to => :place
end
 
class HyperdelegateTest < Test::Unit::TestCase
  
  def test_delegation
    david = Someone.new("David", Somewhere.new("Paulina", "Chicago"))
    assert_equal "Paulina", david.street
    assert_equal "Chicago", david.city
  end
 
  def test_delegation_without_allow_nil
    Someone.class_eval { undef :street; delegate :street, :to => :place}
    david = Someone.new("David")
    assert_raise(NoMethodError) { david.street }
  end
  
  def test_delegation_with_allow_nil
    Someone.class_eval { undef :street; delegate :street, :to => :place, :allow_nil => true}
    david = Someone.new("David")
    assert_nil david.street
  end
  
  def test_delegation_with_target
    Someone.class_eval { delegate :town, :to => :place, :target => :city }
    david = Someone.new("David", Somewhere.new("Paulina", "Chicago"))
    assert_equal "Chicago", david.town
  end
  
end