+1, this is essentially the same thing I contributed as the second patch for #1469, except yours is better than mine as it handles floating points numbers. That also means, there will be some conflict if you merge my patch. Should I rebase #1469 on top of this patch and get rid of the second part?
I was wondering if that won't add some issues is if you ever have to transfer file modes through this way. Thanks, Brice On Tue, 2009-03-10 at 00:51 -0500, Luke Kanies wrote: > Signed-off-by: Luke Kanies <[email protected]> > --- > lib/puppet/indirector/rest.rb | 1 + > lib/puppet/network/http/handler.rb | 2 ++ > spec/unit/indirector/rest.rb | 10 ++++++++++ > spec/unit/network/http/mongrel/rest.rb | 12 ++++++++++++ > 4 files changed, 25 insertions(+), 0 deletions(-) > > diff --git a/lib/puppet/indirector/rest.rb b/lib/puppet/indirector/rest.rb > index ce459b9..23ed56d 100644 > --- a/lib/puppet/indirector/rest.rb > +++ b/lib/puppet/indirector/rest.rb > @@ -94,6 +94,7 @@ class Puppet::Indirector::REST < > Puppet::Indirector::Terminus > case value > when nil; next > when true, false; value = value.to_s > + when Fixnum, Bignum, Float; value = value # nothing > when String; value = URI.escape(value) > when Symbol; value = URI.escape(value.to_s) > when Array; value = URI.escape(YAML.dump(value)) > diff --git a/lib/puppet/network/http/handler.rb > b/lib/puppet/network/http/handler.rb > index cce6798..7f6bd41 100644 > --- a/lib/puppet/network/http/handler.rb > +++ b/lib/puppet/network/http/handler.rb > @@ -193,6 +193,8 @@ module Puppet::Network::HTTP::Handler > else > value = true if value == "true" > value = false if value == "false" > + value = Integer(value) if value =~ /^\d+$/ > + value = value.to_f if value =~ /^\d+\.\d+$/ > end > result[param.to_sym] = value > result > diff --git a/spec/unit/indirector/rest.rb b/spec/unit/indirector/rest.rb > index 4fa30b2..8ed50d3 100755 > --- a/spec/unit/indirector/rest.rb > +++ b/spec/unit/indirector/rest.rb > @@ -194,6 +194,16 @@ describe Puppet::Indirector::REST do > @searcher.query_string(@request).should == "?one=#{escaping}" > end > > + it "should convert to a string all option values that are integers" > do > + @request.stubs(:options).returns(:one => 50) > + @searcher.query_string(@request).should == "?one=50" > + end > + > + it "should convert to a string all option values that are floating > point numbers" do > + @request.stubs(:options).returns(:one => 1.2) > + @searcher.query_string(@request).should == "?one=1.2" > + end > + > it "should convert to a string and URI-escape all option values that > are symbols" do > escaping = URI.escape("sym bol") > @request.stubs(:options).returns(:one => :"sym bol") > diff --git a/spec/unit/network/http/mongrel/rest.rb > b/spec/unit/network/http/mongrel/rest.rb > index e72d4f5..c03698d 100755 > --- a/spec/unit/network/http/mongrel/rest.rb > +++ b/spec/unit/network/http/mongrel/rest.rb > @@ -128,6 +128,18 @@ describe "Puppet::Network::HTTP::MongrelREST" do > result[:foo].should be_false > end > > + it "should convert integer arguments to Integers" do > + @request.expects(:params).returns('QUERY_STRING' => 'foo=15') > + result = @handler.params(@request) > + result[:foo].should == 15 > + end > + > + it "should convert floating point arguments to Floats" do > + @request.expects(:params).returns('QUERY_STRING' => > 'foo=1.5') > + result = @handler.params(@request) > + result[:foo].should == 1.5 > + end > + > it "should YAML-load and URI-decode values that are > YAML-encoded" do > escaping = URI.escape(YAML.dump(%w{one two})) > @request.expects(:params).returns('QUERY_STRING' => > "foo=#{escaping}") --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Puppet Developers" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/puppet-dev?hl=en -~----------~----~----~----~------~----~------~--~---
