Sha256: 8fb8c394aca8f0517c3b2b3476bfca0fbdce61e6ac84c43c35cb7721ba319c0d

Contents?: true

Size: 913 Bytes

Versions: 1

Compression:

Stored size: 913 Bytes

Contents

module QED

  class Advice

    # This class encapsulates advice on symbolic targets,
    # such as Before, After and Upon.
    #
    class Events

      #
      attr :signals

      #
      def initialize
        @signals = [{}]
      end

      #
      def add(type, &procedure)
        @signals.last[type.to_sym] = procedure
      end

      #
      def call(scope, type, *args)
        
        @signals.each do |set|
          proc = set[type.to_sym]
          #proc.call(*args) if proc
          scope.instance_exec(*args, &proc) if proc
        end
      end

      # Clear last set of advice.
      def reset
        @signals.pop
      end

      #
      def setup
        @signals.push {}
      end

      # Clear advice.
      def clear(type=nil)
        if type
          @signals.each{ |set| set.delete(type.to_sym) }
        else
          @signals = [{}]
        end
      end

    end

  end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
qed-2.2.0 lib/qed/advice/events.rb