Top Level Namespace

Defined Under Namespace

Modules: Coach, Spring

Instance Method Summary collapse

Instance Method Details

#build_middleware(name) ⇒ Object

rubocop:disable Metrics/AbcSize



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/coach/rspec.rb', line 9

def build_middleware(name)
  Class.new(Coach::Middleware) do
    # To access `name`, we need to use `define_method` instead of `def`
    define_method(:to_s) { "<Middleware#{name}>" }
    define_method(:name) { name }
    define_singleton_method(:name) { name }

    def call
      config[:callback].call if config.include?(:callback)
      (**{ name.to_sym => true })

      # Emulate newer hash syntax for older Ruby versions
      hash_response = config.except(:callback).map { |k, v| "#{k}: #{v}" }.join(", ")
      response = [name + "{#{hash_response}}"]

      # Build up a list of middleware called, in the order they were called
      if next_middleware
        response.concat(next_middleware.call)
      else
        response
      end
    end
  end
end

#null_middlewareObject

rubocop:enable Metrics/AbcSize



35
36
37
# File 'lib/coach/rspec.rb', line 35

def null_middleware
  double(call: nil)
end