2016-12-25 4 views
0

Я пытаюсь сделать правило рейка, которое зависит от другой задачи. Это работает, если я использую только задачи, как показано ниже:Правило рейка с зависимостью задачи

task :foo do 
    @iv = 42 
end 

task :bar => :foo do 
    p @iv 
end 

Rake::Task[:bar].invoke 

результат:

42 

я хотел бы иметь возможность использовать правила, так что я могу использовать регулярные выражения. Но я получаю сообщение об ошибке:

task :foo do 
    @iv = 42 
end 

rule /bar/ => :foo do 
    p @iv 
end 

Rake::Task["bar"].invoke 

результат:

/Users/max/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/rake-12.0.0/lib/rake/task_manager.rb:284:in `block in make_sources': Don't know how to handle rule dependent: :foo (RuntimeError) 
    from /Users/max/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/rake-12.0.0/lib/rake/task_manager.rb:267:in `map' 
    from /Users/max/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/rake-12.0.0/lib/rake/task_manager.rb:267:in `make_sources' 
    from /Users/max/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/rake-12.0.0/lib/rake/task_manager.rb:245:in `attempt_rule' 
    from /Users/max/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/rake-12.0.0/lib/rake/task_manager.rb:130:in `block in enhance_with_matching_rule' 
    from /Users/max/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/rake-12.0.0/lib/rake/task_manager.rb:128:in `each' 
    from /Users/max/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/rake-12.0.0/lib/rake/task_manager.rb:128:in `enhance_with_matching_rule' 
    from /Users/max/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/rake-12.0.0/lib/rake/task_manager.rb:56:in `[]' 
    from /Users/max/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/rake-12.0.0/lib/rake/task.rb:361:in `[]' 
    from baz.rb:63:in `<main>' 

Как использовать правило, которое зависит от другой задачи?

Edit:

Как упомянуто ниже правило принимает это зависимость в виде строки:

task :foo do 
    @iv = 42 
end 

rule /bar/ => "foo" do 
    p @iv 
end 

Rake::Task["bar"].invoke 
#=> 42 

ответ