class ReaPack::Index::Package

Constants

DESC_ATTR
DIR_SEPARATOR
TYPE_ATTR

Attributes

metadata[R]

Public Class Methods

new(node) click to toggle source
Calls superclass method ReaPack::Index::NamedNode::new
# File lib/reapack/index/package.rb, line 14
def initialize(node)
  super
  @metadata = Metadata.new node
end

Public Instance Methods

category() click to toggle source
# File lib/reapack/index/package.rb, line 25
def category
  @node.parent[NAME_ATTR]
end
description() click to toggle source
# File lib/reapack/index/package.rb, line 50
def description
  @node[DESC_ATTR].to_s
end
description=(new_desc) click to toggle source
# File lib/reapack/index/package.rb, line 54
def description=(new_desc)
  new_desc ||= String.new

  return if description == new_desc

  if new_desc.empty?
    @node.remove_attribute DESC_ATTR
  else
    @node[DESC_ATTR] = new_desc
  end

  @dirty = true
end
has_version?(name) click to toggle source
# File lib/reapack/index/package.rb, line 68
def has_version?(name)
  read_versions
  @versions.has_key? name
end
modified?() click to toggle source
Calls superclass method ReaPack::Index::NamedNode#modified?
# File lib/reapack/index/package.rb, line 21
def modified?
  super || versions.any? {|ver| ver.modified? } || @metadata.modified?
end
path() click to toggle source
# File lib/reapack/index/package.rb, line 33
def path
  @path ||= File.join category, name if category && name
end
topdir() click to toggle source
# File lib/reapack/index/package.rb, line 29
def topdir
  category&.split(DIR_SEPARATOR)&.first
end
type() click to toggle source
# File lib/reapack/index/package.rb, line 37
def type
  @node[TYPE_ATTR]&.to_sym
end
type=(new_type) click to toggle source
# File lib/reapack/index/package.rb, line 41
def type=(new_type)
  new_type = new_type.to_sym

  return if type == new_type

  @node[TYPE_ATTR] = new_type
  @dirty = true
end
version(name) { |ver| ... } click to toggle source
# File lib/reapack/index/package.rb, line 78
def version(name)
  if has_version? name
    ver = @versions[name]
  else
    @versions.each_key {|other|
      normalized = [other, name].map {|ver|
        ver.scan(/(\d+)|([a-zA-Z]+)/).map {|match|
          match.first ? match.first.to_i : match.last
        }.join '.'
      }

      if normalized.uniq.size < 2
        raise Error, "version #{name} is a duplicate of version #{other}"
      end
    }

    ver = @versions[name] = Version.create name, @node
  end

  if block_given?
    yield ver
  else
    ver
  end
end
versions() click to toggle source
# File lib/reapack/index/package.rb, line 73
def versions
  read_versions
  @versions.values
end

Private Instance Methods

read_versions() click to toggle source
# File lib/reapack/index/package.rb, line 105
def read_versions
  @versions || begin
    @versions = {}

    Version.find_all(@node).each {|ver|
      @versions[ver.name] = ver
    }
  end
end