diff options
author | Daniel Pittman <daniel@puppetlabs.com> | 2011-04-18 17:21:28 -0700 |
---|---|---|
committer | Daniel Pittman <daniel@puppetlabs.com> | 2011-04-19 10:53:46 -0700 |
commit | 12098f2d54e8e00a687f42837deeef65c7759389 (patch) | |
tree | b10446af28c549a2befb719f8906dc9aba626987 | |
parent | 5938452dccc8c925bc6275a62ae96f50916cc239 (diff) | |
download | puppet-12098f2d54e8e00a687f42837deeef65c7759389.tar.gz puppet-12098f2d54e8e00a687f42837deeef65c7759389.tar.xz puppet-12098f2d54e8e00a687f42837deeef65c7759389.zip |
(#7013) Handle rendering modes out in the application layer.
We no longer establish the rendering mode in the actions; they just default to
"nothing", and let that flow on out to the application layer. That lets the
facade we put before the face determine the default behaviour.
This is mostly a no-op down in the CLI side, but it makes it much easier to
integrate into MCollective, HTTP-API, and for other non-CLI users of Faces.
Reviewed-By: Max Martin <max@puppetlabs.com>
-rw-r--r-- | lib/puppet/application/face_base.rb | 12 | ||||
-rw-r--r-- | lib/puppet/interface/action.rb | 1 | ||||
-rwxr-xr-x | spec/unit/application/face_base_spec.rb | 13 | ||||
-rwxr-xr-x | spec/unit/interface/action_builder_spec.rb | 4 |
4 files changed, 19 insertions, 11 deletions
diff --git a/lib/puppet/application/face_base.rb b/lib/puppet/application/face_base.rb index 456f0c610..6b13e16d4 100644 --- a/lib/puppet/application/face_base.rb +++ b/lib/puppet/application/face_base.rb @@ -37,21 +37,23 @@ class Puppet::Application::FaceBase < Puppet::Application # Override this if you need custom rendering. def render(result) - if render_as then - render_method = Puppet::Network::FormatHandler.format(render_as).render_method + format = render_as || action.render_as || :for_humans + if format == :for_humans then + render_for_humans(result) + else + render_method = Puppet::Network::FormatHandler.format(format).render_method if render_method == "to_pson" - jj result + PSON::pretty_generate(result, :allow_nan => true, :max_nesting => false) else result.send(render_method) end - else - render_for_humans(result) end end def render_for_humans(result) # String to String return result if result.is_a? String + return result if result.is_a? Numeric # Simple hash to table if result.is_a? Hash and result.keys.all? { |x| x.is_a? String or x.is_a? Numeric } diff --git a/lib/puppet/interface/action.rb b/lib/puppet/interface/action.rb index 8bacc216d..d9ba4eb60 100644 --- a/lib/puppet/interface/action.rb +++ b/lib/puppet/interface/action.rb @@ -11,7 +11,6 @@ class Puppet::Interface::Action @options = {} @when_rendering = {} - @render_as = :for_humans end # This is not nice, but it is the easiest way to make us behave like the diff --git a/spec/unit/application/face_base_spec.rb b/spec/unit/application/face_base_spec.rb index 6a4647246..6dfde4367 100755 --- a/spec/unit/application/face_base_spec.rb +++ b/spec/unit/application/face_base_spec.rb @@ -211,11 +211,18 @@ describe Puppet::Application::FaceBase do end describe "#render" do - it "should just return a String" do - app.render("hello").should == "hello" + before :each do + app.face = Puppet::Face[:basetest, '0.0.1'] + app.action = app.face.get_action(:foo) + end + + ["hello", 1, 1.0].each do |input| + it "should just return a #{input.class.name}" do + app.render(input).should == input + end end - [1, 1.000, [1, 2], ["one"], [{ 1 => 1 }]].each do |input| + [[1, 2], ["one"], [{ 1 => 1 }]].each do |input| it "should render #{input.class} using the 'pp' library" do app.render(input).should == input.pretty_inspect end diff --git a/spec/unit/interface/action_builder_spec.rb b/spec/unit/interface/action_builder_spec.rb index c122d3eb1..bf7afa74e 100755 --- a/spec/unit/interface/action_builder_spec.rb +++ b/spec/unit/interface/action_builder_spec.rb @@ -151,9 +151,9 @@ describe Puppet::Interface::ActionBuilder do end context "#render_as" do - it "should default to :for_humans" do + it "should default to nil (eg: based on context)" do action = Puppet::Interface::ActionBuilder.build(face, :foo) do end - action.render_as.should == :for_humans + action.render_as.should be_nil end it "should fail if not rendering format is given" do |