Eliminate mutation of Dependency objects

This commit is contained in:
Jack Nagel 2014-02-27 14:22:43 -06:00
parent 793d6de6c3
commit 1981e78eb2
3 changed files with 13 additions and 16 deletions

View File

@ -4,12 +4,15 @@ require 'dependable'
class Dependency class Dependency
include Dependable include Dependable
attr_reader :name, :tags attr_reader :name, :tags, :env_proc, :option_name
attr_accessor :env_proc, :option_name
def initialize(name, tags=[]) DEFAULT_ENV_PROC = proc {}
@name = @option_name = name
def initialize(name, tags=[], env_proc=DEFAULT_ENV_PROC, option_name=name)
@name = name
@tags = tags @tags = tags
@env_proc = env_proc
@option_name = option_name
end end
def to_s def to_s
@ -47,10 +50,6 @@ class Dependency
missing missing
end end
def universal!
tags << 'universal' if to_formula.build.has_option? 'universal'
end
def modify_build_environment def modify_build_environment
env_proc.call unless env_proc.nil? env_proc.call unless env_proc.nil?
end end
@ -127,9 +126,7 @@ class Dependency
deps.uniq.map do |dep| deps.uniq.map do |dep|
tags = grouped.fetch(dep.name).map(&:tags).flatten.uniq tags = grouped.fetch(dep.name).map(&:tags).flatten.uniq
merged_dep = dep.class.new(dep.name, tags) dep.class.new(dep.name, tags, dep.env_proc)
merged_dep.env_proc = dep.env_proc
merged_dep
end end
end end
end end

View File

@ -70,10 +70,7 @@ class Requirement
def to_dependency def to_dependency
f = self.class.default_formula f = self.class.default_formula
raise "No default formula defined for #{inspect}" if f.nil? raise "No default formula defined for #{inspect}" if f.nil?
dep = Dependency.new(f, tags) Dependency.new(f, tags, method(:modify_build_environment), name)
dep.option_name = name
dep.env_proc = method(:modify_build_environment)
dep
end end
private private

View File

@ -71,7 +71,10 @@ class DependencyExpansionTests < Test::Unit::TestCase
end end
def test_merger_preserves_env_proc def test_merger_preserves_env_proc
env_proc = @foo.env_proc = stub env_proc = stub
dep = Dependency.new("foo", [], env_proc)
dep.stubs(:to_formula).returns(stub(:deps => []))
@deps.replace [dep]
assert_equal env_proc, Dependency.expand(@f).first.env_proc assert_equal env_proc, Dependency.expand(@f).first.env_proc
end end