summaryrefslogtreecommitdiffstats
path: root/lib/puppet/string/action.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/puppet/string/action.rb')
-rw-r--r--lib/puppet/string/action.rb32
1 files changed, 27 insertions, 5 deletions
diff --git a/lib/puppet/string/action.rb b/lib/puppet/string/action.rb
index 5a7f3f203..4219aca0a 100644
--- a/lib/puppet/string/action.rb
+++ b/lib/puppet/string/action.rb
@@ -1,4 +1,5 @@
require 'puppet/string'
+require 'puppet/string/option'
class Puppet::String::Action
attr_reader :name
@@ -8,11 +9,10 @@ class Puppet::String::Action
end
def initialize(string, name, attrs = {})
- name = name.to_s
- raise "'#{name}' is an invalid action name" unless name =~ /^[a-z]\w*$/
-
- @string = string
- @name = name
+ raise "#{name.inspect} is an invalid action name" unless name.to_s =~ /^[a-z]\w*$/
+ @string = string
+ @name = name.to_sym
+ @options = {}
attrs.each do |k,v| send("#{k}=", v) end
end
@@ -27,4 +27,26 @@ class Puppet::String::Action
@string.meta_def(@name, &block)
end
end
+
+ def add_option(option)
+ if option? option.name then
+ raise ArgumentError, "#{option.name} duplicates an existing option on #{self}"
+ elsif @string.option? option.name then
+ raise ArgumentError, "#{option.name} duplicates an existing option on #{@string}"
+ end
+
+ @options[option.name] = option
+ end
+
+ def option?(name)
+ @options.include? name.to_sym
+ end
+
+ def options
+ (@options.keys + @string.options).sort
+ end
+
+ def get_option(name)
+ @options[name.to_sym] || @string.get_option(name)
+ end
end