2013-02-20 88 views
1

我有一個帶有5個不同名稱空間的Rakefile,每個名稱空間都有相同的6個方法簽名。每個簽名的身體完全一樣。它們僅在方法使用的實例變量的值上有所不同。可以使用mixin來減少Rake文件中的冗餘?

一個具體的例子:

namespace :db do 
    namespace :foo do 
    @user = "foo" 
    task :create do 
     function_call_to_do_stuff @user 
    end 
    end 

    namespace :bar do 
    @user = "bar" 
    task :create do 
     function_call_to_do_stuff @user 
    end 
    end 
end 

理想情況下,我希望能夠做這樣的事情:

module Migratable 
    task :create do 
    function_call_to_do_stuff @user 
    end 
end 

namespace :db do 
    namespace :foo do 
    include Migratable 
    @user = "foo" 
    end 

    namespace :bar do 
    include Migratable 
    @user = "bar" 
    end 
end 

當我做如上所示,在混入的任務不要註冊爲適當命名空間的任務 - 或者作爲任務來處理這個問題。有沒有辦法做到這一點?

回答

1

Rake僅僅是Ruby,所以你可以使用包含include和擴展的模塊。

也就是說,有一種更簡單的方法來實現你想要的:使你的模塊只是普通的Ruby。

例子:

# migratable.rb 
module Migratable 
    def create x 
    puts x 
    end 
end 


# rakefile.rb 
require_relative 'migratable' 
include Migratable 

namespace :db do 

    task :foo do 
    @user = "foo" 
    create(@user) 
    end 

    task :bar do 
    @user = "bar" 
    create(@user) 
    end 

end 

在耙,你應該設置可能的任務中被覆蓋,而不是內部的命名空間的實例變量。這是因爲在任務運行之前,命名空間全部在之前被解析爲

+0

是的,你寫的最後一句話讓我燒了一陣子。這仍然打開一個到重複任務名稱的問題。但它解決了一些問題! – Mike 2013-02-21 06:36:18