diff options
| author | Daniel Pittman <daniel@puppetlabs.com> | 2011-05-02 16:27:28 -0700 |
|---|---|---|
| committer | Daniel Pittman <daniel@puppetlabs.com> | 2011-05-03 16:09:51 -0700 |
| commit | 18b3584e16515cfc45aeaa8d0913de8e8bcb3e95 (patch) | |
| tree | a307832a2dc45005cd6cd9f3da3fb4e87cf2d5a8 | |
| parent | b3dd34b4d59329746042b23c1736ed432351a123 (diff) | |
| download | puppet-18b3584e16515cfc45aeaa8d0913de8e8bcb3e95.tar.gz puppet-18b3584e16515cfc45aeaa8d0913de8e8bcb3e95.tar.xz puppet-18b3584e16515cfc45aeaa8d0913de8e8bcb3e95.zip | |
(#7329) Consistent naming for rendering formats and hooks.
We refer to rendering formats pretty consistently as `json`, `yaml`, `s`, and
so forth; unqualified names.
On the other hand, we refer to the rendering hooks *mostly* as `to_*`, except
the `:for_humans` and `:json` formats. Which is kind of confusing because of
the internal inconsistency, and because it doesn't match the public name.
Fix the code to resolve both, so the `to_*` format still works, but we mostly
expect to use the `*` version, to match public expectation.
| -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 |
