require 'stockboy/translator'
module Stockboy::Translations
class Date < Stockboy::Translator
def translate(context)
value = field_value(context, field_key)
return nil if value.blank?
case value
when ::String then parse_date(value.strip)
when ::Time, ::DateTime then ::Date.new(value.year, value.month, value.day)
when ::Date then value
else nil
end
end
private
def parse_date(value)
::Date.parse(value)
end
module PatternMatching
private
module ClassMethods
def match(*patterns)
@patterns = patterns
end
attr_reader :patterns
end
def self.included(base)
base.extend ClassMethods
end
MATCH_YYYY = %r"\A\d{1,2}(/|-)\d{1,2}\1\d{4}\z"
SLASH = '/'.freeze
def parse_date(value)
::Date.strptime(value, date_format(value))
end
def date_format(value)
self.class.patterns[yy_index(value) + sep_index(value)].freeze
end
def yy_index(value)
value =~ MATCH_YYYY ? 0 : 2
end
def sep_index(value)
value.include?(SLASH) ? 1 : 0
end
end
end
end