module Ethon::Easy::Queryable

def self.included(base)

:nodoc:
def self.included(base)
  base.send(:attr_accessor, :escape)
end

def build_query_pairs(hash)

Returns:
  • (Array) - The array of query pairs.

Parameters:
  • hash (Hash) -- The hash to go through.

Other tags:
    Example: Build query pairs. -
def build_query_pairs(hash)
  return [hash] if hash.is_a?(String)
  pairs = []
  recursively_generate_pairs(hash, nil, pairs)
  pairs
end

def empty?

Returns:
  • (Boolean) - True if params is empty, else false.

Other tags:
    Example: Return if params is empty. -
def empty?
  @params.empty?
end

def file_info(file)

Returns:
  • (Array) - Array of informations.

Parameters:
  • file (File) -- The file to handle.

Other tags:
    Example: Return file info. -
def file_info(file)
  filename = File.basename(file.path)
  types = MIME::Types.type_for(filename)
  [
    filename,
    types.empty? ? 'application/octet-stream' : types[0].to_s,
    File.expand_path(file.path)
  ]
end

def pairs_for(v, key, pairs)

def pairs_for(v, key, pairs)
  case v
  when Hash, Array
    recursively_generate_pairs(v, key, pairs)
  when File, Tempfile
    pairs << [key, file_info(v)]
  else
    pairs << [key, v]
  end
end

def query_pairs

Returns:
  • (Array) - The query pairs.

Other tags:
    Example: Return the query pairs. -
def query_pairs
  @query_pairs ||= build_query_pairs(@params)
end

def recursively_generate_pairs(h, prefix, pairs)

def recursively_generate_pairs(h, prefix, pairs)
  case h
  when Hash
    h.each_pair do |k,v|
      key = prefix.nil? ? k : "#{prefix}[#{k}]"
      pairs_for(v, key, pairs)
    end
  when Array
    h.each_with_index do |v, i|
      key = "#{prefix}[#{i}]"
      pairs_for(v, key, pairs)
    end
  end
end

def to_s

Returns:
  • (String) - The string representation.

Other tags:
    Example: Return string representation. -
def to_s
  @to_s ||= query_pairs.map{ |pair|
    return pair if pair.is_a?(String)
    if escape && @easy
      pair.map{ |e| @easy.escape(e.to_s) }.join("=")
    else
      pair.join("=")
    end
  }.join('&')
end