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