Sha256: ffd1fe31e14c3479341c96e63cd15a91bea21e836faa050b82029e2078a509c1

Contents?: true

Size: 1.32 KB

Versions: 2

Compression:

Stored size: 1.32 KB

Contents

# frozen_string_literal: true

module Laminar
  # Callback hooks for particles
  module Callbacks
    def self.included(klass)
      klass.class_eval do
        extend ClassMethods
        include InstanceMethods
      end
    end

    # Class methods and attributes.
    module ClassMethods
      def before(*args, &block)
        before_list.concat(args)
        before_list << block if block
      end
      alias before_call before

      def after(*args, &block)
        after_list.concat(args)
        after_list << block if block
      end
      alias after_call after

      def finalize(*args, &block)
        final_list.concat(args)
        final_list << block if block
      end

      def before_list
        @before_list ||= []
      end

      def after_list
        @after_list ||= []
      end

      def final_list
        @final_list ||= []
      end
    end

    # Additional instance methods
    module InstanceMethods
      private

      def run_before_callbacks
        run_callbacks(self.class.before_list)
      end

      def run_after_callbacks
        run_callbacks(self.class.after_list)
      end

      def run_final_callbacks
        run_callbacks(self.class.final_list)
      end

      def run_callbacks(list)
        list.each { |cb| cb.is_a?(Symbol) ? send(cb) : instance_exec(&cb) }
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
laminar-0.7.0 lib/laminar/callbacks.rb
laminar-0.6.0 lib/laminar/callbacks.rb