Class: Hurley::Query

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Defined in:
lib/hurley/query.rb

Direct Known Subclasses

Flat, Nested

Defined Under Namespace

Classes: Flat, Nested, Pair

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(initial = nil) ⇒ Query

Returns a new instance of Query.



15
16
17
18
# File 'lib/hurley/query.rb', line 15

def initialize(initial = nil)
  @hash = {}
  update(initial) if initial
end

Class Method Details

.defaultObject



7
8
9
# File 'lib/hurley/query.rb', line 7

def self.default
  @default ||= Nested
end

.inherited(base) ⇒ Object



79
80
81
82
83
84
85
86
87
88
# 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

.parse(raw_query) ⇒ Object



11
12
13
# File 'lib/hurley/query.rb', line 11

def self.parse(raw_query)
  default.parse(raw_query)
end

Instance Method Details

#inspectObject



72
73
74
75
76
77
# File 'lib/hurley/query.rb', line 72

def inspect
  "#<%s %s>" % [
    self.class.name,
    @hash.inspect,
  ]
end

#multipart?Boolean

Returns:

  • (Boolean)


53
54
55
# File 'lib/hurley/query.rb', line 53

def multipart?
  any_multipart?(@hash.values)
end

#parse_query(raw_query) ⇒ Object



43
44
45
46
47
48
49
50
51
# 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) ⇒ Boolean

Returns:

  • (Boolean)


30
31
32
33
34
35
# 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) ⇒ Object



61
62
63
64
65
66
67
68
# 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_stringObject Also known as: to_s



57
58
59
# File 'lib/hurley/query.rb', line 57

def to_query_string
  build_pairs.map!(&:to_s).join(AMP)
end

#update(absolute) ⇒ Object



37
38
39
40
41
# File 'lib/hurley/query.rb', line 37

def update(absolute)
  absolute.each do |key, value|
    @hash[key] = value unless key?(key)
  end
end