Skip to main content

dynamic_define_method_with_block

🛠️ Dynamic Method Definitions Using Blocks

Combine define_method with blocks to generate methods at runtime, each capturing its own closure and metadata. This technique keeps class definitions DRY and adaptable to configuration or plugin data.

class EventHandler
[:create, :update, :delete].each do |event|
define_method("on_#{event}") do |&callback|
@callbacks ||= {}
@callbacks[event] = callback
end
end

def trigger(event, *args)
@callbacks[event]&.call(*args)
end
end

handler = EventHandler.new
handler.on_create { |data| puts "Created: #{data}" }
handler.trigger(:create, 'Record1')