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

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

我已经设计了一些大师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我使用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允许我轻松地引用实际的提供者模型。 思考?

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