diff options
Diffstat (limited to 'lib/puppet/indirector/rest.rb')
-rw-r--r-- | lib/puppet/indirector/rest.rb | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/lib/puppet/indirector/rest.rb b/lib/puppet/indirector/rest.rb index 5ac25f02d..2d0799286 100644 --- a/lib/puppet/indirector/rest.rb +++ b/lib/puppet/indirector/rest.rb @@ -87,11 +87,21 @@ class Puppet::Indirector::REST < Puppet::Indirector::Terminus deserialize network(request).put("/#{indirection.name}/", request.instance.render, headers) end - private - # Create the query string, if options are present. def query_string(request) return "" unless request.options and ! request.options.empty? - "?" + request.options.collect { |key, value| "%s=%s" % [key, value] }.join("&") + "?" + request.options.collect do |key, value| + case value + when nil; next + when true, false; value = value.to_s + when String; value = URI.escape(value) + when Symbol; value = URI.escape(value.to_s) + when Array; value = URI.escape(YAML.dump(value)) + else + raise ArgumentError, "HTTP REST queries cannot handle values of type '%s'" % value.class + end + + "%s=%s" % [key, value] + end.join("&") end end |