class ApiSim::BuiltApp

Constants

API_REQUEST_MATCHER

Public Class Methods

endpoints(endpoints = nil) click to toggle source
# File lib/api_sim/built_app.rb, line 15
def self.endpoints(endpoints = nil)
  @endpoints = endpoints if endpoints
  return @endpoints
end
ui_root(root = nil) click to toggle source
# File lib/api_sim/built_app.rb, line 20
def self.ui_root(root = nil)
  if root
    @ui_root = root
    self.register UiApp.with_root(root)
  end
  @ui_root
end

Private Instance Methods

active_endpoints() click to toggle source
# File lib/api_sim/built_app.rb, line 60
def active_endpoints
  self.class.endpoints.reject(&:overridden?)
end
blank?(item) click to toggle source
# File lib/api_sim/built_app.rb, line 141
def blank?(item)
  item.nil? || item.empty?
end
create_matcher_override(request) click to toggle source
# File lib/api_sim/built_app.rb, line 64
def create_matcher_override(request)
  old_matcher = matcher(request)
  config = matcher_overrides(old_matcher.response(request))
  old_matcher.overridden!
  Matcher.dupe_and_reconfigure(old_matcher, config)
end
faux_body() click to toggle source
# File lib/api_sim/built_app.rb, line 103
def faux_body
  StringIO.new(params[:match].to_s)
end
faux_request(method: '', path: '', body: StringIO.new(''), query: '') click to toggle source
# File lib/api_sim/built_app.rb, line 98
def faux_request(method: '', path: '', body: StringIO.new(''), query: '')
  body.rewind
  Rack::Request.new({'rack.input' => body, 'REQUEST_METHOD' => method, 'PATH_INFO' => path, 'QUERY_STRING' => query})
end
http_method() click to toggle source
# File lib/api_sim/built_app.rb, line 86
def http_method
  parsed_body.fetch('method', params['method']).upcase
end
matcher(request) click to toggle source
# File lib/api_sim/built_app.rb, line 90
def matcher(request)
  matchers(request).first || halt(404)
end
matcher_overrides(old_config) click to toggle source
# File lib/api_sim/built_app.rb, line 71
def matcher_overrides(old_config)
  parsed_body.merge(
    response_code: parsed_body.fetch('status', old_config[0]).to_i,
    headers: parsed_body.fetch('headers', old_config[1]),
    response_body: parsed_body.fetch('body', old_config[2]),
    matcher: parsed_body.fetch('match', ''),
    schema: parsed_body.fetch('schema', ''),
    request_schema: parsed_body.fetch('request-schema', nil)
  )
end
matchers(request) click to toggle source
# File lib/api_sim/built_app.rb, line 94
def matchers(request)
  self.class.endpoints.select { |matcher| matcher.matches?(request) }
end
mimicked_request() click to toggle source
# File lib/api_sim/built_app.rb, line 82
def mimicked_request
  faux_request(method: http_method, path: route, body: request.body, query: request.query_string)
end
parsed_body() click to toggle source
# File lib/api_sim/built_app.rb, line 107
def parsed_body
  return @response_body if @response_body

  @response_body = case request.env['CONTENT_TYPE']
  when %r{application/json} then
    body = request.body.read
    body.empty? ? {} : JSON.parse(body)
  when %r{text/xml} then
    Nokogiri::XML(request.body.read)
  when %r{application/x-www-form-urlencoded} then
    params
  else
    if request.path =~ /ui/
      params
    else
      request.body.read
    end
  end

  @response_body.empty? ? {} : @response_body
end
route() click to toggle source
# File lib/api_sim/built_app.rb, line 137
def route
  "/#{params[:splat].first}"
end
schema_validates?(endpoint) click to toggle source
# File lib/api_sim/built_app.rb, line 129
def schema_validates?(endpoint)
  if blank?(endpoint.request_schema) || request.env['CONTENT_TYPE'] != 'application/json'
    true
  else
    JSON::Validator.validate_json(JSON.parse(endpoint.request_schema), parsed_body.to_json)
  end
end