lib/fig/package.rb in fig-0.1.51-java vs lib/fig/package.rb in fig-0.1.52
- old
+ new
@@ -1,76 +1,192 @@
require 'fig/logging'
require 'fig/packageerror'
-require 'fig/package/archive'
-require 'fig/package/configuration'
-require 'fig/package/resource'
-require 'fig/package/retrieve'
+require 'fig/statement/archive'
+require 'fig/statement/configuration'
+require 'fig/statement/resource'
+require 'fig/statement/retrieve'
module Fig; end
# The parsed representation of a configuration file. Contains the statement
# objects.
class Fig::Package
- attr_reader :package_name, :version_name, :directory, :statements
+ include Comparable
+
+ UNPUBLISHED = '<unpublished>'
+ DEFAULT_CONFIG = 'default'
+
+ attr_reader :package_name, :version_name, :directory, :statements
attr_accessor :backtrace
def initialize(package_name, version_name, directory, statements)
@package_name = package_name
@version_name = version_name
@directory = directory
@statements = statements
+ @applied_config_names = []
@backtrace = nil
end
def [](config_name)
@statements.each do |stmt|
- return stmt if stmt.is_a?(Configuration) && stmt.name == config_name
+ return stmt if stmt.is_a?(Fig::Statement::Configuration) && stmt.name == config_name
end
- message = "Configuration not found: #{@package_name}/#{@version_name}:#{config_name}"
- raise Fig::PackageError.new message
+
+ message =
+ 'Configuration not found: ' +
+ (@package_name || '<empty>') +
+ '/' +
+ (@version_name || '<empty>') +
+ ':' +
+ (config_name || '<empty>')
+
+ raise Fig::PackageError.new(message)
end
+ def <=>(other)
+ compared = compare_components(package_name, other.package_name)
+ return compared if compared != 0
+
+ return compare_components(version_name, other.version_name)
+ end
+
def configs
- @statements.select { |statement| statement.is_a?(Configuration) }
+ return @statements.select { |statement| statement.is_a?(Fig::Statement::Configuration) }
end
+ def config_names
+ return configs.collect { |statement| statement.name }
+ end
+
def retrieves
retrieves = {}
- statements.each { |statement| retrieves[statement.var] = statement.path if statement.is_a?(Retrieve) }
- retrieves
+
+ statements.each do
+ |statement|
+
+ retrieves[statement.var] = statement.path if statement.is_a?(Fig::Statement::Retrieve)
+ end
+
+ return retrieves
end
def archive_urls
- @statements.select{|s| s.is_a?(Archive)}.map{|s|s.url}
+ return @statements.select{|s| s.is_a?(Fig::Statement::Archive)}.map{|s| s.url}
end
def resource_urls
- @statements.select{|s| s.is_a?(Resource)}.map{|s|s.url}
+ return @statements.select{|s| s.is_a?(Fig::Statement::Resource)}.map{|s|s.url}
end
+ def applied_config_names()
+ return @applied_config_names.clone
+ end
+
+ def add_applied_config_name(name)
+ @applied_config_names << name
+ end
+
+ def primary_config_name()
+ return @applied_config_names.first
+ end
+
+ # Returns an array of PackageDescriptors
+ def package_dependencies(config_name)
+ descriptors = []
+
+ self[config_name || DEFAULT_CONFIG].walk_statements do
+ |statement|
+
+ if statement.is_a?(Fig::Statement::Include)
+ descriptors << statement.resolved_dependency_descriptor(self)
+ end
+ end
+
+ return descriptors
+ end
+
+ # Block will receive a Statement.
def walk_statements(&block)
@statements.each do |statement|
yield statement
statement.walk_statements &block
end
+
+ return
end
+ # Block will receive a Package and a Statement.
+ def walk_statements_following_package_dependencies(repository, &block)
+ @statements.each do |statement|
+ yield self, statement
+ statement.walk_statements_following_package_dependencies(
+ repository, self, &block
+ )
+ end
+
+ return
+ end
+
def unparse
- @statements.map { |statement| statement.unparse('') }.join("\n")
+ return @statements.map { |statement| statement.unparse('') }.join("\n")
end
def ==(other)
return false if other.nil?
- @package_name == other.package_name && @version_name == other.version_name && @statements.to_yaml == other.statements.to_yaml
+
+ return @package_name == other.package_name &&
+ @version_name == other.version_name &&
+ @statements.to_yaml == other.statements.to_yaml
end
def to_s
- package_name ||= 'uninitialized'
- version_name ||= 'uninitialized'
- package_name + '/' + version_name
+ package_name = @package_name || '<empty>'
+ version_name = @version_name || '<empty>'
+ return package_name + '/' + version_name
end
+
+ def to_s_with_config(config_name)
+ string = nil
+
+ if package_name.nil?
+ string = UNPUBLISHED
+ else
+ string = to_s
+ end
+
+ if not config_name.nil? and config_name != DEFAULT_CONFIG
+ string += ":#{config_name}"
+ end
+
+ return string
+ end
+
+ def to_s_with_primary_config()
+ return to_s_with_config(primary_config_name)
+ end
+
+ private
+
+ def compare_components(mine, others)
+ if mine.nil?
+ if others.nil?
+ return 0
+ end
+
+ return 1
+ end
+
+ if others.nil?
+ return -1
+ end
+
+ return mine <=> others
+ end
end
+# TODO: get this out of the global namespace
def unparse_statements(indent, prefix, statements, suffix)
body = @statements.map { |statement| statement.unparse(indent+' ') }.join("\n")
+
return ["\n#{indent}#{prefix}", body, "#{indent}#{suffix}"].join("\n")
end