Module: Gracefully::Degradable::ClassMethods

Defined in:
lib/gracefully/degradable.rb

Instance Method Summary collapse

Instance Method Details

#gracefully_degrade(method, options) ⇒ Object



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/gracefully/degradable.rb', line 14

def gracefully_degrade(method, options)
  @__gracefully_degradable_methods__ ||= {}

  fallback_method, fallback_options = options[:fallback].first
  fallback_options ||= {}

  original_method = "#{method}_without_graceful_degradation"

  @__gracefully_degradable_methods__[method] =
    Gracefully.degradable_command(options) { |instance, *args, &block|
      instance.__send__(original_method, *args, &block)
    }.fallback_to(fallback_options) { |instance, *args, &block|
      instance.__send__(fallback_method, *args, &block)
    }

  alias_method original_method, method
  define_method method do |*args, &block|
    __call_gracefully_degradable_method__(method, *args, &block)
  end
end