2014-12-22 5 views
0

Я делаю это в моем классеDRY, как избежать повторения методов в рельсах

Salesforce::Adapters::Person::MAPPINGS.invert.keys.each do |key| 
    delegate key.to_sym, 
     "#{key}=".to_sym, 
     to: :person, 
     prefix: true 
end 

Salesforce::Adapters::EmergencyContact::MAPPINGS.invert.keys.each do |key| 
    delegate key.to_sym, 
     "#{key}=".to_sym, 
     to: :emergency_contact, 
     prefix: true 
end 

Я хочу СУХОЙ, идея, как я могу это сделать? Я пытался повторять внутри классов модуля, но не имел успеха.

+4

Этот вопрос, как представляется, не по теме, потому что об улучшении рабочего кода, и принадлежит на [codereview.se]. –

ответ

1

Вы можете попробовать const_get:

def dry_class module, type 
    Object.const_get("Salesforce::Adapters::#{module}")::MAPPINGS.invert.keys.each do |key| 
    delegate key.to_sym, 
    "#{key}=".to_sym, 
    to: type, 
    prefix: true 
    end 
end 
Смежные вопросы