вызов метода before в модели на ruby

Это моя реализация для разработки способа запуска кода перед всеми методами в вашей модели.

Вызов метода before_hook: months_used должен быть в нижней части класса, чтобы ExecutionHooks мог загрузить instance_method в модуль. Я хотел бы загрузить методы экземпляра сверху

class BalanceChart < BalanceFind
 include ExecutionHooks

 attr_reader :options

 def initialize(options = {})
  @options = options
  @begin_at = @options[:begin_at]
 end

 def months_used
  range.map{|date| I18n.l date, format: :month_year}.uniq!
 end

 before_hook :months_used
end

module ExecutionHooks

def self.included(base)
 base.send :extend, ClassMethods
end

module ClassMethods
  def before
   @hooks.each do |name|
    m = instance_method(name)
    define_method(name) do |*args, &block|  

      return if @begin_at.blank? ## the code you can execute before methods

      m.bind(self).(*args, &block) ## your old code in the method of the class
    end
   end
  end

  def before_hook(*method_name)
   @hooks = method_name
   before
  end

  def hooks
   @hooks ||= []
  end
 end
end

Ответы на вопрос(0)

Ваш ответ на вопрос