module ApiBlueprint::Collect::ControllerHook

Public Class Methods

included(base) click to toggle source
# File lib/api_blueprint/collect/controller_hook.rb, line 2
def self.included(base)
  return unless ENV['API_BLUEPRINT_DUMP'] == '1'

  base.around_filter :dump_blueprint_around
end

Public Instance Methods

dump_blueprint() click to toggle source
# File lib/api_blueprint/collect/controller_hook.rb, line 60
def dump_blueprint
  file       = ApiBlueprint::Collect::Storage.request_dump
  in_parser  = Parser.new(request)
  out_parser = Parser.new(response)

  data = {
    'request' => {
      'path'         => request.path,
      'method'       => in_parser.method,
      'params'       => in_parser.params,
      'headers'      => in_parser.headers,
      'content_type' => request.content_type,
      'accept'       => request.accept
    },
    'response' => {
      'status'       => response.status,
      'content_type' => response.content_type,
      'body'         => out_parser.body
    },
    'route' => {
      'controller'   => controller_name,
      'action'       => action_name
    }
  }

  spec = ApiBlueprint::Collect::Storage.spec_dump
  if File.exists?(spec)
    data['spec'] = YAML::load_file(spec)
  end

  File.write(file, data.to_yaml)
end
dump_blueprint_around() { || ... } click to toggle source
# File lib/api_blueprint/collect/controller_hook.rb, line 54
def dump_blueprint_around
  yield
ensure
  dump_blueprint
end