Module: OpenapiFirst::Test::Observe

Defined in:
lib/openapi_first/test/observe.rb

Overview

Inject silent request/response validation to observe rack apps during testing

Class Method Summary collapse

Class Method Details

.observe(app, api: :default) ⇒ Object



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/openapi_first/test/observe.rb', line 12

def self.observe(app, api: :default)
  definition = OpenapiFirst::Test[api]
  mod = OpenapiFirst::Test::Callable[definition]

  if app.respond_to?(:call)
    return if app.singleton_class.include?(Observed)

    app.singleton_class.prepend(mod)
    app.singleton_class.include(Observed)
    return
  end

  unless app.instance_methods.include?(:call)
    raise ObserveError, "Don't know how to observe #{app}, because it has no call instance method."
  end

  return if app.include?(Observed)

  app.prepend(mod)
  app.include(Observed)
end