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