gin 1.1.0 → 1.1.1
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/History.rdoc +6 -1
- data/lib/gin.rb +1 -1
- data/lib/gin/router.rb +5 -4
- data/test/test_router.rb +31 -0
- data/test/test_test.rb +2 -2
- metadata +2 -2
data/History.rdoc
CHANGED
data/lib/gin.rb
CHANGED
data/lib/gin/router.rb
CHANGED
@@ -152,8 +152,9 @@ class Gin::Router
|
|
152
152
|
def to_path params={}
|
153
153
|
rendered_path = @path.dup
|
154
154
|
rendered_path = rendered_path % @param_keys.map do |k|
|
155
|
-
params.delete(k) || params.delete(k.to_sym)
|
156
|
-
|
155
|
+
val = params.delete(k) || params.delete(k.to_sym)
|
156
|
+
raise(PathArgumentError, "Missing param #{k}") unless val
|
157
|
+
CGI.escape(val.to_s)
|
157
158
|
end unless @param_keys.empty?
|
158
159
|
|
159
160
|
rendered_path << "?#{Gin.build_query(params)}" unless params.empty?
|
@@ -326,10 +327,10 @@ class Gin::Router
|
|
326
327
|
curr_node = curr_node[key]
|
327
328
|
|
328
329
|
elsif curr_node["%s"]
|
329
|
-
param_vals << key
|
330
|
+
param_vals << CGI.unescape(key)
|
330
331
|
curr_node = curr_node["%s"]
|
331
332
|
|
332
|
-
elsif child_and_matches = curr_node.match(key)
|
333
|
+
elsif child_and_matches = curr_node.match(CGI.unescape(key))
|
333
334
|
param_vals.concat child_and_matches[1]
|
334
335
|
curr_node = child_and_matches[0]
|
335
336
|
|
data/test/test_router.rb
CHANGED
@@ -38,6 +38,26 @@ class RouterTest < Test::Unit::TestCase
|
|
38
38
|
end
|
39
39
|
|
40
40
|
|
41
|
+
def test_add_and_retrieve_cgi_escaped
|
42
|
+
@router.add MyCtrl, '/my_ctrl' do
|
43
|
+
get :bar, "/bar/:id"
|
44
|
+
end
|
45
|
+
|
46
|
+
assert_equal [MyCtrl, :bar, {'id' => '123 456'}],
|
47
|
+
@router.resources_for("GET", "/my_ctrl/bar/123+456")
|
48
|
+
end
|
49
|
+
|
50
|
+
|
51
|
+
def test_add_and_retrieve_complex_cgi_escaped
|
52
|
+
@router.add MyCtrl, '/my_ctrl' do
|
53
|
+
get :bar, "/bar/:type/:id.:format"
|
54
|
+
end
|
55
|
+
|
56
|
+
assert_equal [MyCtrl, :bar, {"type"=>"[I]", "id"=>"123 456", "format"=>"json"}],
|
57
|
+
@router.resources_for("GET", "/my_ctrl/bar/%5BI%5D/123+456.json")
|
58
|
+
end
|
59
|
+
|
60
|
+
|
41
61
|
def test_add_and_retrieve_named_route
|
42
62
|
@router.add FooController, "/foo" do
|
43
63
|
get :index, "/", :all_foo
|
@@ -240,4 +260,15 @@ class RouterTest < Test::Unit::TestCase
|
|
240
260
|
@router.path_to(MyCtrl, :bar, params)
|
241
261
|
end
|
242
262
|
end
|
263
|
+
|
264
|
+
|
265
|
+
def test_path_to_complex_param_cgi_escaped
|
266
|
+
@router.add MyCtrl, "/" do
|
267
|
+
get :bar, "/bar/:type/:id.:format"
|
268
|
+
end
|
269
|
+
|
270
|
+
params = {'type' => 'sub/thing', 'id' => '123&4', 'more' => 'hi there', 'format' => 'json'}
|
271
|
+
assert_equal "/bar/sub%2Fthing/123%264.json?more=hi+there",
|
272
|
+
@router.path_to(MyCtrl, :bar, params)
|
273
|
+
end
|
243
274
|
end
|
data/test/test_test.rb
CHANGED
@@ -76,9 +76,9 @@ class TestTest < Test::Unit::TestCase
|
|
76
76
|
|
77
77
|
def test_make_request
|
78
78
|
resp = @tests.make_request :get, :show_bar,
|
79
|
-
{id: 123, foo: "BAR", bar: "BAZ"},'REMOTE_ADDR' => '127.0.0.1'
|
79
|
+
{id: 123, foo: "BAR", bar: "BAZ Foo"},'REMOTE_ADDR' => '127.0.0.1'
|
80
80
|
|
81
|
-
assert_equal "foo=BAR&bar=BAZ", @tests.req_env['QUERY_STRING']
|
81
|
+
assert_equal "foo=BAR&bar=BAZ+Foo", @tests.req_env['QUERY_STRING']
|
82
82
|
assert_equal "/bar/123", @tests.req_env['PATH_INFO']
|
83
83
|
assert_equal "127.0.0.1", @tests.req_env['REMOTE_ADDR']
|
84
84
|
assert_equal "127.0.0.1", @tests.request.ip
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gin
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -225,7 +225,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
225
225
|
version: '0'
|
226
226
|
segments:
|
227
227
|
- 0
|
228
|
-
hash:
|
228
|
+
hash: 3379788584365895606
|
229
229
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
230
230
|
none: false
|
231
231
|
requirements:
|