rake任务的抽象逻辑

时间:2016-11-29 23:15:50

标签: ruby-on-rails ruby

业余红宝石在这里......

我有一组rake任务看起来像:

namespace :download do
  task :only do
     config = ActiveRecord::Base.configurations[Rails.env]

     username = config['username'] 
     password = config['password'] ? "-p#{config['password']}" : nil
  end
  task :environment do
     config = ActiveRecord::Base.configurations[Rails.env]

     username = config['username'] 
     password = config['password'] ? "-p#{config['password']}" : nil
  end
end

如何抽象'配置'逻辑(包含用户名和密码) 或者全球定义?

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

完成任务后

def config
  ActiveRecord::Base.configurations[Rails.env]
end

但你也可以

def username
  config['username']
end

def password
  config['password'] ? "-p#{config['password']}" : nil
end

答案 1 :(得分:0)

我认为@ b-7答案是明确的最佳选择,但您可以使用类似以下的元编程:

namespace :download do
  task :only do
    # just use username or password
  end
  task :environment do
    # just use username or password
  end
end

ActiveRecord::Base.configurations[Rails.env].each do |key, value|
  define_method key do
    value
  end
end

BTW在我的测试中,我必须使用Rails.application.config.database_configuration[Rails.env]而不是ActiveRecord::Base.configurations[Rails.env]