class Arsenicum::Formatter

Constants

DATE_FORMAT
DATE_TIME_FORMAT
TYPE_ANY
TYPE_ARRAY
TYPE_CLASS
TYPE_DATE
TYPE_DATETIME
TYPE_HASH
TYPE_RAW

Public Instance Methods

format(value) click to toggle source
# File lib/arsenicum/formatter.rb, line 10
def format(value)
  format_for_embedded_classes(value) ||
      format_by_extension(value) ||
      format_by_default(value)
end
format_by_default(value) click to toggle source
# File lib/arsenicum/formatter.rb, line 63
def format_by_default(value)
  {
      type: TYPE_ANY,
      value: Marshal.dump(value).unpack('H*').first,
  }
end
format_by_extension(value) click to toggle source
# File lib/arsenicum/formatter.rb, line 59
def format_by_extension(value)
  nil
end
format_for_embedded_classes(value) click to toggle source
# File lib/arsenicum/formatter.rb, line 24
def format_for_embedded_classes(value)
  case value
    when Integer, Float, String, TrueClass, FalseClass, NilClass, Symbol
      {
          type: TYPE_RAW,
          value: value.inspect,
      }
    when DateTime, Time
      {
          type: TYPE_DATETIME,
          value: value.strftime(DATE_TIME_FORMAT),
      }
    when Date
      {
          type: TYPE_DATE,
          value: value.strftime(DATE_FORMAT),
      }
    when Class
      {
          type: TYPE_CLASS,
          value: value.name,
      }
    when Array
      {
          type: TYPE_ARRAY,
          values: value.map{|v|format(v)},
      }
    when Hash
      {
          type: TYPE_HASH,
          values: value.inject({}){|h, kv|(k,v)=kv;h[k.to_s]=format(v);h},
      }
  end
end
parse(value) click to toggle source
# File lib/arsenicum/formatter.rb, line 70
def parse(value)
  value = normalize_hash(value)

  return eval value[:value] if value[:type] == TYPE_RAW
  parse_for_embedded_classes(value) ||
      parse_by_extension(value) ||
      parse_by_default(value)
end
parse_by_default(value) click to toggle source
# File lib/arsenicum/formatter.rb, line 104
def parse_by_default(value)
  ::Marshal.restore [value[:value]].pack('H*')
end
parse_by_extension(_) click to toggle source
# File lib/arsenicum/formatter.rb, line 100
def parse_by_extension(_)
  nil
end
parse_for_embedded_classes(value) click to toggle source
# File lib/arsenicum/formatter.rb, line 79
def parse_for_embedded_classes(value)
  case value[:type]
    when TYPE_DATE
      Date.strptime(value[:value], DATE_FORMAT)
    when TYPE_DATETIME
      Time.strptime(value[:value], DATE_TIME_FORMAT)
    when TYPE_CLASS
      Module.const_get value[:value].to_sym
    when TYPE_ARRAY
      value[:values].map do |value|
        parse(value)
      end
    when TYPE_HASH
      value[:values].inject({}) do |h, key_value|
        (key, value) = key_value
        h[key.to_s.to_sym] = parse(value)
        h
      end
  end
end