class Url
Constants
- SCHEME_DEFAULT_PORTS
- SECURE_SCHEMES
- SECURE_SCHEME_MAPPING
Attributes
fragment[RW]
params[RW]
path[RW]
port[RW]
scheme[RW]
server[RW]
Public Class Methods
build(base, params = {}, fragment = nil)
click to toggle source
Construct a full URL from pieces
# File lib/iron/web/url.rb, line 58 def self.build(base, params = {}, fragment = nil) url = base + to_param_string(params) url += '#' + fragment unless fragment.blank? url end
default_port()
click to toggle source
# File lib/iron/web/url.rb, line 41 def self.default_port @default_port end
default_port=(port)
click to toggle source
# File lib/iron/web/url.rb, line 45 def self.default_port=(port) @default_port = port end
default_scheme()
click to toggle source
# File lib/iron/web/url.rb, line 49 def self.default_scheme @default_scheme || 'http' end
default_scheme=(scheme)
click to toggle source
# File lib/iron/web/url.rb, line 53 def self.default_scheme=(scheme) @default_scheme = scheme end
default_server()
click to toggle source
Return default domain for urls, used to convert relative urls to absolute
# File lib/iron/web/url.rb, line 33 def self.default_server @default_server end
default_server=(server)
click to toggle source
# File lib/iron/web/url.rb, line 37 def self.default_server=(server) @default_server = server end
new(str = nil)
click to toggle source
# File lib/iron/web/url.rb, line 91 def initialize(str = nil) @scheme = @port = @server = nil set(str) end
parse(str)
click to toggle source
Returns a new Url
from the given string
# File lib/iron/web/url.rb, line 27 def self.parse(str) Url.new(str) end
to_param_string(params)
click to toggle source
Construct a param string from key/value pairs
# File lib/iron/web/url.rb, line 65 def self.to_param_string(params) str = '' # Remove blank/nil keys params.delete_if {|k,v| v.to_s.blank? || k.to_s.blank?} # Convert to param string unless params.empty? str += '?' str += params.collect do |k,v| k = k.to_s if v.is_a?(Array) k = k.gsub('[]','') v.collect do |vs| val = vs.respond_to?(:to_param) ? vs.to_param : vs val = val.to_s CGI::escape(k) + '[]=' + CGI::escape(val) end else val = v.respond_to?(:to_param) ? v.to_param : v val = val.to_s CGI::escape(k) + '=' + CGI::escape(val) end end.flatten.join('&') end str end
Public Instance Methods
+(str)
click to toggle source
# File lib/iron/web/url.rb, line 165 def +(str) append_path(str) self end
absolute?()
click to toggle source
# File lib/iron/web/url.rb, line 226 def absolute? !relative? end
add_param(k, v)
click to toggle source
Add a param value (can be called multiply for the same param key)
# File lib/iron/web/url.rb, line 182 def add_param(k, v) k = k.to_s oldval = @params[k] if oldval @params[k] = oldval.is_a?(Array) ? oldval + [v] : [oldval, v] @params[k].flatten! else @params[k] = v end end
append_path(str, escape = false)
click to toggle source
# File lib/iron/web/url.rb, line 159 def append_path(str, escape = false) str = str.to_s @path ||= '' @path += escape ? CGI::escape(str).gsub('+', '%20') : str end
base()
click to toggle source
Returns the full start of the url, minus params and fragment
# File lib/iron/web/url.rb, line 148 def base val = '' unless @server.blank? val = (@scheme || Url::default_scheme) + '://' + @server val += ':' + @port.to_s unless @port.to_s.blank? end p = (@path || '') p = '/' + p unless p.blank? || p.starts_with?('/') val + p end
blank?()
click to toggle source
# File lib/iron/web/url.rb, line 143 def blank? self.base.blank? end
clear_params()
click to toggle source
Reset params
# File lib/iron/web/url.rb, line 209 def clear_params @params = {} end
empty?()
click to toggle source
# File lib/iron/web/url.rb, line 139 def empty? blank? end
get_param(k)
click to toggle source
# File lib/iron/web/url.rb, line 204 def get_param(k) @params[k.to_s] end
has_params?()
click to toggle source
# File lib/iron/web/url.rb, line 214 def has_params? @params && !@params.empty? end
inspect()
click to toggle source
# File lib/iron/web/url.rb, line 135 def inspect to_s end
make_absolute(secure = false, server = :default, port = :default)
click to toggle source
Ensure url contains a server + scheme section, eg converts '/foo' into 'example.com/foo'.
# File lib/iron/web/url.rb, line 231 def make_absolute(secure = false, server = :default, port = :default) unless absolute? && secure? == secure raise 'No default server set for Url#make_absolute' unless server != :default || @server || Url.default_server @server ||= server == :default ? Url.default_server : server unless @scheme @scheme = Url.default_scheme @port = port == :default ? Url.default_port : port end if secure raise "No secure scheme for scheme #{@scheme} in Url#make_absolute" unless SECURE_SCHEME_MAPPING[@scheme] @scheme = SECURE_SCHEME_MAPPING[@scheme] end end to_s end
make_relative()
click to toggle source
# File lib/iron/web/url.rb, line 247 def make_relative unless relative? @server = nil @scheme = nil @port = nil end to_s end
relative?()
click to toggle source
# File lib/iron/web/url.rb, line 222 def relative? @server.blank? end
remove_param(key_or_regex)
click to toggle source
Wipe out keyed value by string match or regex match
# File lib/iron/web/url.rb, line 194 def remove_param(key_or_regex) @params.delete_if do |k, v| if key_or_regex.is_a?(Regexp) k.match(key_or_regex) else k == key_or_regex.to_s end end end
reset_params()
click to toggle source
# File lib/iron/web/url.rb, line 212 def reset_params ; clear_params ; end
secure?()
click to toggle source
# File lib/iron/web/url.rb, line 218 def secure? SECURE_SCHEMES.include?(scheme) end
set(url)
click to toggle source
Parse and set internals from given url
# File lib/iron/web/url.rb, line 97 def set(url) # Decompose into major components url = (url || '').strip base, params, @fragment = url.extract(/^([^\?#]*)\??([^#]*)#?(.*)$/) # Parse out base base ||= '' if base.match(/^[a-z\+]*:\/\//) @scheme, @server, ignore, @port, @path = base.extract(/^([a-z]*):\/\/([a-z0-9\-_\.]+)(:([0-9]+))?(\/.*)?/i) @path ||= '' @port = @port.blank? ? nil : @port.to_i else @path = base end # Parse out params @params = {} params.split('&').each do |p| k, v = p.split('=') if k && v if k.ends_with?('[]') add_param(CGI::unescape(k.gsub('[]','')), [CGI::unescape(v)]) else add_param(CGI::unescape(k), CGI::unescape(v)) end end end end
set_param(k, v)
click to toggle source
Override current param val or set if none
# File lib/iron/web/url.rb, line 171 def set_param(k, v) @params[k.to_s] = v end
set_params(hash)
click to toggle source
# File lib/iron/web/url.rb, line 175 def set_params(hash) hash.each_pair {|k,v| set_param(k, v) } end
to_html()
click to toggle source
# File lib/iron/web/url.rb, line 131 def to_html to_s end
to_s()
click to toggle source
Makee the url
# File lib/iron/web/url.rb, line 127 def to_s Url::build(base, @params, @fragment) end