module Adornable
Extend the `Adornable` module in your class in order to have access to the `decorate` and `add_decorators_from` macros.
Constants
- VERSION
Public Instance Methods
add_decorators_from(receiver)
click to toggle source
# File lib/adornable.rb, line 29 def add_decorators_from(receiver) adornable_machinery.register_decorator_receiver!(receiver) end
adornable_machinery()
click to toggle source
# File lib/adornable.rb, line 12 def adornable_machinery @adornable_machinery ||= Adornable::Machinery.new end
decorate(decorator_name, from: nil, defer_validation: false, **decorator_options)
click to toggle source
# File lib/adornable.rb, line 16 def decorate(decorator_name, from: nil, defer_validation: false, **decorator_options) if Adornable::Utils.blank?(name) raise Adornable::Error::InvalidDecoratorArguments, "Decorator name must be provided." end adornable_machinery.accumulate_decorator!( name: decorator_name, receiver: from, defer_validation: !!defer_validation, decorator_options: decorator_options, ) end
method_added(method_name)
click to toggle source
Calls superclass method
# File lib/adornable.rb, line 33 def method_added(method_name) machinery = adornable_machinery # for local variable return unless machinery.accumulated_decorators? machinery.apply_accumulated_decorators_to_instance_method!(method_name) original_method = instance_method(method_name) define_method(method_name) do |*args| bound_method = original_method.bind(self) machinery.run_decorated_instance_method(bound_method, *args) end super end
singleton_method_added(method_name)
click to toggle source
Calls superclass method
# File lib/adornable.rb, line 46 def singleton_method_added(method_name) machinery = adornable_machinery # for local variable return unless machinery.accumulated_decorators? machinery.apply_accumulated_decorators_to_class_method!(method_name) original_method = method(method_name) define_singleton_method(method_name) do |*args| machinery.run_decorated_class_method(original_method, *args) end super end