message recorder

Get Version

1.0.2

→ ‘message-recorder’

What

Message::Recorder is a tool to record messages send to Ruby objects.

Installing

sudo gem install message-recorder

The basics

The rdocs are here

This snippet will first record a downcase message and after that it will replay the recorded messages on some objects.

recorder = Message::Recorder.new
recorder.record.downcase
recorder.send_to("HELLO") # => ["hello"]
recorder.send_to("WORLD") # => ["world"]

This is an example of branching. the with_results method accepts a block which is used to define multiple message chains at once.

recorder = Message::Recorder.new
recorder.record.downcase.with_results do
  intern
  capitalize
end

recorder.send_to("HELLO") # => [:hello, "Hello"]

Here we use two before filters to make sure that we get a non-nil adn non-empty subject. And we use an after filter to print the result of each message call.

recorder = Message::Recorder.new
recorder.record.strip.downcase
recorder.before do |message_call|
  message_call.subject.nil? == false
end
recorder.before do |message_call|
  message_call.subject.empty? == false
end
recorder.after do |message_call|
  puts "#{message_call.method_name}: #{message_call.return_value.inspect}"
end
recorder.send_to(nil)           # => nil
recorder.send_to("")            # => nil
recorder.send_to("Mr. Henry")   # => "mr. henry"
recorder.send_to(" Mr. Simon ") # => "mr. henry"

Print out:
strip: "Mr. Henry" 
downcase: "mr. henry" 
strip: "Mr. Simon" 
downcase: "mr. simon" 

Demonstration of usage

This is a more complex example with nested branches.

recorder = Message::Recorder.new
recorder.record.compact.with_result do
  collect { |s| s.intern }
  collect { |s| s.capitalize }.with_results do
    collect { |s| s.concat " world" }
    collect { |s| s.concat " simon" }
  end.with_results do
    collect { |s| s.concat "!" }
    collect { |s| s.concat "?" }
  end
end

results = recorder.send_to([nil, "hello", nil, "bye", nil])
results == [ # the result is ...
  [:hello, :bye],
  ["Hello world!", "Bye world!"],
  ["Hello simon!", "Bye simon!"],
  ["Hello world?", "Bye world?"],
  ["Hello simon?", "Bye simon?"]
]

License

This code is free to use under the terms of the MIT license.

Contact

Comments are welcome. Send an email to Simon Menke

Simon Menke, 15th February 2008
Theme extended from Paul Battley