Skip to main content

custom_visibility_hooks

🛠️ Defining Methods with Custom Visibility and Hooks

Enhance define_method with custom visibility settings and automatic hooks to register or modify behavior immediately after definition.

module Hookable
def self.included(base)
base.extend ClassMethods
end

module ClassMethods
def define_with_hooks(name, visibility=:public, &block)
define_method(name, &block)
send(visibility, name)
after_define(name)
end

# Hook invoked after each definition
def after_define(name)
(@_defined_methods ||= []) << name
end

def defined_methods
@_defined_methods || []
end
end
end

class MyService
include Hookable

define_with_hooks(:perform, :private) do |data|
puts "Processing "+data.to_s
end
end

MyService.defined_methods # => [:perform]
MyService.private_instance_methods.include?(:perform) # => true