2016-07-05 2 views
0

У меня есть очень длинный случай заявление:Короткий путь написать длинное сазе

def gather_intel 
    case OPTIONS[:type] 
    when /osha/ 
     FORMAT.info('Creating OSHA Regional email..') 
     EMAILS.osha_reg 
    when /pend/ 
     FORMAT.info('Creating 6 day hold pending email..') 
     EMAILS.pend 
    when /60/ 
     FORMAT.info('Creating 60 day hold account deletion email..') 
     EMAILS.sixty_day 
    when /generic/ 
     FORMAT.info('Creating generic email..') 
     EMAILS.generic 
    when /resolve/ 
     FORMAT.info('Creating resolution ticket..') 
     EMAILS.resolve 
    when /esc/ 
     FORMAT.info('Creating escalation ticket..') 
     EMAILS.assign 
    when /pii/ 
     FORMAT.info('Creating request to remove personal info..') 
     EMAILS.remove_pii 
    when /vip/ 
     FORMAT.info('Creating VIP user email..') 
     EMAILS.vip_user 
    when /inop/ 
     FORMAT.info('Creating INOP user email..') 
     EMAILS.in_op_user 
    when /dev/ 
     if OPTIONS[:type].to_s.include?('dev=unlock') 
     message = 'unlock' 
     else 
     message = 'password reset' 
     end 
     FORMAT.info("Creating dev account #{message} email") 
     EMAILS.dev_account(OPTIONS[:type]) 
    else 
     raise ERROR 
    end 
end 

Это case statement работает, однако я не смогу показать вам остальную часть кода из-за чувствительности проекта и материала. Мой вопрос в том, есть ли более простой способ писать этот case statement или более короткий способ его написать?

+0

Вам не нужно, чтобы ваш пример был таким длинным. Вы могли бы свести его к нескольким статьям без изменения сути вопроса. –

+0

@CarySwoveland Я просто скопировал весь метод до SO, просто чтобы быть уверенным. Не хотел, чтобы кто-то предполагал, что я ничего не сделал. – JohnDoeYo

+0

Правильно ли я принимаю 'info' в' FORMAT.info ('Создание электронной почты пользователя INOP ..') 'является методом? –

ответ

3

Я не понимаю некоторых деталей вопроса, но вот общий подход, который вы можете предпринять. Я предположил, что :info и значения :email в хэш ниже - это имена методов. (Я понимаю, что допущение неверно.) Следующие могут иметь ошибки, учитывая, что у меня нет средств для его тестирования.

DATA = [[/osha/, 'Creating OSHA Regional email..',    :osha_reg], 
     [/pend/, 'Creating 6 day hold pending email..',   :pend], 
     [/60/,  'Creating 60 day hold account deletion email..', :sixty_day], 
     [/generic/, 'Creating generic email..',      :generic], 
     [/resolve/, 'Creating resolution ticket..',     :resolve], 
     [/esc/,  'Creating escalation ticket..',     :assign], 
     [/pii/,  'Creating request to remove personal info..', :remove_pii], 
     [/vip/,  'Creating VIP user email..',      :vip_user], 
     [/inop/, 'Creating INOP user email..',     :in_op_user]] 

def gather_intel 
    type = OPTIONS[:type] 
    regex, msg, email = DATA.find { |r,*_| type =~ r } 
    if regex 
    FORMAT.send :info, msg 
    EMAILS.send email 
    elsif type =~ /dev/ 
    message = type.to_s.include?('dev=unlock') ? 'unlock' : 'password reset' 
    FORMAT.info("Creating dev account #{message} email") 
    EMAILS.dev_account(type) 
    else 
    raise ERROR 
    end 
end 
Смежные вопросы