uri-component 0.0.4 → 0.0.5
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/CHANGES +4 -0
- data/Makefile +19 -0
- data/lib/uri/component/query.rb +37 -11
- data/lib/uri/component/userinfo.rb +1 -1
- data/lib/uri/component/version.rb +1 -1
- data/test/test_component_query.rb +30 -0
- data/test/test_component_userinfo.rb +14 -0
- metadata +5 -3
data/CHANGES
ADDED
data/Makefile
ADDED
data/lib/uri/component/query.rb
CHANGED
@@ -45,6 +45,24 @@ module URI #:nodoc:
|
|
45
45
|
## p query.to_uri
|
46
46
|
## #=> "foo=1&foo=2&foo=3&bar=baz%40example.jp"
|
47
47
|
class QueryParamsHash < Hash
|
48
|
+
def initialize
|
49
|
+
super
|
50
|
+
@nil = true
|
51
|
+
end
|
52
|
+
|
53
|
+
def clear
|
54
|
+
super
|
55
|
+
@nil = true
|
56
|
+
end
|
57
|
+
|
58
|
+
def nil=(flag)
|
59
|
+
@nil = flag
|
60
|
+
end
|
61
|
+
|
62
|
+
def nil?
|
63
|
+
return !@nil
|
64
|
+
end
|
65
|
+
|
48
66
|
def convert_key(key) #:nodoc:
|
49
67
|
return key.kind_of?(String) ? key : key.to_s
|
50
68
|
end
|
@@ -70,10 +88,12 @@ module URI #:nodoc:
|
|
70
88
|
end
|
71
89
|
|
72
90
|
def []=(key, values) #:nodoc:
|
91
|
+
@nil = false
|
73
92
|
values = [values] unless values.kind_of?(Array)
|
74
93
|
super(self.convert_key(key), values)
|
75
94
|
end
|
76
95
|
def store(key, values) #:nodoc:
|
96
|
+
@nil = false
|
77
97
|
self[key] = values
|
78
98
|
end
|
79
99
|
|
@@ -126,27 +146,31 @@ module URI #:nodoc:
|
|
126
146
|
QueryMixin.__send__(:included, klass)
|
127
147
|
end
|
128
148
|
|
129
|
-
def initialize(query_str=
|
130
|
-
unless query_str =~ RE_COMPONENT
|
149
|
+
def initialize(query_str=nil)
|
150
|
+
unless !query_str || query_str =~ RE_COMPONENT
|
131
151
|
raise InvalidURIError, "bad Query component for URI: #{query_str}"
|
132
152
|
end
|
133
153
|
|
134
154
|
@params = QueryParamsHash.new
|
135
|
-
@params.default_proc = Proc.new {|hash, key|
|
136
|
-
hash[key] = [] unless hash.key?(key)
|
137
|
-
}
|
138
155
|
@param_separator = DEFAULT_PARAM_SEPARATOR
|
139
156
|
|
140
|
-
query_str
|
141
|
-
|
142
|
-
|
143
|
-
|
157
|
+
if query_str
|
158
|
+
@params.nil = false
|
159
|
+
query_str.split(/[&;]/).each do |param|
|
160
|
+
next if param.nil?
|
161
|
+
name, value = param.split('=', 2).map do |v|
|
162
|
+
CGI.unescape(v)
|
163
|
+
end
|
164
|
+
@params[name] ||= []
|
165
|
+
@params[name] << value ? value : nil
|
144
166
|
end
|
145
|
-
@params[name] ||= []
|
146
|
-
@params[name] << value ? value : nil
|
147
167
|
end
|
148
168
|
end
|
149
169
|
|
170
|
+
def clear
|
171
|
+
@params.clear
|
172
|
+
end
|
173
|
+
|
150
174
|
def [](key)
|
151
175
|
return @params[key]
|
152
176
|
end
|
@@ -165,6 +189,8 @@ module URI #:nodoc:
|
|
165
189
|
end
|
166
190
|
|
167
191
|
def to_uri(separator=@param_separator)
|
192
|
+
return nil unless @params.nil?
|
193
|
+
|
168
194
|
query = []
|
169
195
|
|
170
196
|
@params.each do |name, values|
|
@@ -14,6 +14,10 @@ class QueryTest < Test::Unit::TestCase
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def test_parse
|
17
|
+
q_uri = nil
|
18
|
+
q = UCQ.new(q_uri)
|
19
|
+
assert_equal(q_uri, q.to_uri)
|
20
|
+
|
17
21
|
q_uri = ''
|
18
22
|
q = UCQ.new(q_uri)
|
19
23
|
assert_equal(q_uri, q.to_uri)
|
@@ -100,6 +104,15 @@ class QueryTest < Test::Unit::TestCase
|
|
100
104
|
end
|
101
105
|
|
102
106
|
def test_set
|
107
|
+
q = UCQ.new()
|
108
|
+
assert_nil(q.to_uri)
|
109
|
+
q.params['foo'] = [1]
|
110
|
+
assert_equal('foo=1', q.to_uri)
|
111
|
+
q.params['foo'] = []
|
112
|
+
assert_equal('', q.to_uri)
|
113
|
+
q.params.clear
|
114
|
+
assert_nil(q.to_uri)
|
115
|
+
|
103
116
|
q = UCQ.new('')
|
104
117
|
q.params['foo'] = [1]
|
105
118
|
assert_equal('foo=1', q.to_uri)
|
@@ -143,6 +156,23 @@ class QueryTest < Test::Unit::TestCase
|
|
143
156
|
def test_mixin
|
144
157
|
UCQ.mixin(URI::HTTPS)
|
145
158
|
|
159
|
+
u_uri = 'https://example.jp/'
|
160
|
+
u = URI.parse(u_uri)
|
161
|
+
assert_equal(u_uri, u.to_s)
|
162
|
+
assert_nil(u.query)
|
163
|
+
q = u.query_component
|
164
|
+
assert_kind_of(UCQ, q)
|
165
|
+
assert_nil(q.to_s)
|
166
|
+
q.params['foo'] = [1]
|
167
|
+
assert_equal('foo=1', u.query)
|
168
|
+
assert_equal(u_uri + '?foo=1', u.to_s)
|
169
|
+
q.params['foo'] = []
|
170
|
+
assert_equal('', u.query)
|
171
|
+
assert_equal(u_uri + '?', u.to_s)
|
172
|
+
q.clear
|
173
|
+
assert_nil(q.to_s)
|
174
|
+
assert_equal(u_uri, u.to_s)
|
175
|
+
|
146
176
|
u_uri = 'https://example.jp/?foo=123%40example&bar=abc%20xyz'
|
147
177
|
u_uri_x = u_uri.gsub('+', '%2B').gsub('%20', '+')
|
148
178
|
u = URI.parse(u_uri)
|
@@ -103,6 +103,20 @@ class UserInfoTest < Test::Unit::TestCase
|
|
103
103
|
def test_mixin
|
104
104
|
UCUI.mixin(URI::HTTPS)
|
105
105
|
|
106
|
+
u_uri = 'https://example.jp/'
|
107
|
+
u = URI.parse(u_uri)
|
108
|
+
assert_equal(u_uri, u.to_s)
|
109
|
+
assert_nil(u.userinfo)
|
110
|
+
i = u.userinfo_component
|
111
|
+
assert_kind_of(UCUI, i)
|
112
|
+
assert_nil(i.to_s)
|
113
|
+
i.user = 'user'
|
114
|
+
assert_equal(u_uri.sub('//', '//user@'), u.to_s)
|
115
|
+
assert_equal('user', i.to_s)
|
116
|
+
i.user = nil
|
117
|
+
assert_equal(u_uri, u.to_s)
|
118
|
+
assert_nil(u.userinfo)
|
119
|
+
|
106
120
|
u_uri = 'https://user%20name:p%40ssword@example.jp/'
|
107
121
|
u = URI.parse(u_uri)
|
108
122
|
i = u.userinfo_component
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: uri-component
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2013-10-23 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: Handle URI components as an object
|
15
15
|
email:
|
@@ -18,7 +18,9 @@ executables: []
|
|
18
18
|
extensions: []
|
19
19
|
extra_rdoc_files: []
|
20
20
|
files:
|
21
|
+
- CHANGES
|
21
22
|
- Gemfile
|
23
|
+
- Makefile
|
22
24
|
- Rakefile
|
23
25
|
- lib/uri/component.rb
|
24
26
|
- lib/uri/component/path.rb
|
@@ -49,7 +51,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
49
51
|
version: '0'
|
50
52
|
requirements: []
|
51
53
|
rubyforge_project:
|
52
|
-
rubygems_version: 1.8.
|
54
|
+
rubygems_version: 1.8.23
|
53
55
|
signing_key:
|
54
56
|
specification_version: 3
|
55
57
|
summary: URI::Component::* classes
|