My question, though, is: does the way I implemented this go against an
established ruby idiom or violate "the ruby way" in any way? If so I'd
love to hear it.
Thanks!
-dave
[0] http://www.objectmentor.com/resources/articles/SelfShunPtrn.pdf
===== self_shunt.rb
require 'test/unit'
# Implements self-shunt pattern in Ruby.
# Self-shunt detailed at:
http://www.objectmentor.com/resources/articles/SelfShunPtrn.pdf
class Display
def display_item(item)
puts "The REAL display is showing: #item"
# God only knows what other processing might take place here ...
end
end
class Scanner
# accepts any object having a #display_item(item) method
# hooray duck typing :)
def initialize(display)
@display = display
end
def scan(item)
@display.display_item(item)
end
end
# completely pointless class to demonstrate the idea
class Item
def initialize(name)
@name = name
end
def to_s
@name
end
end
# first test the self-shunt
class ScannerTest < Test::Unit::TestCase
def test_scan
scanner = Scanner.new(self)
item = Item.new("test item")
scanner.scan(item)
assert_equal("test item", @displayed_item.to_s)
end
def display_item(item)
@displayed_item = item
end
end
# now do the real thing
def main # habits die hard... :)
display = Display.new
scanner = Scanner.new(display)
scanner.scan Item.new("now we are displaying the REAL item")
2.times {puts} # to pad between this output and the test output
end
main
I -so- needed this PDF - self-shunt is the one thing that really confused me
while skimming through Beck's TDD:BE. Now if I can figure out how to do this
in Java without getting a compiler induced headache, my job will be so much
more fun...
> main
>
Weakling ;P You forgot an if $0 == __FILE__, or however that idiom I never use
anyway goes. Next thing we know, you're hacking the interpreter to give you
warnings about mismatched signedness of variables...
Anyways, thanks a lot for the code snippet, I have something to grok as
relaxation at last.
David Vallner
Yeah, I remember seeing this pattern a while back somewhere else. Head
scratches and muttered "wtf" abounded. This made it ridiculously clear.
> Anyways, thanks a lot for the code snippet, I have something to grok as
> relaxation at last.
Sweet.