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