У меня есть коллекция синтаксических анализаторов, которые существенно различаются по логике, но имеют те же методы и выходные данные.
Я придумал своего рода мастера 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
- это то, что я использовал для доступа к методам классов из имени переменной. Мои занятия выглядят так (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
позволяет мне легко обратиться к фактической модели провайдера. Мысли?