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