class MTIF::Post
Constants
- CSV_KEYS
- DATE_FORMAT
- FIELD_SEPARATOR
- MULTILINE_KEYS
- MULTIVALUE_KEYS
- POST_SEPARATOR
- SINGLE_VALUE_KEYS
- VALID_KEYS
Attributes
data[RW]
source[RW]
Public Class Methods
new(content)
click to toggle source
# File lib/mtif/posts.rb, line 44 def initialize(content) @source = content @data = {} MULTIVALUE_KEYS.each do |key| @data[key] = [] end parse_source end
Public Instance Methods
multiline_multivalue_keys()
click to toggle source
# File lib/mtif/posts.rb, line 40 def multiline_multivalue_keys MULTILINE_KEYS & MULTIVALUE_KEYS end
multiline_single_value_keys()
click to toggle source
# File lib/mtif/posts.rb, line 36 def multiline_single_value_keys MULTILINE_KEYS & SINGLE_VALUE_KEYS end
single_line_multivalue_keys()
click to toggle source
# File lib/mtif/posts.rb, line 32 def single_line_multivalue_keys MULTIVALUE_KEYS - MULTILINE_KEYS end
single_line_single_value_keys()
click to toggle source
# File lib/mtif/posts.rb, line 28 def single_line_single_value_keys SINGLE_VALUE_KEYS - MULTILINE_KEYS end
to_mtif()
click to toggle source
# File lib/mtif/posts.rb, line 55 def to_mtif result = [] single_line_single_value_keys.each do |key| value = self.send(key) next if value.nil? || (value.respond_to?(:empty) && value.empty?) result << "#{mtif_key(key)}: #{mtif_value(value)}" end single_line_multivalue_keys.each do |key| values = self.send(key) next if values.nil? || (values.respond_to?(:empty) && values.empty?) if CSV_KEYS.include?(key) values = [ values.map{|v| v.include?("\s") ? "\"#{v}\"" : v }.join(',') ] end values.each do |value| result << "#{mtif_key(key)}: #{mtif_value(value)}" end end multiline_single_value_keys.each do |key| value = self.send(key) next if value.nil? || (value.respond_to?(:empty) && value.empty?) result << FIELD_SEPARATOR result << "#{mtif_key(key)}:\n#{mtif_value(value)}" end multiline_multivalue_keys.each do |key| values = self.send(key) next if values.nil? || (values.respond_to?(:empty) && values.empty?) values.each do |value| result << FIELD_SEPARATOR result << "#{mtif_key(key)}:\n#{mtif_value(value)}" end end result << FIELD_SEPARATOR unless result.last == FIELD_SEPARATOR #close the final field result << POST_SEPARATOR # close the post result.join("\n") + "\n" end
valid_key?(key)
click to toggle source
# File lib/mtif/posts.rb, line 24 def valid_key?(key) valid_keys.include?(key.to_sym) end
valid_keys()
click to toggle source
# File lib/mtif/posts.rb, line 20 def valid_keys VALID_KEYS end
Private Instance Methods
convert_to_native_type(raw_value)
click to toggle source
# File lib/mtif/posts.rb, line 138 def convert_to_native_type(raw_value) case raw_value when /^\d+$/ raw_value.to_i when /^\d{2}\/\d{2}\/\d{4} \d{2}:\d{2}:\d{2} [AP]M/ Time.strptime(raw_value, DATE_FORMAT) else raw_value end end
method_missing(method, *args, &block)
click to toggle source
Calls superclass method
# File lib/mtif/posts.rb, line 106 def method_missing(method, *args, &block) key = method.to_s.chomp('=').to_sym if valid_key?(key) if key == method data[key] else data[key] = args.first end else super end end
mtif_key(key)
click to toggle source
# File lib/mtif/posts.rb, line 130 def mtif_key(key) key.to_s.tr('_', ' ').upcase end
mtif_key_to_key(raw_key)
click to toggle source
# File lib/mtif/posts.rb, line 126 def mtif_key_to_key(raw_key) raw_key.strip.downcase.tr(' ','_').to_sym unless raw_key.nil? end
mtif_value(value)
click to toggle source
# File lib/mtif/posts.rb, line 134 def mtif_value(value) value.kind_of?(Time) ? value.strftime(DATE_FORMAT) : value end
parse_source()
click to toggle source
# File lib/mtif/posts.rb, line 166 def parse_source source.slice_before(/^#{FIELD_SEPARATOR}/).each do |lines| if lines.first =~ /^#{FIELD_SEPARATOR}/ && lines.size > 1 # Multiline data store_data(lines.shift(2).last.chomp(":\n"), lines.join.strip) elsif lines.first =~ /^[A-Z ]+: / # Single-line data lines.each do |line| unless line.strip.empty? key, value = line.strip.split(": ", 2) store_data(key, value) end end end end end
respond_to_missing?(method, include_all)
click to toggle source
Calls superclass method
# File lib/mtif/posts.rb, line 120 def respond_to_missing?(method, include_all) key = method.to_s.chomp('=').to_sym valid_key?(key) || super end
store_data(raw_key, raw_value)
click to toggle source
# File lib/mtif/posts.rb, line 149 def store_data(raw_key, raw_value) key = mtif_key_to_key(raw_key) value = convert_to_native_type(raw_value) if MULTIVALUE_KEYS.include?(key) if CSV_KEYS.include?(key) value.split(',').each do |v| self.data[key] << v.gsub(/^\"|\"$/, '') unless v.empty? end else self.data[key] << value unless value.empty? end else self.data[key] = value end end