module Flic::Callbacks
Constants
- SEMAPHORE
Private Instance Methods
define_callbacks(*callback_names)
click to toggle source
# File lib/flic/callbacks.rb, line 11 def define_callbacks(*callback_names) callback_names.each do |callback_name| semaphore_instance_variable = :"@#{callback_name}_callbacks_semaphore" callbacks_instance_variable = :"@#{callback_name}_callbacks" define_method :"#{callback_name}" do |*args, &callback| semaphore = SEMAPHORE.synchronize do instance_variable_get(semaphore_instance_variable) || instance_variable_set(semaphore_instance_variable, Mutex.new) end semaphore.synchronize do callbacks = instance_variable_get(callbacks_instance_variable) || instance_variable_set(callbacks_instance_variable, []) if callback callbacks << callback else callbacks.each { |callback| callback.call *args } end end end end end