Как стать автором
Обновить

Комментарии 11

Явный вызов return не нужен, плюс если используете новый синтаксис для хэшей, то используйте его везде:
    def complect_task
     {
          id:          task.gid,
          title:       task.title,
          ts:          task.ts,
          author:      task.author_id,
          holder:       complect_holder
      }
    end


Но в последнем примере в полной мере не избавились от повторений, можно было использовать duck typing и сделать еще компактней.
  module CommonOp 
    def common(item)
	  {
          id:          item.gid,
          title:       item.title,
          ts:          item.ts,
          author:      item.author_id
      }
	end
  end
  
  class Event < Operation
    include CommonOp
    def complect_goal
	  common(goal).merge holder: complect_goal_content_header            
    end
  end

  class Task < Operation
    include CommonOp
    def complect_task
	  common(task).merge holder: complect_holder      
    end	
 end


Метод common можно поднять в базовый класс, и использовать его изначально
Вы правы, сейчас поправлю под «старый» синтаксис. Насчет return, для себя я вынес следующее — если можно написать return, то лучше его написать, ошибок меньше будет.
Насчет return, для себя я вынес следующее — если можно написать return, то лучше его написать, ошибок меньше будет.


Н — наглядность.

image
Жестяк. И это еще и action в controller. Не надо так

def edit
  @med_program = MedProgram.blabla
  redirect_to MedProgramService.new(@med_program).next_step_url
end
Я дико извиняюсь, но...
image
Это создаёт информационный шум. Имеет смысл только не забывать возвращать nil в методах, которые должны возвращать nil.
Ruby-метод для создания объекта нужного класса
def self.Complect type
  const_get("Complect::#{type.capitalize}").new
rescue NameError
  fail "Неизвестный тип"
end

module Complect
  class Event; end
  class QC; end
  class Tast; end
end

complect = Complect :event
fixed:

# Ruby-метод для создания объекта нужного класса
def self.Operation type
  const_get("Operation::#{type.capitalize}").new
rescue NameError
  fail "Неизвестный тип"
end

class Operation
  class Event < self; end
  class Task < self; end
end
operation = Operation :event
Интересно, спасибо
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории