Sha256: 661d610cd81a15b32b7aad24c4ce332a105b18c82f2b7d1b0db0f7fbd9e13f9a

Contents?: true

Size: 976 Bytes

Versions: 2

Compression:

Stored size: 976 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
        defined?(@result_class) ? @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

2 entries across 2 versions & 1 rubygems

Version Path
neo-dci-0.5.1 lib/neo/dci/context.rb
neo-dci-0.5.0 lib/neo/dci/context.rb