diff --git a/Library/Homebrew/dependable.rb b/Library/Homebrew/dependable.rb index 2a1d7d880c..50ff5c90f8 100644 --- a/Library/Homebrew/dependable.rb +++ b/Library/Homebrew/dependable.rb @@ -15,6 +15,10 @@ module Dependable tags.include? :recommended end + def required? + !build? && !optional? && !recommended? + end + def options Options.coerce(tags - RESERVED_TAGS) end diff --git a/Library/Homebrew/dependencies.rb b/Library/Homebrew/dependencies.rb index 76d285b560..9d5c3dede4 100644 --- a/Library/Homebrew/dependencies.rb +++ b/Library/Homebrew/dependencies.rb @@ -26,4 +26,24 @@ class Dependencies @deps end alias_method :to_ary, :to_a + + def optional + select(&:optional?) + end + + def recommended + select(&:recommended?) + end + + def build + select(&:build?) + end + + def required + select(&:required?) + end + + def default + build + required + recommended + end end diff --git a/Library/Homebrew/test/test_dependencies.rb b/Library/Homebrew/test/test_dependencies.rb index d0d078318f..ee7574c2bb 100644 --- a/Library/Homebrew/test/test_dependencies.rb +++ b/Library/Homebrew/test/test_dependencies.rb @@ -45,4 +45,18 @@ class DependenciesTests < Test::Unit::TestCase @deps << dep assert_equal [dep], @deps.to_ary end + + def test_type_helpers + foo = Dependency.new("foo") + bar = Dependency.new("bar", [:optional]) + baz = Dependency.new("baz", [:build]) + qux = Dependency.new("qux", [:recommended]) + quux = Dependency.new("quux") + @deps << foo << bar << baz << qux << quux + assert_equal [foo, quux], @deps.required + assert_equal [bar], @deps.optional + assert_equal [baz], @deps.build + assert_equal [qux], @deps.recommended + assert_equal [foo, baz, quux, qux].sort_by(&:name), @deps.default.sort_by(&:name) + end end