# File lib/nanoc/base/source_data/item.rb, line 70
    def initialize(raw_content_or_raw_filename, attributes, identifier, params=nil)
      # Parse params
      params ||= {}
      params = { :mtime => params } if params.is_a?(Time)
      params[:binary] = false unless params.has_key?(:binary)

      if raw_content_or_raw_filename.nil?
        raise "attempted to create an item with no content/filename (identifier #{identifier})"
      end

      # Get type and raw content or raw filename
      @is_binary = params[:binary]
      if @is_binary
        @raw_filename = raw_content_or_raw_filename
      else
        @raw_content  = raw_content_or_raw_filename
      end

      # Get rest of params
      @attributes   = attributes.symbolize_keys_recursively
      @identifier   = identifier.cleaned_identifier.freeze

      # Set mtime
      @attributes.merge!(:mtime => params[:mtime]) if params[:mtime]

      @parent       = nil
      @children     = []

      @reps         = []
    end