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_builder.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_builder.rb')
-rw-r--r-- | lib/puppet/interface/action_builder.rb | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/lib/puppet/interface/action_builder.rb b/lib/puppet/interface/action_builder.rb new file mode 100644 index 000000000..777fcaf85 --- /dev/null +++ b/lib/puppet/interface/action_builder.rb @@ -0,0 +1,29 @@ +require 'puppet/interface' + +class Puppet::Interface::ActionBuilder + attr_reader :action + + def self.build(interface, name, &block) + name = name.to_s + raise "Action '#{name}' must specify a block" unless block + builder = new(interface, name, &block) + builder.action + end + + def initialize(interface, name, &block) + @interface = interface + @action = Puppet::Interface::Action.new(interface, name) + instance_eval(&block) + end + + # Ideally the method we're defining here would be added to the action, and a + # method on the interface would defer to it + def invoke(&block) + raise "Invoke called on an ActionBuilder with no corresponding Action" unless @action + if @interface.is_a?(Class) + @interface.define_method(@action.name, &block) + else + @interface.meta_def(@action.name, &block) + end + end +end |