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)
@type = :recipe
@name = match[1]
@version = match[3] if match[3]
elsif match = QUALIFIED_ROLE.match(item)
@type = :role
@name = match[1]
elsif match = VERSIONED_UNQUALIFIED_RECIPE.match(item)
@type = :recipe
@name = match[1]
@version = match[3] if match[3]
else
@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