class Docx::PlaceholderObserver
Attributes
buffer[RW]
data_provider[R]
nodes_to_fix[RW]
state[RW]
Public Class Methods
new(data_provider)
click to toggle source
# File lib/docx/placeholder_observer.rb, line 6 def initialize(data_provider) @data_provider = data_provider @buffer = '' @state = :waiting_for_opening @nodes_to_fix = NodesToFix.new @fixes_to_make = [] end
Public Instance Methods
end_of_document()
click to toggle source
# File lib/docx/placeholder_observer.rb, line 20 def end_of_document make_fixes end
next_node(node)
click to toggle source
# File lib/docx/placeholder_observer.rb, line 14 def next_node(node) node.value.split(//).each_with_index do |c,index| next_char(node,index,c) end end
Private Instance Methods
add_char_to_buffer(node, index, c)
click to toggle source
# File lib/docx/placeholder_observer.rb, line 56 def add_char_to_buffer(node, index, c) @nodes_to_fix.remember(node,index) @buffer << c end
capturing_placeholder(node, index, c)
click to toggle source
# File lib/docx/placeholder_observer.rb, line 43 def capturing_placeholder(node, index, c) add_char_to_buffer(node,index,c) if buffer[-2..-1] == '||' key = buffer[2..-3] if data_provider.has_key?(key.to_sym) new_value = data_provider[key.to_sym] save_fix_for_later(new_value) end self.state = :waiting_for_opening truncate_buffer end end
make_fixes()
click to toggle source
# File lib/docx/placeholder_observer.rb, line 72 def make_fixes @fixes_to_make.reverse.each do |nodes_to_fix| nodes_to_fix.fix end @fixes_to_make = [] end
next_char(node, index, c)
click to toggle source
# File lib/docx/placeholder_observer.rb, line 28 def next_char(node, index, c) send(state, node, index, c) end
save_fix_for_later(val)
click to toggle source
# File lib/docx/placeholder_observer.rb, line 66 def save_fix_for_later(val) @nodes_to_fix.value = val @fixes_to_make << @nodes_to_fix @nodes_to_fix = NodesToFix.new end
truncate_buffer()
click to toggle source
# File lib/docx/placeholder_observer.rb, line 61 def truncate_buffer @buffer = '' @nodes_to_fix.forget end
waiting_for_opening(node, index, c)
click to toggle source
# File lib/docx/placeholder_observer.rb, line 32 def waiting_for_opening(node, index, c) if c == '|' add_char_to_buffer(node,index,c) if buffer == '||' self.state = :capturing_placeholder end else truncate_buffer end end