class Adornable::Decorators
`Adornable::Decorators` is used as the default namespace for decorator methods when a decorator method that is neither explicitly sourced (via the `decorate from: <receiver>` option) nor implicitly sourced (via the `add_decorators_from <receiver>` macro).
Public Class Methods
log(context) { || ... }
click to toggle source
# File lib/adornable/decorators.rb, line 11 def self.log(context) method_receiver = context.method_receiver method_name = context.method_name method_args = context.method_arguments full_name = Adornable::Utils.formal_method_name(method_receiver, method_name) arguments_desc = method_args.empty? ? "no arguments" : "arguments `#{method_args.inspect}`" puts "Calling method #{full_name} with #{arguments_desc}" yield end
memoize(context, for_any_arguments: false) { || ... }
click to toggle source
# File lib/adornable/decorators.rb, line 21 def self.memoize(context, for_any_arguments: false, &block) return memoize_for_arguments(context, &block) unless for_any_arguments method_receiver = context.method_receiver method_name = context.method_name memo_var_name = :"@adornable_memoized_#{method_receiver.object_id}_#{method_name}" if instance_variable_defined?(memo_var_name) instance_variable_get(memo_var_name) else instance_variable_set(memo_var_name, yield) end end
memoize_for_arguments(context) { || ... }
click to toggle source
# File lib/adornable/decorators.rb, line 35 def self.memoize_for_arguments(context) method_receiver = context.method_receiver method_name = context.method_name method_args = context.method_arguments memo_var_name = :"@adornable_memoized_for_arguments_#{method_receiver.object_id}_#{method_name}" memo = instance_variable_get(memo_var_name) || {} instance_variable_set(memo_var_name, memo) args_key = method_args.inspect memo[args_key] = yield unless memo.key?(args_key) memo[args_key] end