summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/chef_zero/rest_base.rb8
-rw-r--r--lib/chef_zero/rest_request.rb8
2 files changed, 12 insertions, 4 deletions
diff --git a/lib/chef_zero/rest_base.rb b/lib/chef_zero/rest_base.rb
index 89c2b12..be50de2 100644
--- a/lib/chef_zero/rest_base.rb
+++ b/lib/chef_zero/rest_base.rb
@@ -77,7 +77,7 @@ module ChefZero
def get_data(request, rest_path = nil, *options)
rest_path ||= request.rest_path
- rest_path = rest_path.map { |v| URI.decode(v) }
+ rest_path = rest_path.map { |v| self.class.rfc2396_parser.unescape(v) }
begin
data_store.get(rest_path, request)
rescue DataStore::DataNotFoundError
@@ -284,7 +284,7 @@ module ChefZero
end
def self.build_uri(base_uri, rest_path)
- "#{base_uri}/#{rest_path.map { |v| URI.escape(v) }.join("/")}"
+ "#{base_uri}/#{rest_path.map { |v| rfc2396_parser.escape(v) }.join("/")}"
end
def populate_defaults(request, response)
@@ -324,5 +324,9 @@ module ChefZero
name.size > 255 ||
name =~ /[+ !]/
end
+
+ def self.rfc2396_parser
+ @parser ||= URI::RFC2396_Parser.new
+ end
end
end
diff --git a/lib/chef_zero/rest_request.rb b/lib/chef_zero/rest_request.rb
index 379cc20..c260316 100644
--- a/lib/chef_zero/rest_request.rb
+++ b/lib/chef_zero/rest_request.rb
@@ -1,8 +1,8 @@
require "rack/request"
+require "cgi"
module ChefZero
class RestRequest
-
def initialize(env, rest_base_prefix = [])
@env = env
@rest_base_prefix = rest_base_prefix
@@ -61,7 +61,7 @@ module ChefZero
@query_params ||= begin
params = Rack::Request.new(env).GET
params.keys.each do |key|
- params[key] = URI.unescape(params[key])
+ params[key] = self.class.rfc2396_parser.unescape(params[key])
end
params
end
@@ -80,5 +80,9 @@ module ChefZero
end
result
end
+
+ def self.rfc2396_parser
+ @parser ||= URI::RFC2396_Parser.new
+ end
end
end