Class: URI::Component::Query

Inherits:
Object
  • Object
show all
Defined in:
lib/uri/component/query.rb

Overview

Handle a query component in an URI as an object

Constant Summary collapse

RE_COMPONENT =

:stopdoc:

/^#{URI::REGEXP::PATTERN::QUERY}?$/

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(query_str = '') ⇒ Query

Returns a new instance of Query.



99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
# File 'lib/uri/component/query.rb', line 99

def initialize(query_str='')
  unless query_str =~ RE_COMPONENT
    raise InvalidURIError, "bad Query component for URI: #{query_str}"
  end

  @params = QueryParamsHash.new
  @params.default_proc = Proc.new {|hash, key|
    hash[key] = [] unless hash.key?(key)
  }
  @param_separator = '&'

  query_str.split(/[&;]/).each do |param|
    next if param.empty?
    name, value = param.split('=', 2).map do |v|
      CGI.unescape(v)
    end
    @params[name] ||= []
    @params[name] << value ? value : nil
  end
end

Class Method Details

.mixin(klass) ⇒ Object

:startdoc:



94
95
96
97
# File 'lib/uri/component/query.rb', line 94

def self.mixin(klass) #:nodoc:
  QueryMixin.__send__(:append_features, klass)
  QueryMixin.__send__(:included, klass)
end

Instance Method Details

#param_separatorObject



124
125
126
# File 'lib/uri/component/query.rb', line 124

def param_separator
  return @param_separator
end

#param_separator=(v) ⇒ Object



128
129
130
# File 'lib/uri/component/query.rb', line 128

def param_separator=(v)
  @param_separator = v
end

#paramsObject



120
121
122
# File 'lib/uri/component/query.rb', line 120

def params
  return @params
end

#to_uri(separator = @param_separator) ⇒ Object Also known as: to_s



132
133
134
135
136
137
138
139
140
141
142
143
# File 'lib/uri/component/query.rb', line 132

def to_uri(separator=@param_separator)
  query = []

  @params.each do |name, values|
    name = CGI.escape(name)
    values.each do |value|
      query << "#{name}#{'=' + CGI.escape(value.to_s) if value}"
    end
  end

  return query.join(separator)
end