diff options
author | Nick Lewis <nick@puppetlabs.com> | 2011-03-22 12:54:52 -0700 |
---|---|---|
committer | Nick Lewis <nick@puppetlabs.com> | 2011-03-22 14:16:32 -0700 |
commit | e3d24865c89bccd0221f3d6d475d350f577ed3fb (patch) | |
tree | 01e2f42e8342767aa7f9e63e961a61bb81046b98 /lib/puppet/interface/action_manager.rb | |
parent | 45613e0f192778cd16f945d5d1eb109e6c8dee2d (diff) | |
download | puppet-e3d24865c89bccd0221f3d6d475d350f577ed3fb.tar.gz puppet-e3d24865c89bccd0221f3d6d475d350f577ed3fb.tar.xz puppet-e3d24865c89bccd0221f3d6d475d350f577ed3fb.zip |
(#6814) Create a dedicated Action class
This class will represents an action, and allows us to store metadata for an
action, and programmatically introspect and invoke them. A helper class
ActionBuilder represents the DSL for defining an action.
Also defined an "invoke" DSL method to handle the functionality of defining the
method for an action.
Reviewed-By: Daniel Pittman
Diffstat (limited to 'lib/puppet/interface/action_manager.rb')
-rw-r--r-- | lib/puppet/interface/action_manager.rb | 26 |
1 files changed, 15 insertions, 11 deletions
diff --git a/lib/puppet/interface/action_manager.rb b/lib/puppet/interface/action_manager.rb index 27a982929..8629b4cbe 100644 --- a/lib/puppet/interface/action_manager.rb +++ b/lib/puppet/interface/action_manager.rb @@ -1,32 +1,36 @@ +require 'puppet/interface/action_builder' + module Puppet::Interface::ActionManager # Declare that this app can take a specific action, and provide # the code to do so. def action(name, &block) - @actions ||= [] + @actions ||= {} name = name.to_s.downcase.to_sym + raise "Action #{name} already defined for #{self}" if action?(name) - @actions << name - if self.is_a?(Class) - define_method(name, &block) - else - meta_def(name, &block) - end + action = Puppet::Interface::ActionBuilder.build(self, name, &block) + + @actions[name] = action end def actions - @actions ||= [] - result = @actions.dup + @actions ||= {} + result = @actions.keys if self.is_a?(Class) and superclass.respond_to?(:actions) result += superclass.actions elsif self.class.respond_to?(:actions) result += self.class.actions end - result.sort { |a,b| a.to_s <=> b.to_s } + result.sort + end + + def get_action(name) + @actions[name].dup end def action?(name) - actions.include?(name.to_sym) + actions.include?(name) end end |