module Deferrable::ClassMethods

Public Instance Methods

_deferrable?(method_name) click to toggle source
# File lib/deferrable.rb, line 59
def _deferrable?(method_name)
  _deferred_methods.include?(method_name)
end
_deferred_methods() click to toggle source
# File lib/deferrable.rb, line 63
def _deferred_methods
  @@_deferred_methods ||= Set.new
end
_define_deferrable_method(method_name) click to toggle source
# File lib/deferrable.rb, line 46
def _define_deferrable_method(method_name)
  original_method = instance_method(method_name)

  define_method(method_name) do |*args, **opts, &block|
    _reset_deferred_stack(method_name)

    returned_value = original_method.bind_call(self, *args, **opts, &block)
  ensure
    _execute_deferred_stack(method_name)
    returned_value
  end
end
deferrable(*method_names) click to toggle source
# File lib/deferrable.rb, line 37
def deferrable(*method_names)
  method_names.map(&:to_sym).each do |method_name|
    next if _deferrable?(method_name)

    _define_deferrable_method(method_name)
    _deferred_methods << method_name
  end
end