Class: PDF::Reader::RegisterReceiver

Inherits:
Object
  • Object
show all
Defined in:
lib/pdf/reader/register_receiver.rb

Overview

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

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeRegisterReceiver

: () -> void



29
30
31
# File 'lib/pdf/reader/register_receiver.rb', line 29

def initialize
  @callbacks = [] #: Array[Hash[Symbol, untyped]]
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(methodname, *args) ⇒ Object

: (Symbol, *untyped) -> void



39
40
41
# File 'lib/pdf/reader/register_receiver.rb', line 39

def method_missing(methodname, *args)
  callbacks << {:name => methodname.to_sym, :args => args}
end

Instance Attribute Details

#callbacksObject

: Array[Hash[Symbol, untyped]]



26
27
28
# File 'lib/pdf/reader/register_receiver.rb', line 26

def callbacks
  @callbacks
end

Instance Method Details

#all(methodname) ⇒ Object

return the details for every time the specified callback was fired : (Symbol) -> Array[Hash[Symbol, untyped]]



51
52
53
# File 'lib/pdf/reader/register_receiver.rb', line 51

def all(methodname)
  callbacks.select { |cb| cb[:name] == methodname }
end

#all_args(methodname) ⇒ Object

: (Symbol) -> Array[Array]



56
57
58
# File 'lib/pdf/reader/register_receiver.rb', line 56

def all_args(methodname)
  all(methodname).map { |cb| cb[:args] }
end

#count(methodname) ⇒ Object

count the number of times a callback fired : (Symbol) -> Integer



45
46
47
# File 'lib/pdf/reader/register_receiver.rb', line 45

def count(methodname)
  callbacks.count { |cb| cb[:name] == methodname}
end

#final_occurance_of(methodname) ⇒ Object

return the details for the final time the specified callback was fired : (Symbol) -> Hash[Symbol, untyped]?



68
69
70
# File 'lib/pdf/reader/register_receiver.rb', line 68

def final_occurance_of(methodname)
  all(methodname).last
end

#first_occurance_of(methodname) ⇒ Object

return the details for the first time the specified callback was fired : (Symbol) -> Hash[Symbol, untyped]?



62
63
64
# File 'lib/pdf/reader/register_receiver.rb', line 62

def first_occurance_of(methodname)
  callbacks.find { |cb| cb[:name] == methodname }
end

#respond_to?(meth) ⇒ Boolean

: (untyped) -> bool

Returns:

  • (Boolean)


34
35
36
# File 'lib/pdf/reader/register_receiver.rb', line 34

def respond_to?(meth)
  true
end

#series(*methods) ⇒ Object

return the first occurance of a particular series of callbacks : (*Symbol) -> Array[Hash[Symbol, untyped]]?



74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# File 'lib/pdf/reader/register_receiver.rb', line 74

def series(*methods)
  return nil if methods.empty?

  indexes = (0..(callbacks.size-1))
  method_indexes = (0..(methods.size-1))

  indexes.each do |idx|
    count = methods.size
    method_indexes.each do |midx|
      res = callbacks[idx+midx]
      if res && res[:name] == methods[midx]
        count -= 1
      end
    end
    if count == 0
      return callbacks[idx, methods.size]
    end
  end
  nil
end