class Composer::Repository::HashRepository

Public Class Methods

new(packages = []) click to toggle source
# File lib/composer/repository/hash_repository.rb, line 15
def initialize(packages = [])
  packages.each do |package|
    add_package(package)
  end
end

Public Instance Methods

add_package(package) click to toggle source

Adds a new package to the repository

Params: package Package The package to add

# File lib/composer/repository/hash_repository.rb, line 112
def add_package(package)
  unless package
    raise ArgumentError,
          'package must be specified'
  end
  unless package.is_a?(Composer::Package::BasePackage)
    raise TypeError,
          'package must be a class or superclass of \
          Composer::Package::Package'
  end

  initialize_repository unless @packages

  package.repository = self

  @packages << package

  if package.instance_of?(Composer::Package::AliasPackage)
    aliased_package = package.alias_of
    if aliased_package.repository === nil
      add_package(aliased_package)
    end
  end
end
count() click to toggle source
# File lib/composer/repository/hash_repository.rb, line 169
def count
  @packages.length
end
find_package(name, version = nil) click to toggle source
# File lib/composer/repository/hash_repository.rb, line 21
def find_package(name, version = nil)
  # normalize name
  name = name.downcase

  # normalize version
  if !version.nil?
    version_parser = Composer::Package::Version::VersionParser.new
    version = version_parser.normalize(version)
  end

  match = nil
  packages.each do |package|
    if package.name === name
      if version.nil? || package.version === version
        match = package
        break
      end
    end
  end
  match
end
find_packages(name, version = nil) click to toggle source
# File lib/composer/repository/hash_repository.rb, line 43
def find_packages(name, version = nil)
    # normalize name
    name = name.downcase

    # normalize version
    if version != nil
      version_parser = Composer::Package::Version::VersionParser.new
      version = version_parser.normalize(version)
    end

    matches = []
    packages.each do |package|
      if package.name === name && (nil === version || version === package.version)
        matches.push(package)
      end
    end
    matches
end
package?(package) click to toggle source
# File lib/composer/repository/hash_repository.rb, line 89
def package?(package)
  unless package
    raise ArgumentError,
          'package must be specified'
  end
  unless package.is_a?(Composer::Package::BasePackage)
    raise TypeError,
          'package must be a class or superclass of \
          Composer::Package::Package'
  end

  package_id = package.unique_name
  packages.each do |repo_package|
    return true if repo_package.unique_name === package_id
  end

  false
end
packages() click to toggle source
# File lib/composer/repository/hash_repository.rb, line 164
def packages
  initialize_repository unless @packages
  @packages
end
remove_package(package) click to toggle source

Removes package from repository.

Params: package package instance to remove

# File lib/composer/repository/hash_repository.rb, line 141
def remove_package(package)
  unless package
    raise ArgumentError,
          'package must be specified'
  end
  unless package.is_a?(Composer::Package::BasePackage)
    raise TypeError,
          'package must be a class or superclass of \
          Composer::Package::Package'
  end

  package_id = package.unique_name

  index = 0
  packages.each do |repo_package|
    if repo_package.unique_name === package_id
      @packages.delete_at(index)
      return
    end
    index = index + 1
  end
end

Protected Instance Methods

create_alias_package(package, version, pretty_version) click to toggle source
# File lib/composer/repository/hash_repository.rb, line 181
def create_alias_package(package, version, pretty_version)
  if package.instance_of?(Composer::Package::AliasPackage)
    alias_of = package.alias_of
  else
    alias_of = package
  end
  Composer::Package::AliasPackage.new(
    alias_of,
    version,
    pretty_version
  )
end
initialize_repository() click to toggle source

Initializes the packages array. Mostly meant as an extension point.

# File lib/composer/repository/hash_repository.rb, line 177
def initialize_repository
  @packages = []
end