source

in lib/omnibus/software.rb [370:417]


    def source(val = NULL)
      unless null?(val)
        unless val.is_a?(Hash)
          raise InvalidValue.new(:source,
            "be a kind of `Hash', but was `#{val.class.inspect}'")
        end

        val = canonicalize_source(val)

        extra_keys = val.keys - [
          :git, :file, :path, :url, 
          :md5, :sha1, :sha256, :sha512, 
          :cookie, :warning, :unsafe, :extract, :cached_name, :authorization, :internal, 
          :options, 
          :submodules 
        ]
        unless extra_keys.empty?
          raise InvalidValue.new(:source,
            "only include valid keys. Invalid keys: #{extra_keys.inspect}")
        end

        duplicate_keys = val.keys & %i{git file path url}
        unless duplicate_keys.size < 2
          raise InvalidValue.new(:source,
            "not include duplicate keys. Duplicate keys: #{duplicate_keys.inspect}")
        end

        if Config.use_internal_sources && val[:url]
          if internal_source_set? && val[:internal].nil?
            
            hash_types = %i{md5 sha1 sha256 sha512}
            val.each_key do |key|
              val.delete(key) unless hash_types.include?(key)
            end
          end

          @source ||= {}
          @source.merge!(val)
        else
          @source ||= {}
          @source.merge!(val)
        end
      end

      override = canonicalize_source(overrides[:source])
      apply_overrides(:source, override)
    end