module AdHocTemplate::RecordReader::DefaultFormReader

Constants

BLOCK_HEAD
COMMENT_HEAD
EMPTY_LINE
ITERATION_HEAD
ITERATION_MARK
READERS_RE
SEPARATOR

Public Class Methods

dump(labels) click to toggle source
# File lib/ad_hoc_template/record_reader.rb, line 386
def self.dump(labels)
  iteration_keys, kv_keys, block_keys = categorize_keys(labels)

  key_value_part = format_key_value_pairs(kv_keys, labels)
  iteration_part = format_iteration_block(iteration_keys, labels)
  block_part = format_key_value_block(block_keys, labels)

  all_parts = [key_value_part, iteration_part, block_part].join($/)
  remove_redundant_newlines(all_parts)
end
read_record(input) click to toggle source
# File lib/ad_hoc_template/record_reader.rb, line 382
def self.read_record(input)
  ReaderState.new.read_record(input)
end

Private Class Methods

categorize_keys(labels) click to toggle source
# File lib/ad_hoc_template/record_reader.rb, line 422
def self.categorize_keys(labels)
  iteration_part, rest = labels.partition {|e| e[1].kind_of? Array }
                           .map {|e| e.map(&:first) }

  block_part, key_value_part = rest.partition do |e|
    LINE_END_RE =~ labels[e]
  end

  [iteration_part, key_value_part, block_part]
end
format_iteration_block(key_names, labels) click to toggle source
# File lib/ad_hoc_template/record_reader.rb, line 413
def self.format_iteration_block(key_names, labels)
  key_names.map do |iteration_label|
    iteration_block = labels[iteration_label].map do |sub_record|
      format_key_value_pairs(sub_record.keys, sub_record)
    end
    iteration_block.unshift("///@#{iteration_label}#{$/}")
  end.join($/)
end
format_key_value_block(key_names, labels) click to toggle source
# File lib/ad_hoc_template/record_reader.rb, line 405
def self.format_key_value_block(key_names, labels)
  [].tap do |blocks|
    key_names.each do |key|
      blocks.push "///@#{key}#{$/ * 2}#{labels[key]}"
    end
  end.join($/)
end
format_key_value_pairs(key_names, labels={}) click to toggle source
# File lib/ad_hoc_template/record_reader.rb, line 401
def self.format_key_value_pairs(key_names, labels={})
  key_names.map {|key| "#{key}: #{labels[key]}#{$/}" }.join
end
remove_redundant_newlines(str) click to toggle source
# File lib/ad_hoc_template/record_reader.rb, line 397
def self.remove_redundant_newlines(str)
  str.sub(/(#{$/}+)\Z/, $/)
end