Class: URL

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Defined in:
lib/url.rb,
lib/url/version.rb,
lib/url/endpoint.rb,
lib/url/handlers.rb,
lib/url/response.rb,
lib/url/helper_classes.rb,
lib/url/accepts_endpoint.rb,
lib/url/endpoint_builder.rb,
lib/url/handlers/ty_handler.rb,
lib/url/handlers/net_handler.rb,
lib/url/handlers/yajl_handler.rb,
lib/url/handlers/as_json_handler.rb,
lib/url/handlers/base_json_handler.rb

Overview

Main class for managing urls

url = URL.new('https://mail.google.com/mail/?shva=1#mbox')
url.params # => {:shva => '1'}
url.scheme # => 'https'
url.host   # => 'mail.google.com'
url.domain # => 'google.com'
url.subdomain # => ['mail']
url.path   # => '/mail/'
url.hash   # => 'mbox'

url.subdomain = ['my','mail']
url.params[:foo] = 'bar'
url.to_s   # => 'https://my.mail.google.com/mail/?foo=bar&shva=1#mbox'

Defined Under Namespace

Modules: Classer Classes: ASJSONHandler, BaseJSONHandler, JSONHandler, Mash, NetHandler, ParamsHash, RequestHandler, Response, Service, TyHandler, YajlHandler

Constant Summary collapse

VERSION =
"0.3.1"

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(str) ⇒ URL

Creates a new URL object



88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
# File 'lib/url.rb', line 88

def initialize str
  @string = str
  sp = URI.split(@string)
  @scheme = sp[0]
  @port = sp[3]
  self.path = sp[5]
  @format = @path.gsub(/(.+\.)/,'')
  @hash = sp[8]
  
  if sp[2]
    host_parts = sp[2].split('.')
    if host_parts[-2] == 'co'
      @domain = host_parts[-3,3].join('.')
      @subdomain = host_parts.first(host_parts.length-3)
    else
      begin
        @domain = host_parts[-2,2].join('.')
        @subdomain = host_parts.first(host_parts.length-2) 
      rescue # if there arent at least 2 parts eg: localhost
        @domain = host_parts.join('.')
      end
    end
  else
    @domain = nil
    @subdomain = nil
  end
  
  @params = ParamsHash.new
  if sp[7]
    sp[7].gsub('?','').split('&').each do |myp|
      key,value = myp.split('=')
      value = CGI.unescape(value) if value
      @params[key.to_sym] = value if key
    end
  end
end

Instance Attribute Details

#domainObject

Attributes of the URL which are editable



47
48
49
# File 'lib/url.rb', line 47

def domain
  @domain
end

#formatObject

Attributes of the URL which are editable



47
48
49
# File 'lib/url.rb', line 47

def format
  @format
end

#hashObject

Attributes of the URL which are editable



47
48
49
# File 'lib/url.rb', line 47

def hash
  @hash
end

#paramsObject

The params for the request



35
36
37
# File 'lib/url.rb', line 35

def params
  @params
end

#pathObject

The path for the request



51
52
53
# File 'lib/url.rb', line 51

def path
  @path
end

#portObject

Attributes of the URL which are editable



47
48
49
# File 'lib/url.rb', line 47

def port
  @port
end

#schemeObject

Attributes of the URL which are editable



47
48
49
# File 'lib/url.rb', line 47

def scheme
  @scheme
end

#stringObject (readonly)

Returns the value of attribute string.



31
32
33
# File 'lib/url.rb', line 31

def string
  @string
end

#subdomainObject Also known as: subdomains

Returns array of subdomains



73
74
75
# File 'lib/url.rb', line 73

def subdomain
  @subdomain
end

Class Method Details

.json_handlerObject



183
184
185
186
187
188
189
190
191
192
193
# File 'lib/url.rb', line 183

def json_handler
  return @json_handler if @json_handler
  
  if defined?(Yajl)
    URL.json_handler = URL::YajlHandler
  elsif defined?(JSON)
    URL.json_handler = URL::BaseJSONHandler
  elsif defined?(ActiveSupport::JSON)
    URL.json_handler = URL::ASJSONHandler
  end
end

.json_handler=(r) ⇒ Object

Raises:

  • (ArgumentError)


195
196
197
198
# File 'lib/url.rb', line 195

def json_handler=r
  raise ArgumentError, 'Must be a subclass of URL::JSONHandler' unless r.nil? || r < JSONHandler
  @json_handler = r
end

.req_handlerRequstHandler

Define the request handler to use. If Typhoeus is setup it will use TyHandler otherwise will default back to Net::HTTP with NetHandler



165
166
167
168
169
170
171
172
173
# File 'lib/url.rb', line 165

def req_handler
  return @req_handler if @req_handler
  
  if defined?(Typhoeus)
    URL.req_handler = URL::TyHandler
  else
    URL.req_handler = URL::NetHandler
  end
end

.req_handler=(r) ⇒ RequstHandler

Define the request handler to use. If Typhoeus is setup it will use TyHandler otherwise will default back to Net::HTTP with NetHandler

Raises:

  • (ArgumentError)


178
179
180
181
# File 'lib/url.rb', line 178

def req_handler=r
  raise ArgumentError, 'Must be a subclass of URL::RequestHandler' unless r.nil? || r < RequestHandler
  @req_handler = r
end

.Service(url) ⇒ Object



51
52
53
# File 'lib/url/service.rb', line 51

def Service url
  Class.new(URL::Service).set_url(url)
end

Instance Method Details

#=~(reg) ⇒ Object



239
240
241
# File 'lib/url.rb', line 239

def =~ reg
  to_s =~ reg
end

#add_to_path(val) ⇒ Object



62
63
64
65
66
67
68
69
# File 'lib/url.rb', line 62

def add_to_path val
  unless @path[-1] == 47 # '/'
    @path << '/'
  end

  @path << val.sub(/^\//,'')
  @path
end

#delete(*args) ⇒ URL::Response

Performs a delete request for the current URL



215
216
217
# File 'lib/url.rb', line 215

def delete(*args)
  req_handler.delete(*args)
end

#dupObject



229
230
231
# File 'lib/url.rb', line 229

def dup
  URL.new(to_s)
end

#get(*args) ⇒ URL::Response

Performs a get request for the current URL



203
204
205
# File 'lib/url.rb', line 203

def get(*args)
  req_handler.get(*args)
end

#hostObject

The full hostname (not including port) for the URL



128
129
130
# File 'lib/url.rb', line 128

def host
  [@subdomain,@domain].flatten.compact.join('.')
end

#host_with_portObject

Messed up host/hostname issue :(



133
134
135
# File 'lib/url.rb', line 133

def host_with_port
  host<<':'<<port.to_s
end

#inspectObject



225
226
227
# File 'lib/url.rb', line 225

def inspect
  "#<#{self.class} #{to_s}>"
end

#post(*args) ⇒ URL::Response

Performs a post request for the current URL



209
210
211
# File 'lib/url.rb', line 209

def post(*args)
  req_handler.post(*args)
end

#put(*args) ⇒ URL::Response

Performs a put request for the current URL



221
222
223
# File 'lib/url.rb', line 221

def put(*args)
  req_handler.delete(*args)
end

#req_handlerHandler

The request handler for this



235
236
237
# File 'lib/url.rb', line 235

def req_handler
  (@req_handler||self.class.req_handler).new(self)
end

#req_handler=(r) ⇒ RequstHandler

Sets the handler to use for this request

Raises:

  • (ArgumentError)


246
247
248
249
# File 'lib/url.rb', line 246

def req_handler=r
  raise ArgumentError, 'Must be a subclass of URL::Handler' unless r < RequestHandler
  @req_handler = r
end

#to_s(ops = {}) ⇒ String

Outputs the full current url



140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
# File 'lib/url.rb', line 140

def to_s ops={}
  ret = String.new
  ret << %{#{scheme}://} if scheme && ops[:scheme] != false
  ret << host
  ret << %{:#{port}} if port && ops[:port] != false
  if path && ops[:path] != false
    ret << path
  end
  
  ret << params.to_s if params && ops[:params] != false
  
  ret << "##{hash.to_s}" if hash && ops[:hash] != false
  
  ret
end

#to_uriURI

Returns the parsed URI object for the string



158
159
160
# File 'lib/url.rb', line 158

def to_uri
  URI.parse(to_s)
end