Sha256: 6239b62dfd6deeb8f4b73f6fdf76fed7011a6e48dc4883589afda74979f79185

Contents?: true

Size: 1014 Bytes

Versions: 4

Compression:

Stored size: 1014 Bytes

Contents

module Cfer::Core
  # Provides support for hooking into resource types, and evaluating code before or after properties are set
  module Hooks
    def pre_block
      self.class.pre_hooks.sort { |a, b| (a[:nice] || 0) <=> (b[:nice] || 0) }.each do |hook|
        Docile.dsl_eval(self, &hook[:block])
      end
    end

    def post_block
      self.class.post_hooks.sort { |a, b| (a[:nice] || 0) <=> (b[:nice] || 0) }.each do |hook|
        Docile.dsl_eval(self, &hook[:block])
      end
    end

    def self.included(base)
      base.extend(ClassMethods)
    end

    module ClassMethods
      def before(options = {}, &block)
        self.pre_hooks << options.merge(block: block)
      end

      def after(options = {}, &block)
        self.post_hooks << options.merge(block: block)
      end

      def pre_hooks
        @pre_hooks ||= []
      end

      def post_hooks
        @post_hooks ||= []
      end

      def inherited(subclass)
        subclass.include Cfer::Core::Hooks
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
cfer-0.6.2 lib/cfer/core/hooks.rb
cfer-0.6.1 lib/cfer/core/hooks.rb
cfer-0.6.0 lib/cfer/core/hooks.rb
cfer-0.5.0 lib/cfer/core/hooks.rb