Sha256: a82e876aaf606fc3f5dc3b5bbdc99bd0c94e6bbfd62adf46e55a3d8efaf74200

Contents?: true

Size: 1.16 KB

Versions: 7

Compression:

Stored size: 1.16 KB

Contents

require 'hyperloop-config'

module React
  module Callbacks
    def self.included(base)
      base.extend(ClassMethods)
    end

    def run_callback(name, *args)
      self.class.callbacks_for(name).each do |callback|
        if callback.is_a?(Proc)
          instance_exec(*args, &callback)
        else
          send(callback, *args)
        end
      end
    end

    module ClassMethods
      def define_callback(callback_name, &after_define_hook)
        wrapper_name = "_#{callback_name}_callbacks"
        define_singleton_method(wrapper_name) do
          Hyperloop::Context.set_var(self, "@#{wrapper_name}", force: true) { [] }
        end
        define_singleton_method(callback_name) do |*args, &block|
          send(wrapper_name).concat(args)
          send(wrapper_name).push(block) if block_given?
          after_define_hook.call(*args, &block) if after_define_hook
        end
      end

      def callbacks_for(callback_name)
        wrapper_name = "_#{callback_name}_callbacks"
        if superclass.respond_to? :callbacks_for
          superclass.callbacks_for(callback_name)
        else
          []
        end + send(wrapper_name)
      end
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
hyper-component-0.99.6 lib/react/callbacks.rb
hyper-component-0.99.5 lib/react/callbacks.rb
hyper-component-0.99.4 lib/react/callbacks.rb
hyper-component-0.99.3 lib/react/callbacks.rb
hyper-component-0.99.2 lib/react/callbacks.rb
hyper-component-0.99.1 lib/react/callbacks.rb
hyper-component-0.99.0 lib/react/callbacks.rb