diff options
| -rw-r--r-- | lib/puppet/interface/action.rb | 11 | ||||
| -rwxr-xr-x | spec/lib/puppet/face/basetest.rb | 6 | ||||
| -rwxr-xr-x | spec/unit/application/face_base_spec.rb | 8 |
3 files changed, 23 insertions, 2 deletions
diff --git a/lib/puppet/interface/action.rb b/lib/puppet/interface/action.rb index d4cf23fce..622371a4e 100644 --- a/lib/puppet/interface/action.rb +++ b/lib/puppet/interface/action.rb @@ -76,8 +76,15 @@ class Puppet::Interface::Action unless type.is_a? Symbol raise ArgumentError, "The rendering format must be a symbol, not #{type.class.name}" end - return unless @when_rendering.has_key? type - return @when_rendering[type].bind(@face) + # Do we have a rendering hook for this name? + return @when_rendering[type].bind(@face) if @when_rendering.has_key? type + + # How about by another name? + alt = type.to_s.sub(/^to_/, '').to_sym + return @when_rendering[alt].bind(@face) if @when_rendering.has_key? alt + + # Guess not, nothing to run. + return nil end def set_rendering_method_for(type, proc) unless proc.is_a? Proc diff --git a/spec/lib/puppet/face/basetest.rb b/spec/lib/puppet/face/basetest.rb index 41a4ef3f9..9398f5b2d 100755 --- a/spec/lib/puppet/face/basetest.rb +++ b/spec/lib/puppet/face/basetest.rb @@ -32,4 +32,10 @@ Puppet::Face.define(:basetest, '0.0.1') do summary "just raises an exception" when_invoked do |options| raise ArgumentError, "your failure" end end + + action :with_s_rendering_hook do + summary "has a rendering hook for 's'" + when_invoked do |options| "this is not the hook you are looking for" end + when_rendering :s do |value| "you invoked the 's' rendering hook" end + end end diff --git a/spec/unit/application/face_base_spec.rb b/spec/unit/application/face_base_spec.rb index d8c970157..133e6b2e9 100755 --- a/spec/unit/application/face_base_spec.rb +++ b/spec/unit/application/face_base_spec.rb @@ -319,5 +319,13 @@ EOT expect { app.run }.to exit_with 0 }.to have_printed(/--- 3/) end + + it "should invoke when_rendering hook 's' when asked to render-as 's'" do + app.command_line.stubs(:args).returns %w{with_s_rendering_hook --render-as s} + app.action = app.face.get_action(:with_s_rendering_hook) + expect { + expect { app.run }.to exit_with 0 + }.to have_printed(/you invoked the 's' rendering hook/) + end end end |
