class Hurley::Query
Constants
- AMP
- EMPTY_BRACKET
- EMPTY_ESCAPED_BRACKET
- END_BRACKET
- EQ
- FORM_TYPE
- MULTIPART_TYPE
- START_BRACKET
Public Class Methods
default()
click to toggle source
# File lib/hurley/query.rb, line 7 def self.default @default ||= Nested end
inherited(base)
click to toggle source
Calls superclass method
# File lib/hurley/query.rb, line 79 def self.inherited(base) super class << base def parse(raw_query) q = new q.parse_query(raw_query) q end end end
new(initial = nil)
click to toggle source
# File lib/hurley/query.rb, line 15 def initialize(initial = nil) @hash = {} update(initial) if initial end
parse(raw_query)
click to toggle source
# File lib/hurley/query.rb, line 11 def self.parse(raw_query) default.parse(raw_query) end
Public Instance Methods
inspect()
click to toggle source
# File lib/hurley/query.rb, line 72 def inspect "#<%s %s>" % [ self.class.name, @hash.inspect, ] end
multipart?()
click to toggle source
# File lib/hurley/query.rb, line 53 def multipart? any_multipart?(@hash.values) end
parse_query(raw_query)
click to toggle source
# File lib/hurley/query.rb, line 43 def parse_query(raw_query) raw_query.to_s.split(AMP).each do |pair| next if pair.empty? escaped_key, escaped_value = pair.split(EQ, 2) key = CGI.unescape(escaped_key) value = escaped_value ? CGI.unescape(escaped_value) : nil send(:decode_pair, key, value) end end
subset_of?(url)
click to toggle source
# File lib/hurley/query.rb, line 30 def subset_of?(url) query = url.respond_to?(:query) ? url.query : url @hash.keys.all? do |key| query[key] == @hash[key] end end
to_form(options = nil)
click to toggle source
# File lib/hurley/query.rb, line 61 def to_form(options = nil) if multipart? boundary = (options || RequestOptions.new).boundary return MULTIPART_TYPE % boundary, to_io(boundary) else return FORM_TYPE, StringIO.new(to_query_string) end end
to_query_string()
click to toggle source
# File lib/hurley/query.rb, line 57 def to_query_string build_pairs.map!(&:to_s).join(AMP) end
Also aliased as: to_s
update(absolute)
click to toggle source
# File lib/hurley/query.rb, line 37 def update(absolute) absolute.each do |key, value| @hash[key] = value unless key?(key) end end
Private Instance Methods
any_multipart?(array)
click to toggle source
Private Hurley::Query
methods
# File lib/hurley/query.rb, line 190 def any_multipart?(array) array.any? do |v| case v when Array then any_multipart?(v) when Hash then any_multipart?(v.values) else v.respond_to?(:read) end end end
build_pairs()
click to toggle source
# File lib/hurley/query.rb, line 219 def build_pairs pairs = [] @hash.each do |key, value| escaped_key = Url.escape_path(key) case value when nil then pairs << Pair.new(key, escaped_key, nil) when Array encode_array(pairs, key, escaped_key, value) when Hash encode_hash(pairs, key, escaped_key, value) else pairs << Pair.new(key, escaped_key, value) end end pairs end
encode_array(pairs, key, escaped_key, value)
click to toggle source
# File lib/hurley/query.rb, line 236 def encode_array(pairs, key, escaped_key, value) raise NotImplementedError end
encode_hash(pairs, key, escaped_key, value)
click to toggle source
# File lib/hurley/query.rb, line 240 def encode_hash(pairs, key, escaped_key, value) raise NotImplementedError end
to_io(boundary, part_headers = nil)
click to toggle source
# File lib/hurley/query.rb, line 201 def to_io(boundary, part_headers = nil) parts = [] part_headers ||= {} build_pairs.each do |pair| parts << Multipart::Part.new(boundary, pair.key, pair.value, part_headers[pair.key]) end parts << Multipart::EpiloguePart.new(boundary) ios = [] len = 0 parts.each do |part| len += part.length ios << part.to_io end CompositeReadIO.new(len, *ios) end