module Apipie::Extractor

Public Class Methods

apis_from_routes() click to toggle source
# File lib/apipie/extractor.rb, line 56
def apis_from_routes
  return @apis_from_routes if @apis_from_routes

  api_prefix = Apipie.configuration.api_base_url.sub(%r\/$/,"")
  all_routes = Rails.application.routes.routes.map do |r|
    {
      :verb => case r.verb
               when Regexp then r.verb.source[%r\w+/]
               else r.verb.to_s
               end,
      :path => case
               when r.path.respond_to?(:spec) then r.path.spec.to_s
               else r.path.to_s
               end,
      :controller => r.requirements[:controller],
      :action => r.requirements[:action]
    }


  end
  api_routes = all_routes.find_all do |r|
    r[:path].starts_with?(Apipie.configuration.api_base_url)
  end

  @apis_from_routes = Hash.new { |h, k| h[k] = [] }

  api_routes.each do |route|
    controller_path, action = route[:controller], route[:action]
    next unless controller_path && action

    controller = "#{controller_path}_controller".camelize

    path = if %r^#{Regexp.escape(api_prefix)}(.*)$/ =~ route[:path]
             $1.sub!(%r\(\.:format\)$/,"")
           else
             nil
           end

    if route[:verb].present?
      @apis_from_routes[[controller, action]] << {:method => route[:verb], :path => path}
    end
  end
  @apis_from_routes

  apis_from_docs = Apipie.method_descriptions.reduce({}) do |h, (method, desc)|
    apis = desc.apis.map do |api|
      {:method => api.http_method, :path => api.api_url, :desc => api.short_description}
    end
    h.update(method => apis)
  end

  @apis_from_routes.each do |(controller, action), new_apis|
    method_key = "#{controller.constantize.controller_name}##{action}"
    old_apis = apis_from_docs[method_key] || []
    new_apis.each do |new_api|
      new_api[:path].sub!(%r\(\.:format\)$/,"")
      if old_api = old_apis.find { |api| api[:path] == "#{api_prefix}#{new_api[:path]}" }
        new_api[:desc] = old_api[:desc]
      end
    end
  end
  @apis_from_routes
end
call_finished() click to toggle source
# File lib/apipie/extractor.rb, line 39
def call_finished
  @collector ||= Collector.new
  if record = call_recorder.record
    @collector.handle_record(record)
  end
ensure
  Thread.current[:apipie_call_recorder] = nil
end
call_recorder() click to toggle source
# File lib/apipie/extractor.rb, line 35
def call_recorder
  Thread.current[:apipie_call_recorder] ||= Recorder.new
end
logger() click to toggle source
# File lib/apipie/extractor.rb, line 31
def logger
  Rails.logger
end
write_docs() click to toggle source
# File lib/apipie/extractor.rb, line 48
def write_docs
  Writer.new(@collector).write_docs if @collector
end
write_examples() click to toggle source
# File lib/apipie/extractor.rb, line 52
def write_examples
  Writer.new(@collector).write_examples if @collector
end