使用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类命名冲突。