使用rails的动态命名空间rakes和parser类?

时间:2011-05-31 05:30:06

标签: ruby-on-rails rake

我有一组解析器,它们在逻辑上有很大不同,但具有完全相同的方法和输出。

我设计了一些主人Rake,我很好奇我能想出什么可能导致一些意外或奇怪的行为。

基本上我的parse.rake看起来像是:

require 'app/models/provider'
require 'config/environment.rb'

Provider.all.each do |provider|  

    require "lib/tasks/#{provider.name}.rb"
    Kernel.const_get(provider.name).provider = provider

    namespace provider.name do      
      task :provider_task do #Parse method
        Kernel.const_get(provider.name).provider_task()
      end  
    end

end

由于类是ruby中的常量,因此我使用Kernel.const_get来访问varname中的类方法。我的课程看起来像(ABC.rb):

Class ABC
    cattr_accessor :provider

    def self.provider_task()
        #Parse and add stuff to environment
    end
end

通过此设置,我可以轻松调用rake ABC:provider_task来运行特定的解析器。此外,cattr_accessor允许我轻松引用实际的提供者模型。想法?

1 个答案:

答案 0 :(得分:1)

我已经使用了几个星期没有问题。在与一些同事一起回顾之后,我发现了一些以前使用类似方法而没有问题的人。只有潜在的危险是与ruby类命名冲突。