Remove <=> from Dependency interface

It is important that dep equality corresponds to the name attribute, but
we may want to use the Comparable interface to sort them by installation
order in the future. Code that needs to sort them alphabetically should
just use sort_by.
This commit is contained in:
Jack Nagel 2013-01-13 19:51:19 -06:00
parent 2d445d54b5
commit e629f14d56
3 changed files with 49 additions and 20 deletions

View File

@ -22,7 +22,9 @@ module Homebrew extend self
end
else
raise FormulaUnspecifiedError if ARGV.named.empty?
all_deps = ARGV.formulae.map{ |f| ARGV.one? ? f.deps : f.recursive_deps }.intersection
all_deps = ARGV.formulae.map do |f|
ARGV.one? ? f.deps : f.recursive_deps
end.intersection.map(&:name)
all_deps.sort! unless ARGV.include? "-n"
puts all_deps
end

View File

@ -145,27 +145,23 @@ class Dependency
def initialize(name, *tags)
@name = name
@tags = [tags].flatten.compact
end
def hash
@name.hash
@tags = tags.flatten.compact
end
def to_s
@name
name
end
def ==(other)
@name == other.to_s
end
def <=>(other)
@name <=> other.to_s
name == other.name
end
def eql?(other)
other.is_a? self.class and hash == other.hash
other.is_a?(self.class) && hash == other.hash
end
def hash
name.hash
end
end
@ -199,7 +195,7 @@ class Requirement
end
def eql?(other)
other.is_a? self.class and hash == other.hash
other.is_a?(self.class) && hash == other.hash
end
def hash

View File

@ -75,17 +75,48 @@ end
class DependableTests < Test::Unit::TestCase
def setup
@tags = ["foo", "bar", :build]
@deps = Struct.new(:tags).new(@tags)
@deps.extend(Dependable)
@dep = Struct.new(:tags).new(@tags).extend(Dependable)
end
def test_options
assert_equal %w{--foo --bar}.sort, @deps.options.sort
assert_equal %w{--foo --bar}.sort, @dep.options.sort
end
def test_interrogation
assert @deps.build?
assert !@deps.optional?
assert !@deps.recommended?
assert @dep.build?
assert !@dep.optional?
assert !@dep.recommended?
end
end
class DependencyTests < Test::Unit::TestCase
def test_accepts_single_tag
dep = Dependency.new("foo", "bar")
assert_equal %w{bar}, dep.tags
end
def test_accepts_multiple_tags
dep = Dependency.new("foo", %w{bar baz})
assert_equal %w{bar baz}.sort, dep.tags.sort
end
def test_preserves_symbol_tags
dep = Dependency.new("foo", :build)
assert_equal [:build], dep.tags
end
def test_accepts_symbol_and_string_tags
dep = Dependency.new("foo", [:build, "bar"])
assert_equal [:build, "bar"], dep.tags
end
def test_equality
foo1 = Dependency.new("foo")
foo2 = Dependency.new("foo")
bar = Dependency.new("bar")
assert_equal foo1, foo2
assert foo1.eql?(foo2)
assert_not_equal foo1, bar
assert !foo1.eql?(bar)
end
end