lib/glue/uri.rb in glue-0.20.0 vs lib/glue/uri.rb in glue-0.21.0
- old
+ new
@@ -19,171 +19,171 @@
# gmosx, TODO: deprecate this.
#++
module UriUtils
- # Decode the uri components.
-
- def self.decode(uri)
- # gmosx: hmm is this needed?
- # guard against invalid filenames for example pictures with
- # spaces uploaded by users
- escaped_uri = uri.gsub(/ /, "+")
+ # Decode the uri components.
+
+ def self.decode(uri)
+ # gmosx: hmm is this needed?
+ # guard against invalid filenames for example pictures with
+ # spaces uploaded by users
+ escaped_uri = uri.gsub(/ /, "+")
- if md = URI::REGEXP::REL_URI.match(escaped_uri)
+ if md = URI::REGEXP::REL_URI.match(escaped_uri)
- path = "#{md[5]}#{md[6]}"
- type = File.extname(path)
- query_string = md[7]
+ path = "#{md[5]}#{md[6]}"
+ type = File.extname(path)
+ query_string = md[7]
-# real_path = "#{$root_dir}/#{path}"
+# real_path = "#{$root_dir}/#{path}"
- parameters = UriUtils.query_string_to_hash(query_string)
- path.gsub!(/\+/, " ")
+ parameters = UriUtils.query_string_to_hash(query_string)
+ path.gsub!(/\+/, " ")
- return [path, type, parameters, query_string]
+ return [path, type, parameters, query_string]
- end # match
+ end # match
- # this is usefull for uncovering bugs!
- raise ArgumentError.new("the parameter '#{uri}' is not a valid uri")
- end
+ # this is usefull for uncovering bugs!
+ raise ArgumentError.new("the parameter '#{uri}' is not a valid uri")
+ end
- # Extend the basic query string parser provided by the cgi module.
- # converts single valued params (the most common case) to
- # objects instead of arrays
- #
- # Input:
- # the query string
- #
- # Output:
- # hash of parameters, contains arrays for multivalued parameters
- # (multiselect, checkboxes , etc)
- # If no query string is provided (nil or "") returns an empty hash.
-
- def self.query_string_to_hash(query_string)
- return {} unless query_string
+ # Extend the basic query string parser provided by the cgi module.
+ # converts single valued params (the most common case) to
+ # objects instead of arrays
+ #
+ # Input:
+ # the query string
+ #
+ # Output:
+ # hash of parameters, contains arrays for multivalued parameters
+ # (multiselect, checkboxes , etc)
+ # If no query string is provided (nil or "") returns an empty hash.
+
+ def self.query_string_to_hash(query_string)
+ return {} unless query_string
- query_parameters = CGI::parse(query_string)
+ query_parameters = CGI::parse(query_string)
- query_parameters.each { |key, val|
- # replace the array with an object
- query_parameters[key] = val[0] if 1 == val.length
- }
+ query_parameters.each { |key, val|
+ # replace the array with an object
+ query_parameters[key] = val[0] if 1 == val.length
+ }
- # set default value to nil! cgi sets this to []
- query_parameters.default = nil
+ # set default value to nil! cgi sets this to []
+ query_parameters.default = nil
- return query_parameters
- end
+ return query_parameters
+ end
- # Given a hash with parameter/value pairs construct a
- # standard query string. This method only encodes simple
- # types (Numeric, String) to avoid query string polution
- # with marshal, etc.
- #
- # gmosx, FIXME: only numeric and strings are passed to
- # the latest code, so update old code and optimize this!
- #
- # Input:
- # the parameter hash
- #
- # Output:
- # the query string
+ # Given a hash with parameter/value pairs construct a
+ # standard query string. This method only encodes simple
+ # types (Numeric, String) to avoid query string polution
+ # with marshal, etc.
+ #
+ # gmosx, FIXME: only numeric and strings are passed to
+ # the latest code, so update old code and optimize this!
+ #
+ # Input:
+ # the parameter hash
+ #
+ # Output:
+ # the query string
- def self.hash_to_query_string(parameters)
- return nil unless parameters
- pairs = []
- parameters.each { |param, value|
- # only encode simple classes !
+ def self.hash_to_query_string(parameters)
+ return nil unless parameters
+ pairs = []
+ parameters.each { |param, value|
+ # only encode simple classes !
- if value.is_a?(Numeric) or value.is_a?(String)
- pairs << "#{param}=#{value}"
- end
- }
- return pairs.join(";")
- end
+ if value.is_a?(Numeric) or value.is_a?(String)
+ pairs << "#{param}=#{value}"
+ end
+ }
+ return pairs.join(";")
+ end
- # This method returns the query string of a uri
- #
- # Input:
- # the uri
- #
- # Output:
- # the query string.
- # returns nil if no query string
+ # This method returns the query string of a uri
+ #
+ # Input:
+ # the uri
+ #
+ # Output:
+ # the query string.
+ # returns nil if no query string
- def self.get_query_string(uri)
- return nil unless uri
- # gmosx: INVESTIGATE ruby's URI seems to differently handle
- # abs and rel uris.
- if md = URI::REGEXP::ABS_URI.match(uri)
- return md[8]
- elsif md = URI::REGEXP::REL_URI.match(uri)
- return md[7]
- end
- return nil
- end
+ def self.get_query_string(uri)
+ return nil unless uri
+ # gmosx: INVESTIGATE ruby's URI seems to differently handle
+ # abs and rel uris.
+ if md = URI::REGEXP::ABS_URI.match(uri)
+ return md[8]
+ elsif md = URI::REGEXP::REL_URI.match(uri)
+ return md[7]
+ end
+ return nil
+ end
- # Removes the query string from a uri
- #
- # Input:
- # the uri
- #
- # Output:
- # the chomped uri.
+ # Removes the query string from a uri
+ #
+ # Input:
+ # the uri
+ #
+ # Output:
+ # the chomped uri.
- def self.chomp_query_string(uri)
- return nil unless uri
- query_string = self.get_query_string(uri)
- return uri.dup.chomp("?#{query_string}")
- end
+ def self.chomp_query_string(uri)
+ return nil unless uri
+ query_string = self.get_query_string(uri)
+ return uri.dup.chomp("?#{query_string}")
+ end
- # Get a uri and a hash of parameters. Inject the hash values
- # as parameters in the query sting path. Returns the full
- # uri.
- #
- # Input:
- # the uri to filter (String)
- # hash of parameters to update
- #
- # Output:
- # the full updated query string
- #
- # === TODO:
- # optimize this a litle bit.
-
- def self.update_query_string(uri, parameters)
- query_string = self.get_query_string(uri)
- rest = uri.dup.gsub(/\?#{query_string}/, "")
+ # Get a uri and a hash of parameters. Inject the hash values
+ # as parameters in the query sting path. Returns the full
+ # uri.
+ #
+ # Input:
+ # the uri to filter (String)
+ # hash of parameters to update
+ #
+ # Output:
+ # the full updated query string
+ #
+ # === TODO:
+ # optimize this a litle bit.
+
+ def self.update_query_string(uri, parameters)
+ query_string = self.get_query_string(uri)
+ rest = uri.dup.gsub(/\?#{query_string}/, "")
- hash = self.query_string_to_hash(query_string)
- hash.update(parameters)
- query_string = self.hash_to_query_string(hash)
+ hash = self.query_string_to_hash(query_string)
+ hash.update(parameters)
+ query_string = self.hash_to_query_string(hash)
- if Glue::StringUtils.valid?(query_string)
- return "#{rest}?#{query_string}"
- else
- return rest
- end
- end
-
- # TODO: find a better name.
- # Gets the request uri, injects extra parameters in the query string
- # and returns a new uri. The request object is not modified.
- # There is always a qs string so an extra test is skipped.
-
- def self.update_request_uri(request, parameters)
- hash = request.parameters.dup()
- hash.update(parameters)
+ if Glue::StringUtils.valid?(query_string)
+ return "#{rest}?#{query_string}"
+ else
+ return rest
+ end
+ end
+
+ # TODO: find a better name.
+ # Gets the request uri, injects extra parameters in the query string
+ # and returns a new uri. The request object is not modified.
+ # There is always a qs string so an extra test is skipped.
+
+ def self.update_request_uri(request, parameters)
+ hash = request.parameters.dup()
+ hash.update(parameters)
- # use this in hash_to_querystring.
- query_string = hash.collect { |k, v|
- "#{k}=#{v}"
- }.join(";")
-
- return "#{request.translated_uri}?#{query_string}"
- end
+ # use this in hash_to_querystring.
+ query_string = hash.collect { |k, v|
+ "#{k}=#{v}"
+ }.join(";")
+
+ return "#{request.translated_uri}?#{query_string}"
+ end
end
end