class Core::Extension::Behavior
- public
-
Defines behavior that can be applied to objects.
Behavior
will only be applied to each object once by default.
force - If true, behavior will be applied even if it has already been applied to the including object.
Public Class Methods
conditional_keyword_arguments(arguments, callable)
click to toggle source
# File lib/core/extension/behavior.rb, line 66 def conditional_keyword_arguments(arguments, callable) arguments.keep_if { |key, _value| callable.parameters.any? { |type, name| (type == :key || type == :keyreq || type == :keyrest) && name == key } } end
new(force: false, &block)
click to toggle source
# File lib/core/extension/behavior.rb, line 10 def initialize(force: false, &block) @force = force @module = build_module(&block) end
Public Instance Methods
apply_extend(object)
click to toggle source
- public
-
Applies this behavior to an object via extend.
# File lib/core/extension/behavior.rb, line 17 def apply_extend(object) if force? || unapplied?(object) object.extend(@module) end end
apply_include(object)
click to toggle source
- public
-
Applies this behavior to an object via include.
# File lib/core/extension/behavior.rb, line 25 def apply_include(object) if force? || unapplied?(object) object.include(@module) end end
Private Instance Methods
applied?(object)
click to toggle source
# File lib/core/extension/behavior.rb, line 39 def applied?(object) object.ancestors.include?(@module) end
build_module(&block)
click to toggle source
# File lib/core/extension/behavior.rb, line 43 def build_module(&block) Module.new { define_singleton_method(:extended) do |base| arguments = { extended: true, included: false } base.class_exec(**Behavior.conditional_keyword_arguments(arguments, block), &block) end define_singleton_method(:included) do |base| arguments = { extended: false, included: true } base.class_exec(**Behavior.conditional_keyword_arguments(arguments, block), &block) end } end
force?()
click to toggle source
# File lib/core/extension/behavior.rb, line 31 def force? @force == true end
unapplied?(object)
click to toggle source
# File lib/core/extension/behavior.rb, line 35 def unapplied?(object) !applied?(object) end