An example receiver that just records all callbacks generated by parsing a PDF file.
Useful for testing the contents of a file in an rspec/test-unit suite.
Usage:
PDF::Reader.open("somefile.pdf") do |reader| receiver = PDF::Reader::RegisterReceiver.new reader.page(1).walk(receiver) callback = receiver.first_occurance_of(:show_text) callback[:args].first.should == "Hellow World" end
# File lib/pdf/reader/register_receiver.rb, line 24 def initialize @callbacks = [] end
return the details for every time the specified callback was fired
# File lib/pdf/reader/register_receiver.rb, line 42 def all(methodname) callbacks.select { |cb| cb[:name] == methodname } end
# File lib/pdf/reader/register_receiver.rb, line 46 def all_args(methodname) all(methodname).map { |cb| cb[:args] } end
count the number of times a callback fired
# File lib/pdf/reader/register_receiver.rb, line 37 def count(methodname) callbacks.count { |cb| cb[:name] == methodname} end
return the details for the final time the specified callback was fired
# File lib/pdf/reader/register_receiver.rb, line 56 def final_occurance_of(methodname) all(methodname).last end
return the details for the first time the specified callback was fired
# File lib/pdf/reader/register_receiver.rb, line 51 def first_occurance_of(methodname) callbacks.find { |cb| cb[:name] == methodname } end
# File lib/pdf/reader/register_receiver.rb, line 32 def method_missing(methodname, *args) callbacks << {:name => methodname.to_sym, :args => args} end
# File lib/pdf/reader/register_receiver.rb, line 28 def respond_to?(meth) true end
return the first occurance of a particular series of callbacks
# File lib/pdf/reader/register_receiver.rb, line 61 def series(*methods) return nil if methods.empty? indexes = (0..(callbacks.size-1)) method_indexes = (0..(methods.size-1)) match = nil indexes.each do |idx| count = methods.size method_indexes.each do |midx| count -= 1 if callbacks[idx+midx] && callbacks[idx+midx][:name] == methods[midx] end if count == 0 return callbacks[idx, methods.size] end end nil end