# 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