url 0.3.1 → 0.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/url.rb +38 -37
- data/lib/url/version.rb +1 -1
- metadata +48 -76
data/lib/url.rb
CHANGED
@@ -22,14 +22,14 @@ files.each { |f| require File.join(File.dirname(__FILE__),'url',f) }
|
|
22
22
|
# url.subdomain # => ['mail']
|
23
23
|
# url.path # => '/mail/'
|
24
24
|
# url.hash # => 'mbox'
|
25
|
-
#
|
25
|
+
#
|
26
26
|
# url.subdomain = ['my','mail']
|
27
27
|
# url.params[:foo] = 'bar'
|
28
28
|
# url.to_s # => 'https://my.mail.google.com/mail/?foo=bar&shva=1#mbox'
|
29
29
|
class URL
|
30
30
|
extend Forwardable
|
31
31
|
attr_reader :string
|
32
|
-
|
32
|
+
|
33
33
|
# The params for the request
|
34
34
|
# @returns [URL::ParamsHash]
|
35
35
|
attr_reader :params
|
@@ -41,21 +41,21 @@ class URL
|
|
41
41
|
raise ArgumentError, 'Params must be a URL::ParamsHash' unless p.is_a?(ParamsHash)
|
42
42
|
@params = p
|
43
43
|
end
|
44
|
-
|
44
|
+
|
45
45
|
# Attributes of the URL which are editable
|
46
46
|
# @returns [String]
|
47
47
|
attr_accessor :domain, :scheme, :format, :port, :hash
|
48
|
-
|
48
|
+
|
49
49
|
# The path for the request
|
50
50
|
# @returns [URL::Path]
|
51
51
|
attr_reader :path
|
52
|
-
|
52
|
+
|
53
53
|
# Set the path for the request
|
54
54
|
def path=str
|
55
55
|
if str.nil? || str.empty?
|
56
56
|
str = '/'
|
57
57
|
end
|
58
|
-
|
58
|
+
|
59
59
|
@path = str
|
60
60
|
end
|
61
61
|
|
@@ -67,22 +67,22 @@ class URL
|
|
67
67
|
@path << val.sub(/^\//,'')
|
68
68
|
@path
|
69
69
|
end
|
70
|
-
|
70
|
+
|
71
71
|
# Returns array of subdomains
|
72
72
|
# @returns [URL::Subdomain]
|
73
73
|
attr_reader :subdomain
|
74
74
|
alias_method :subdomains, :subdomain
|
75
|
-
|
75
|
+
|
76
76
|
# @param [Array,String] subdomain An array or string for subdomain
|
77
77
|
def subdomain=(s)
|
78
78
|
if s.is_a?(String)
|
79
79
|
s = s.split('.')
|
80
80
|
end
|
81
|
-
|
81
|
+
|
82
82
|
@subdomain = s
|
83
83
|
end
|
84
84
|
alias_method :subdomains=, :subdomain=
|
85
|
-
|
85
|
+
|
86
86
|
# Creates a new URL object
|
87
87
|
# @param [String] URL the starting url to work with
|
88
88
|
def initialize str
|
@@ -93,16 +93,17 @@ class URL
|
|
93
93
|
self.path = sp[5]
|
94
94
|
@format = @path.gsub(/(.+\.)/,'')
|
95
95
|
@hash = sp[8]
|
96
|
-
|
96
|
+
|
97
97
|
if sp[2]
|
98
98
|
host_parts = sp[2].split('.')
|
99
|
-
|
99
|
+
# Detect internationl urls and treat as tld (eg .co.uk)
|
100
|
+
if host_parts[-2] == 'co' and host_parts.length > 2
|
100
101
|
@domain = host_parts[-3,3].join('.')
|
101
102
|
@subdomain = host_parts.first(host_parts.length-3)
|
102
103
|
else
|
103
104
|
begin
|
104
105
|
@domain = host_parts[-2,2].join('.')
|
105
|
-
@subdomain = host_parts.first(host_parts.length-2)
|
106
|
+
@subdomain = host_parts.first(host_parts.length-2)
|
106
107
|
rescue # if there arent at least 2 parts eg: localhost
|
107
108
|
@domain = host_parts.join('.')
|
108
109
|
end
|
@@ -111,7 +112,7 @@ class URL
|
|
111
112
|
@domain = nil
|
112
113
|
@subdomain = nil
|
113
114
|
end
|
114
|
-
|
115
|
+
|
115
116
|
@params = ParamsHash.new
|
116
117
|
if sp[7]
|
117
118
|
sp[7].gsub('?','').split('&').each do |myp|
|
@@ -121,9 +122,9 @@ class URL
|
|
121
122
|
end
|
122
123
|
end
|
123
124
|
end
|
124
|
-
|
125
|
+
|
125
126
|
def_delegators :@params, :[], :[]=
|
126
|
-
|
127
|
+
|
127
128
|
# The full hostname (not including port) for the URL
|
128
129
|
def host
|
129
130
|
[@subdomain,@domain].flatten.compact.join('.')
|
@@ -133,7 +134,7 @@ class URL
|
|
133
134
|
def host_with_port
|
134
135
|
host<<':'<<port.to_s
|
135
136
|
end
|
136
|
-
|
137
|
+
|
137
138
|
# Outputs the full current url
|
138
139
|
# @param [Hash] ops Prevent certain parts of the object from being shown by setting `:scheme`,`:port`,`:path`,`:params`, or `:hash` to `false`
|
139
140
|
# @return [String]
|
@@ -145,33 +146,33 @@ class URL
|
|
145
146
|
if path && ops[:path] != false
|
146
147
|
ret << path
|
147
148
|
end
|
148
|
-
|
149
|
+
|
149
150
|
ret << params.to_s if params && ops[:params] != false
|
150
|
-
|
151
|
+
|
151
152
|
ret << "##{hash.to_s}" if hash && ops[:hash] != false
|
152
|
-
|
153
|
+
|
153
154
|
ret
|
154
155
|
end
|
155
|
-
|
156
|
+
|
156
157
|
# Returns the parsed URI object for the string
|
157
158
|
# @return [URI]
|
158
159
|
def to_uri
|
159
160
|
URI.parse(to_s)
|
160
161
|
end
|
161
|
-
|
162
|
+
|
162
163
|
class << self
|
163
164
|
# Define the request handler to use. If Typhoeus is setup it will use {TyHandler} otherwise will default back to Net::HTTP with {NetHandler}
|
164
165
|
# @return [RequstHandler]
|
165
166
|
def req_handler
|
166
167
|
return @req_handler if @req_handler
|
167
|
-
|
168
|
+
|
168
169
|
if defined?(Typhoeus)
|
169
170
|
URL.req_handler = URL::TyHandler
|
170
171
|
else
|
171
172
|
URL.req_handler = URL::NetHandler
|
172
173
|
end
|
173
174
|
end
|
174
|
-
|
175
|
+
|
175
176
|
# Define the request handler to use. If Typhoeus is setup it will use {TyHandler} otherwise will default back to Net::HTTP with {NetHandler}
|
176
177
|
# @param [RequstHandler]
|
177
178
|
# @return [RequstHandler]
|
@@ -179,10 +180,10 @@ class URL
|
|
179
180
|
raise ArgumentError, 'Must be a subclass of URL::RequestHandler' unless r.nil? || r < RequestHandler
|
180
181
|
@req_handler = r
|
181
182
|
end
|
182
|
-
|
183
|
+
|
183
184
|
def json_handler
|
184
185
|
return @json_handler if @json_handler
|
185
|
-
|
186
|
+
|
186
187
|
if defined?(Yajl)
|
187
188
|
URL.json_handler = URL::YajlHandler
|
188
189
|
elsif defined?(JSON)
|
@@ -191,25 +192,25 @@ class URL
|
|
191
192
|
URL.json_handler = URL::ASJSONHandler
|
192
193
|
end
|
193
194
|
end
|
194
|
-
|
195
|
+
|
195
196
|
def json_handler=r
|
196
197
|
raise ArgumentError, 'Must be a subclass of URL::JSONHandler' unless r.nil? || r < JSONHandler
|
197
198
|
@json_handler = r
|
198
199
|
end
|
199
200
|
end
|
200
|
-
|
201
|
+
|
201
202
|
# Performs a get request for the current URL
|
202
203
|
# @return [URL::Response] A subclass of string which also repsonds to a few added mthods storing more information
|
203
204
|
def get(*args)
|
204
205
|
req_handler.get(*args)
|
205
206
|
end
|
206
|
-
|
207
|
+
|
207
208
|
# Performs a post request for the current URL
|
208
209
|
# @return [URL::Response] A subclass of string which also repsonds to a few added mthods storing more information
|
209
210
|
def post(*args)
|
210
211
|
req_handler.post(*args)
|
211
212
|
end
|
212
|
-
|
213
|
+
|
213
214
|
# Performs a delete request for the current URL
|
214
215
|
# @return [URL::Response] A subclass of string which also repsonds to a few added mthods storing more information
|
215
216
|
def delete(*args)
|
@@ -221,25 +222,25 @@ class URL
|
|
221
222
|
def put(*args)
|
222
223
|
req_handler.delete(*args)
|
223
224
|
end
|
224
|
-
|
225
|
+
|
225
226
|
def inspect
|
226
227
|
"#<#{self.class} #{to_s}>"
|
227
228
|
end
|
228
|
-
|
229
|
+
|
229
230
|
def dup
|
230
231
|
URL.new(to_s)
|
231
232
|
end
|
232
|
-
|
233
|
-
# The request handler for this
|
233
|
+
|
234
|
+
# The request handler for this
|
234
235
|
# @return [Handler]
|
235
236
|
def req_handler
|
236
237
|
(@req_handler||self.class.req_handler).new(self)
|
237
238
|
end
|
238
|
-
|
239
|
+
|
239
240
|
def =~ reg
|
240
241
|
to_s =~ reg
|
241
242
|
end
|
242
|
-
|
243
|
+
|
243
244
|
# Sets the handler to use for this request
|
244
245
|
# @param [RequstHandler]
|
245
246
|
# @return [RequstHandler]
|
@@ -247,6 +248,6 @@ class URL
|
|
247
248
|
raise ArgumentError, 'Must be a subclass of URL::Handler' unless r < RequestHandler
|
248
249
|
@req_handler = r
|
249
250
|
end
|
250
|
-
|
251
|
+
|
251
252
|
end
|
252
253
|
|
data/lib/url/version.rb
CHANGED
metadata
CHANGED
@@ -1,76 +1,58 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: url
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.3.2
|
5
5
|
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 3
|
9
|
-
- 1
|
10
|
-
version: 0.3.1
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Tal Atlas
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
type: :development
|
23
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
12
|
+
date: 2011-07-25 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rspec
|
16
|
+
requirement: &70179099658740 !ruby/object:Gem::Requirement
|
24
17
|
none: false
|
25
|
-
requirements:
|
18
|
+
requirements:
|
26
19
|
- - ~>
|
27
|
-
- !ruby/object:Gem::Version
|
28
|
-
|
29
|
-
segments:
|
30
|
-
- 2
|
31
|
-
version: "2"
|
32
|
-
name: rspec
|
33
|
-
version_requirements: *id001
|
34
|
-
- !ruby/object:Gem::Dependency
|
35
|
-
prerelease: false
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '2'
|
36
22
|
type: :development
|
37
|
-
requirement: &id002 !ruby/object:Gem::Requirement
|
38
|
-
none: false
|
39
|
-
requirements:
|
40
|
-
- - ">="
|
41
|
-
- !ruby/object:Gem::Version
|
42
|
-
hash: 3
|
43
|
-
segments:
|
44
|
-
- 0
|
45
|
-
version: "0"
|
46
|
-
name: rake
|
47
|
-
version_requirements: *id002
|
48
|
-
- !ruby/object:Gem::Dependency
|
49
23
|
prerelease: false
|
24
|
+
version_requirements: *70179099658740
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: rake
|
27
|
+
requirement: &70179099658320 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
50
33
|
type: :development
|
51
|
-
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *70179099658320
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: yard
|
38
|
+
requirement: &70179099657740 !ruby/object:Gem::Requirement
|
52
39
|
none: false
|
53
|
-
requirements:
|
54
|
-
- -
|
55
|
-
- !ruby/object:Gem::Version
|
56
|
-
hash: 1
|
57
|
-
segments:
|
58
|
-
- 0
|
59
|
-
- 7
|
60
|
-
- 1
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
61
43
|
version: 0.7.1
|
62
|
-
|
63
|
-
|
64
|
-
|
44
|
+
type: :development
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *70179099657740
|
47
|
+
description: A simple url object to allow for OO based manipulation and usage of a
|
48
|
+
url
|
65
49
|
email: me@tal.by
|
66
50
|
executables: []
|
67
|
-
|
68
51
|
extensions: []
|
69
|
-
|
70
|
-
extra_rdoc_files:
|
52
|
+
extra_rdoc_files:
|
71
53
|
- LICENSE
|
72
54
|
- README.rdoc
|
73
|
-
files:
|
55
|
+
files:
|
74
56
|
- lib/url/accepts_endpoint.rb
|
75
57
|
- lib/url/classer.rb
|
76
58
|
- lib/url/endpoint.rb
|
@@ -98,36 +80,26 @@ files:
|
|
98
80
|
- Rakefile
|
99
81
|
homepage: http://github.com/talby/url
|
100
82
|
licenses: []
|
101
|
-
|
102
83
|
post_install_message:
|
103
84
|
rdoc_options: []
|
104
|
-
|
105
|
-
require_paths:
|
85
|
+
require_paths:
|
106
86
|
- lib
|
107
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
87
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
108
88
|
none: false
|
109
|
-
requirements:
|
110
|
-
- -
|
111
|
-
- !ruby/object:Gem::Version
|
112
|
-
|
113
|
-
|
114
|
-
- 0
|
115
|
-
version: "0"
|
116
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
89
|
+
requirements:
|
90
|
+
- - ! '>='
|
91
|
+
- !ruby/object:Gem::Version
|
92
|
+
version: '0'
|
93
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
117
94
|
none: false
|
118
|
-
requirements:
|
119
|
-
- -
|
120
|
-
- !ruby/object:Gem::Version
|
121
|
-
|
122
|
-
segments:
|
123
|
-
- 0
|
124
|
-
version: "0"
|
95
|
+
requirements:
|
96
|
+
- - ! '>='
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: '0'
|
125
99
|
requirements: []
|
126
|
-
|
127
100
|
rubyforge_project:
|
128
|
-
rubygems_version: 1.8.
|
101
|
+
rubygems_version: 1.8.16
|
129
102
|
signing_key:
|
130
103
|
specification_version: 3
|
131
104
|
summary: A URL object
|
132
105
|
test_files: []
|
133
|
-
|