summaryrefslogtreecommitdiffstats
path: root/test/lib/spec/callback/extensions/module.rb
blob: 429268ed15d3567874c98f196ba6f8c0f11d43bf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
module Callback
  module ModuleMethods
    # For each event_name submitted, defines a callback event with this name.
    # Client code can then register as a callback listener using object.event_name.
    def callback_events(*event_names)
      event_names.each do |event_name|
        define_callback_event(event_name)
      end
    end

    private
    def define_callback_event(event_name)
      module_eval <<-EOS
        def #{event_name}(&block)
          register_callback(:#{event_name}, &block)
        end
      EOS
    end
  end
end

class Module
  include Callback::ModuleMethods
end