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