Class: Toys::Middleware::Spec

Inherits:
Object
  • Object
show all
Defined in:
lib/toys/middleware.rb

Overview

A middleware specification, including the middleware class and the arguments to pass to the constructor.

Use spec to create a middleware spec.

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#argsArray? (readonly)

Returns:

  • (Array)

    the positional arguments to be passed to a middleware class constructor, or the empty array if there are no positional arguments

  • (nil)

    if this spec wraps a middleware object



224
225
226
# File 'lib/toys/middleware.rb', line 224

def args
  @args
end

#blockProc? (readonly)

Returns:

  • (Proc)

    if there is a block argument to be passed to a middleware class constructor

  • (nil)

    if there is no block argument, or this spec wraps a middleware object



239
240
241
# File 'lib/toys/middleware.rb', line 239

def block
  @block
end

#kwargsHash? (readonly)

Returns:

  • (Hash)

    the keyword arguments to be passed to a middleware class constructor, or the empty hash if there are no keyword arguments

  • (nil)

    if this spec wraps a middleware object



231
232
233
# File 'lib/toys/middleware.rb', line 231

def kwargs
  @kwargs
end

#nameString, ... (readonly)

Returns:

  • (String, Symbol)

    if this spec represents a middleware name

  • (Class)

    if this spec represents a middleware class

  • (nil)

    if this spec wraps a middleware object



216
217
218
# File 'lib/toys/middleware.rb', line 216

def name
  @name
end

#objectToys::Middleware? (readonly)

Returns:

  • (Toys::Middleware)

    if this spec wraps a middleware object

  • (nil)

    if this spec represents a class to instantiate



209
210
211
# File 'lib/toys/middleware.rb', line 209

def object
  @object
end

Instance Method Details

#build(lookup) ⇒ Toys::Middleware

Builds a middleware for this spec, given a ModuleLookup for middleware.

If this spec wraps an existing middleware object, returns that object. Otherwise, constructs a middleware object from the spec.

Parameters:

Returns:



194
195
196
197
198
199
200
201
202
203
# File 'lib/toys/middleware.rb', line 194

def build(lookup)
  return @object unless @object.nil?
  if @name.is_a?(::String) || @name.is_a?(::Symbol)
    klass = lookup&.lookup(@name)
    raise ::NameError, "Unknown middleware name #{@name.inspect}" if klass.nil?
  else
    klass = @name
  end
  Compat.instantiate(klass, @args, @kwargs, @block)
end