module Rester::Utils

Public Class Methods

classify(str) click to toggle source
# File lib/rester/utils.rb, line 93
def classify(str)
  str.to_s.split("_").map(&:capitalize).join
end
decode_www_data(data) click to toggle source
# File lib/rester/utils.rb, line 49
def decode_www_data(data)
  Rack::Utils.parse_nested_query(data)
end
deep_freeze(value) click to toggle source
# File lib/rester/utils.rb, line 101
def deep_freeze(value)
  value.freeze

  case value
  when Hash
    value.values.each { |v| deep_freeze(v) }
  when Array
    value.each { |v| deep_freeze(v) }
  end
end
encode_www_data(value, prefix = nil) click to toggle source

Copied from Rack::Utils.build_nested_query (version 1.6.0)

We want to be able to support Rack >= 1.5.2, but this method is broken in that version.

# File lib/rester/utils.rb, line 30
def encode_www_data(value, prefix = nil)
  # Rack::Utils.build_nested_query(value)
  case value
  when Array
    value.map { |v|
      encode_www_data(v, "#{prefix}[]")
    }.join("&")
  when Hash
    value.map { |k, v|
      encode_www_data(v, prefix ? "#{prefix}[#{escape(k)}]" : escape(k))
    }.reject(&:empty?).join('&')
  when nil
    prefix
  else
    raise ArgumentError, "value must be a Hash" if prefix.nil?
    "#{prefix}=#{escape(value)}"
  end
end
escape(value) click to toggle source
# File lib/rester/utils.rb, line 53
def escape(value)
  URI.encode_www_form_component(value)
end
extract_method_verb(meth) click to toggle source

Determines the HTTP method/verb based on the method name. Defaults to GET but if the method ends with “!” it uses POST.

# File lib/rester/utils.rb, line 15
def extract_method_verb(meth)
  meth = meth.to_s

  if meth[-1] == '!'
    [:post, meth[0..-2]]
  else
    [:get, meth]
  end
end
join_paths(*paths) click to toggle source
# File lib/rester/utils.rb, line 57
def join_paths(*paths)
  paths.map(&:to_s).reject { |p| p.nil? || p.empty? }
    .join('/').gsub(/\/+/, '/')
end
stringify(hash={}) click to toggle source

Converts all keys and values to strings.

# File lib/rester/utils.rb, line 89
def stringify(hash={})
  decode_www_data(encode_www_data(hash))
end
symbolize_keys(hash) click to toggle source
# File lib/rester/utils.rb, line 83
def symbolize_keys(hash)
  hash.inject({}){|memo,(k,v)| memo[k.to_sym] = v; memo}
end
underscore(str) click to toggle source
# File lib/rester/utils.rb, line 97
def underscore(str)
  str.scan(/[A-Z][a-z]*/).map(&:downcase).join('_')
end
walk(object, context=nil) { |object, context| ... } click to toggle source
# File lib/rester/utils.rb, line 62
def walk(object, context=nil, &block)
  case object
  when Hash
    Hash[
      object.map { |key, val|
        [walk(key, :hash_key, &block), walk(val, :hash_value, &block)]
      }
    ]
  when Array
    object.map { |obj| walk(obj, :array_elem, &block) }
  when Range
    Range.new(
      walk(object.begin, :range_begin, &block),
      walk(object.end, :range_end, &block),
      object.exclude_end?
    )
  else
    yield object, context
  end
end