Class: Hx::Interop::Middleware

Inherits:
Object
  • Object
show all
Includes:
ReaderWriter
Defined in:
lib/interop/middleware.rb

Overview

Base class for interop middleware.

Defined Under Namespace

Modules: BuildMessageOnWrite

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Reader

new, #read, #read_all

Methods included from Writer

#<<, new, #write

Constructor Details

#initialize(connection) ⇒ Middleware

Returns a new instance of Middleware.



35
36
37
# File 'lib/interop/middleware.rb', line 35

def initialize(connection)
  @connection = connection
end

Instance Attribute Details

#connectionObject (readonly)

Returns the value of attribute connection.



33
34
35
# File 'lib/interop/middleware.rb', line 33

def connection
  @connection
end

Class Method Details

.inherited(subclass) ⇒ Object



16
17
18
19
# File 'lib/interop/middleware.rb', line 16

def self.inherited(subclass)
  subclass.prepend BuildMessageOnWrite
  super
end

.stack(*classes, connection) ⇒ Object

Parameters:

Raises:

  • (ArgumentError)


23
24
25
26
27
28
29
30
31
# File 'lib/interop/middleware.rb', line 23

def self.stack(*classes, connection)
  raise ArgumentError, "Expected an instance of #{ReaderWriter}" unless connection.is_a? ReaderWriter

  classes.reverse.reduce connection do |wrapped, klass|
    raise ArgumentError, "Expected subclasses of #{self}" unless klass.is_a?(Class) && klass < self

    klass.new(wrapped)
  end
end

Instance Method Details

#stackObject

Return the complete Middleware stack as an array, with this instance as the first item, and the core (or shallowest non-Middleware layer) as the last.



41
42
43
44
45
46
47
48
49
# File 'lib/interop/middleware.rb', line 41

def stack
  result = [self]
  if @connection.is_a? Middleware
    result.concat @connection.stack
  else
    result << @connection
  end
  result
end