module Delocalize::ParameterDelocalizing

Public Instance Methods

delocalize(options) click to toggle source
# File lib/delocalize/parameter_delocalizing.rb, line 3
def delocalize(options)
  delocalize_hash(self, options)
end

Private Instance Methods

delocalize_date_parser() click to toggle source
# File lib/delocalize/parameter_delocalizing.rb, line 70
def delocalize_date_parser
  @delocalize_date_parser ||= Parsers::DateTime.new(Date)
end
delocalize_hash(hash, options, base_key_stack = []) click to toggle source
# File lib/delocalize/parameter_delocalizing.rb, line 9
def delocalize_hash(hash, options, base_key_stack = [])
  hash.each do |key, value|
    key_stack = [*base_key_stack, key] # don't modify original key stack!

    hash[key] = case
                when value.respond_to?(:each_pair)
                  delocalize_hash(value, options, key_stack)
                when Array === value
                  key_stack += [:[]] # pseudo-key to denote arrays
                  value.map { |item| delocalize_parse(options, key_stack, item) }
                else
                  delocalize_parse(options, key_stack, value)
                end
  end
end
delocalize_number_parser() click to toggle source
# File lib/delocalize/parameter_delocalizing.rb, line 62
def delocalize_number_parser
  @delocalize_number_parser ||= Parsers::Number.new
end
delocalize_parse(options, key_stack, value) click to toggle source
# File lib/delocalize/parameter_delocalizing.rb, line 25
def delocalize_parse(options, key_stack, value)
  parser = delocalize_parser_for(options, key_stack)
  return value unless parser
  begin
    parser.parse(value)
  rescue ArgumentError
    value
  end
end
delocalize_parser_for(options, key_stack) click to toggle source
# File lib/delocalize/parameter_delocalizing.rb, line 35
def delocalize_parser_for(options, key_stack)
  parser_type = key_stack.reduce(options) do |h, key|
    case h
    when Hash
      h = h.stringify_keys
      key = key.to_s
      if key =~ /\A-?\d+\z/ && !h.key?(key)
        h
      else
        h[key]
      end
    when Array
      break unless key == :[]
      h.first
    else
      break
    end
  end

  return unless parser_type

  parser_name = "delocalize_#{parser_type}_parser"
  respond_to?(parser_name, true) ?
    send(parser_name) :
    raise(Delocalize::ParserNotFound.new("Unknown parser: #{parser_type}"))
end
delocalize_time_parser() click to toggle source
# File lib/delocalize/parameter_delocalizing.rb, line 66
def delocalize_time_parser
  @delocalize_time_parser ||= Parsers::DateTime.new(Time)
end