Sha256: 745d787325b4bedac93fed8d8ecfa18c9302ece75d7c65cd8d789320c64d0881

Contents?: true

Size: 1.13 KB

Versions: 26

Compression:

Stored size: 1.13 KB

Contents

require 'active_support/core_ext/class/attribute'

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)
        attribute_name = "_#{callback_name}_callbacks"
        class_attribute(attribute_name)
        self.send("#{attribute_name}=", [])
        define_singleton_method(callback_name) do |*args, &block|
          callbacks = self.send(attribute_name)
          callbacks.concat(args)
          callbacks.push(block) if block_given?
          self.send("#{attribute_name}=", callbacks)
        end
      end

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

Version data entries

26 entries across 26 versions & 3 rubygems

Version Path
hyper-react-0.12.4 lib/react/callbacks.rb
hyper-react-0.12.3 lib/react/callbacks.rb
hyper-react-0.12.2 lib/react/callbacks.rb
hyper-react-0.12.1 lib/react/callbacks.rb
hyper-react-0.12.0 lib/react/callbacks.rb
hyper-react-0.11.0 lib/react/callbacks.rb
hyper-react-0.10.0 lib/react/callbacks.rb
reactrb-0.9.0 lib/react/callbacks.rb
reactrb-0.8.8 lib/react/callbacks.rb
reactrb-0.8.7 lib/react/callbacks.rb
reactrb-0.8.6 lib/react/callbacks.rb
reactrb-0.8.5 lib/react/callbacks.rb
reactrb-0.8.4 lib/react/callbacks.rb
reactrb-0.8.3 lib/react/callbacks.rb
reactrb-0.8.1 lib/react/callbacks.rb
reactrb-0.8.0 lib/react/callbacks.rb
reactrb-0.7.42 lib/react/callbacks.rb
reactive-ruby-0.7.41 lib/react/callbacks.rb
reactive-ruby-0.7.40 lib/react/callbacks.rb
reactive-ruby-0.7.39 lib/react/callbacks.rb