summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Pittman <daniel@puppetlabs.com>2011-04-18 17:21:28 -0700
committerDaniel Pittman <daniel@puppetlabs.com>2011-04-19 10:53:46 -0700
commit12098f2d54e8e00a687f42837deeef65c7759389 (patch)
treeb10446af28c549a2befb719f8906dc9aba626987
parent5938452dccc8c925bc6275a62ae96f50916cc239 (diff)
downloadpuppet-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.rb12
-rw-r--r--lib/puppet/interface/action.rb1
-rwxr-xr-xspec/unit/application/face_base_spec.rb13
-rwxr-xr-xspec/unit/interface/action_builder_spec.rb4
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