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