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