class Hurley::Query
Constants
- AMP
- EMPTY_BRACKET
- EMPTY_ESCAPED_BRACKET
- END_BRACKET
- EQ
- FORM_TYPE
- MULTIPART_TYPE
- START_BRACKET
Public Class Methods
Source
# 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
Calls superclass method
Source
# File lib/hurley/query.rb, line 15 def initialize(initial = nil) @hash = {} update(initial) if initial end
Source
# File lib/hurley/query.rb, line 11 def self.parse(raw_query) default.parse(raw_query) end
Public Instance Methods
Source
# File lib/hurley/query.rb, line 72 def inspect "#<%s %s>" % [ self.class.name, @hash.inspect, ] end
Source
# File lib/hurley/query.rb, line 53 def multipart? any_multipart?(@hash.values) end
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
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
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
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
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
Source
# 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
Private Hurley::Query methods
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
Source
# File lib/hurley/query.rb, line 236 def encode_array(pairs, key, escaped_key, value) raise NotImplementedError end
Source
# File lib/hurley/query.rb, line 240 def encode_hash(pairs, key, escaped_key, value) raise NotImplementedError end
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