class Apipie::Extractor::Recorder

Public Class Methods

new() click to toggle source
# File lib/apipie/extractor/recorder.rb, line 4
def initialize
  @ignored_params = [:controller, :action]
end

Public Instance Methods

analyse_controller(controller) click to toggle source
# File lib/apipie/extractor/recorder.rb, line 19
def analyse_controller(controller)
  @controller = controller.class
  @action = controller.params[:action]
end
analyse_env(env) click to toggle source
# File lib/apipie/extractor/recorder.rb, line 8
def analyse_env(env)
  @verb = env["REQUEST_METHOD"].to_sym
  @path = env["PATH_INFO"].sub(%r^\/*/,"/")
  @query = env["QUERY_STRING"] unless env["QUERY_STRING"].blank?
  @params = Rack::Utils.parse_nested_query(@query)
  @params.merge!(env["action_dispatch.request.request_parameters"] || {})
  if data = parse_data(env["rack.input"].read)
    @request_data = data
  end
end
analyse_response(response) click to toggle source
# File lib/apipie/extractor/recorder.rb, line 24
def analyse_response(response)
  if response.last.respond_to?(:body) && data = parse_data(response.last.body)
    @response_data = data
  end
  @code = response.first
end
analyze_functional_test(test_context) click to toggle source
# File lib/apipie/extractor/recorder.rb, line 31
def analyze_functional_test(test_context)
  request, response = test_context.request, test_context.response
  @verb = request.request_method.to_sym
  @path = request.path
  @params = request.request_parameters
  if [:POST, :PUT].include?(@verb)
    @request_data = @params
  else
    @query = request.query_string
  end
  @response_data = parse_data(response.body)
  @code = response.code
end
parse_data(data) click to toggle source
# File lib/apipie/extractor/recorder.rb, line 45
def parse_data(data)
  return nil if data.to_s =~ %r^\s*$/
  JSON.parse(data)
rescue Exception => e
  data
end
record() click to toggle source
# File lib/apipie/extractor/recorder.rb, line 64
def record
  if @controller
    {:controller => @controller,
     :action => @action,
     :verb => @verb,
     :path => @path,
     :params => @params,
     :query => @query,
     :request_data => @request_data,
     :response_data => @response_data,
     :code => @code}
  else
    nil
  end
end
reformat_data(data) click to toggle source
# File lib/apipie/extractor/recorder.rb, line 52
def reformat_data(data)
  parsed = parse_data(data)
  case parsed
  when nil
    nil
  when String
    parsed
  else
    JSON.pretty_generate().gsub(%r: \[\s*\]/,": []").gsub(%r\{\s*\}/,"{}")
  end
end

Protected Instance Methods

api_description() click to toggle source
# File lib/apipie/extractor/recorder.rb, line 82
def api_description
end