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

View File

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

View File

@ -71,7 +71,10 @@ class DependencyExpansionTests < Test::Unit::TestCase
end
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
end