Sha256: 6ecbfde0d3cc811866a7531b40a8a5459829e855a99b2bdcaf4533dd046edc4c
Contents?: true
Size: 1.65 KB
Versions: 3
Compression:
Stored size: 1.65 KB
Contents
module Hyperstack module Internal module Callbacks if RUBY_ENGINE != 'opal' class Hyperstack::Hotloader def self.when_file_updates(&block); end end end def self.included(base) base.extend(ClassMethods) end def run_callback(name, *args) self.class.callbacks_for(name).flatten.each do |callback| result = if callback.is_a?(Proc) instance_exec(*args, &callback) else send(callback, *args) end args = yield(result) if block_given? end args end module ClassMethods def define_callback(callback_name, &after_define_hook) wrapper_name = "_#{callback_name}_callbacks" define_singleton_method(wrapper_name) do Context.set_var(self, "@#{wrapper_name}", force: true) { [] } end define_singleton_method(callback_name) do |*args, &block| args << block if block_given? send(wrapper_name).push args Hotloader.when_file_updates do send(wrapper_name).delete_if { |item| item.equal? args } end 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 def callbacks?(name) callbacks_for(name).any? end end end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
hyper-state-1.0.alpha1.5 | lib/hyperstack/internal/callbacks.rb |
hyper-state-1.0.alpha1.4 | lib/hyperstack/internal/callbacks.rb |
hyper-state-1.0.alpha1.3 | lib/hyperstack/internal/callbacks.rb |