Class: Chef::RunList::RunListItem
- Defined in:
- lib/chef/run_list/run_list_item.rb
Constant Summary collapse
- QUALIFIED_RECIPE =
%r{^recipe\[([^\]@]+)(@([0-9]+(\.[0-9]+){1,2}))?\]$}
- QUALIFIED_ROLE =
%r{^role\[([^\]]+)\]$}
- VERSIONED_UNQUALIFIED_RECIPE =
%r{^([^@]+)(@([0-9]+(\.[0-9]+){1,2}))$}
- FALSE_FRIEND =
%r{[\[\]]}
Instance Attribute Summary collapse
-
#name ⇒ Object
readonly
Returns the value of attribute name.
-
#type ⇒ Object
readonly
Returns the value of attribute type.
-
#version ⇒ Object
readonly
Returns the value of attribute version.
Instance Method Summary collapse
- #==(other) ⇒ Object
- #assert_hash_is_valid_run_list_item!(item) ⇒ Object
-
#initialize(item) ⇒ RunListItem
constructor
A new instance of RunListItem.
- #recipe? ⇒ Boolean
- #role? ⇒ Boolean
- #to_s ⇒ Object
Constructor Details
#initialize(item) ⇒ RunListItem
Returns a new instance of RunListItem.
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/chef/run_list/run_list_item.rb', line 29 def initialize(item) @version = nil case item when Hash assert_hash_is_valid_run_list_item!(item) @type = (item['type'] || item[:type]).to_sym @name = item['name'] || item[:name] if (item.has_key?('version') || item.has_key?(:version)) @version = item['version'] || item[:version] end when String if match = QUALIFIED_RECIPE.match(item) # recipe[recipe_name] # recipe[[email protected]] @type = :recipe @name = match[1] @version = match[3] if match[3] elsif match = QUALIFIED_ROLE.match(item) # role[role_name] @type = :role @name = match[1] elsif match = VERSIONED_UNQUALIFIED_RECIPE.match(item) # [email protected] @type = :recipe @name = match[1] @version = match[3] if match[3] elsif match = FALSE_FRIEND.match(item) # Recipe[recipe_name] # roles[role_name] name = match[1] raise ArgumentError, "Unable to create #{self.class} from #{item.class}:#{item.inspect}: must be recipe[#{name}] or role[#{name}]" else # recipe_name @type = :recipe @name = item end else raise ArgumentError, "Unable to create #{self.class} from #{item.class}:#{item.inspect}: must be a Hash or String" end end |
Instance Attribute Details
#name ⇒ Object (readonly)
Returns the value of attribute name.
26 27 28 |
# File 'lib/chef/run_list/run_list_item.rb', line 26 def name @name end |
#type ⇒ Object (readonly)
Returns the value of attribute type.
26 27 28 |
# File 'lib/chef/run_list/run_list_item.rb', line 26 def type @type end |
#version ⇒ Object (readonly)
Returns the value of attribute version.
26 27 28 |
# File 'lib/chef/run_list/run_list_item.rb', line 26 def version @version end |
Instance Method Details
#==(other) ⇒ Object
83 84 85 86 87 88 89 |
# File 'lib/chef/run_list/run_list_item.rb', line 83 def ==(other) if other.kind_of?(String) self.to_s == other.to_s else other.respond_to?(:type) && other.respond_to?(:name) && other.respond_to?(:version) && other.type == @type && other.name == @name && other.version == @version end end |
#assert_hash_is_valid_run_list_item!(item) ⇒ Object
91 92 93 94 95 |
# File 'lib/chef/run_list/run_list_item.rb', line 91 def assert_hash_is_valid_run_list_item!(item) unless (item.key?('type')|| item.key?(:type)) && (item.key?('name') || item.key?(:name)) raise ArgumentError, "Initializing a #{self.class} from a hash requires that it have a 'type' and 'name' key" end end |
#recipe? ⇒ Boolean
79 80 81 |
# File 'lib/chef/run_list/run_list_item.rb', line 79 def recipe? @type == :recipe end |
#role? ⇒ Boolean
75 76 77 |
# File 'lib/chef/run_list/run_list_item.rb', line 75 def role? @type == :role end |
#to_s ⇒ Object
71 72 73 |
# File 'lib/chef/run_list/run_list_item.rb', line 71 def to_s "#{@type}[#{@name}#{@version ? "@#{@version}" :""}]" end |