class CrapiDocs::Session
Attributes
actions[R]
Public Class Methods
new(pattern)
click to toggle source
# File lib/crapidocs/session.rb, line 5 def initialize(pattern) @pattern = pattern @actions = {} end
Public Instance Methods
body(path, method)
click to toggle source
# File lib/crapidocs/session.rb, line 52 def body(path, method) res = @actions[path][method] .map { |a| a[:response] } .find { |r| r[:status] / 100 == 2 } return nil unless res parse_body(res[:body]) end
merge(sessions)
click to toggle source
# File lib/crapidocs/session.rb, line 60 def merge(sessions) sessions = [sessions] unless sessions.is_a?(Array) @actions = sessions.reduce(@actions) do |a, session| a.deep_merge(session.actions) end end
methods(path)
click to toggle source
# File lib/crapidocs/session.rb, line 41 def methods(path) @actions[path].keys.sort end
params(path, method)
click to toggle source
# File lib/crapidocs/session.rb, line 45 def params(path, method) reqs = @actions[path][method].map { |a| a[:request] } params = merge_params(reqs) return nil unless params.keys.any? params end
paths()
click to toggle source
# File lib/crapidocs/session.rb, line 37 def paths @actions.keys.sort end
track(args, result)
click to toggle source
# File lib/crapidocs/session.rb, line 10 def track(args, result) uri, env = args status, headers, body = result body = body.respond_to?(:body) ? body.body : '' method = env['REQUEST_METHOD'] return unless relevant?(uri) action = { request: { method: method, body: env['rack.input'].string, headers: clean_headers(env) }, response: { status: status, headers: headers, body: body } } path = clean_path(uri.path) @actions[path] ||= {} @actions[path][method] ||= [] @actions[path][method] << action end
Private Instance Methods
clean_headers(headers)
click to toggle source
# File lib/crapidocs/session.rb, line 83 def clean_headers(headers) headers.delete_if { |_k, v| !v.is_a?(String) } end
clean_path(path)
click to toggle source
# File lib/crapidocs/session.rb, line 87 def clean_path(path) last = nil path.split('/').reject(&:blank?).reduce('') do |cleaned, part| part = ":#{last.singularize}_id" if part =~ /^\d+$/ part = ':token' if tokenish?(part) last = part "#{cleaned}/#{part}" end end
merge_params(reqs)
click to toggle source
# File lib/crapidocs/session.rb, line 75 def merge_params(reqs) params = reqs.reduce({}) do |hash, r| hash.merge(parse_body(r[:body])) end params.delete('format') params end
parse_body(body)
click to toggle source
# File lib/crapidocs/session.rb, line 69 def parse_body(body) JSON.parse(body) rescue Rack::Utils.parse_nested_query(body) end
relevant?(uri)
click to toggle source
# File lib/crapidocs/session.rb, line 101 def relevant?(uri) (uri.to_s =~ @pattern).present? end
tokenish?(s)
click to toggle source
# File lib/crapidocs/session.rb, line 97 def tokenish?(s) (s =~ /\d+/ && s =~ /[a-zA-Z]+/ && s.length >= 10) == true end