Sha256: 0b7a5f516adf9c852a87de7c1328bc5efd7a8ad433be18d6dd8e4291436f5bed

Contents?: true

Size: 951 Bytes

Versions: 1

Compression:

Stored size: 951 Bytes

Contents

module Neo
  module DCI
    class Context
      class << self
        private :new
      end

      attr_accessor :callback

      def self.callbacks(*args)
        @callbacks ||= []
        @callbacks = args unless args.empty?
        @callbacks
      end

      def self.call(*args, &block)
        context = new(*args)
        context.callback = result_class.new(*callbacks, &block)
        context.call
        raise NoCallbackCalled, callbacks unless context.callback.called?
      rescue NotImplementedError
        raise
      end

      def self.result_class(klass = :reader)
        @result_class = klass unless klass == :reader
        @result_class || ContextResult
      end

      def call
        raise NotImplementedError
      end

      class NoCallbackCalled < StandardError
        def initialize(callbacks)
          super("No callback called. Available callbacks: #{callbacks.join(', ')}")
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
neo-dci-0.4.1 lib/neo/dci/context.rb