    # File lib/chef/run_list/run_list_item.rb, line 28
          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[recipe_name@1.0.0]
                @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)
                # recipe_name@1.0.0
                @type = :recipe
                @name = match[1]
                @version = match[3] if match[3]
              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