class Apicraft::Middlewares::Mocker

and make mock calls available.
Apicraft Middleware to handle routing

def call(env)

def call(env)
  return @app.call(env) unless config.mocks
  request = ActionDispatch::Request.new(env)
  return @app.call(env) unless mock?(request)
  use_delay!(request)
  contract = find_contract!(request)
  operation = find_operation!(contract, request)
  code = request.headers[config.headers[:response_code]] || "200"
  response = operation.response_for(code.to_s)
  raise Errors::InvalidResponse if response.blank?
  content, content_type = response.mock(request.content_type)
  [
    code.to_i,
    {
      'Content-Type': content_type
    },
    [
      content&.send(convertor(content_type))
    ].compact
  ]
end

def delay(request)

def delay(request)
  request.headers[config.headers[:delay]].to_i
end

def find_contract!(request)

def find_contract!(request)
  contract = Apicraft::Openapi::Contract.find_by_operation(
    request.method, request.path_info
  )
  raise Errors::InvalidContract if contract.blank?
  contract
end

def find_operation!(contract, request)

def find_operation!(contract, request)
  operation = contract.operation(
    request.method, request.path_info
  )
  raise Errors::InvalidOperation if operation.blank?
  operation
end

def initialize(app)

def initialize(app)
  @app = app
end

def mock?(request)

def mock?(request)
  request.headers[config.headers[:mock]].present?
end

def use_delay!(request)

def use_delay!(request)
  request_delay = delay(request)
  raise Errors::DelayTooHigh if request_delay > config.max_allowed_delay
  sleep(request_delay)
end