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}?$/
DEFAULT_PARAM_SEPARATOR =

:startdoc:

'&'

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(query_str = nil) ⇒ Query

Returns a new instance of Query.



149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
# File 'lib/uri/component/query.rb', line 149

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

  @params = QueryParamsHash.new
  @param_separator = DEFAULT_PARAM_SEPARATOR

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

Class Method Details

.mixin(klass = URI::Generic) ⇒ Object

:nodoc:



144
145
146
147
# File 'lib/uri/component/query.rb', line 144

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

Instance Method Details

#[](key) ⇒ Object



174
175
176
# File 'lib/uri/component/query.rb', line 174

def [](key)
  return @params[key]
end

#clearObject



170
171
172
# File 'lib/uri/component/query.rb', line 170

def clear
  @params.clear
end

#param_separatorObject



183
184
185
# File 'lib/uri/component/query.rb', line 183

def param_separator
  return @param_separator
end

#param_separator=(v) ⇒ Object



187
188
189
# File 'lib/uri/component/query.rb', line 187

def param_separator=(v)
  @param_separator = v
end

#paramsObject

Returns query parameters as an URI::Component::QueryParamsHash object



179
180
181
# File 'lib/uri/component/query.rb', line 179

def params
  return @params
end

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



191
192
193
194
195
196
197
198
199
200
201
202
203
204
# File 'lib/uri/component/query.rb', line 191

def to_uri(separator=@param_separator)
  return nil unless @params.nil?

  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