class Apipie::Extractor::Collector
Attributes
descriptions[R]
records[R]
Public Class Methods
new()
click to toggle source
# File lib/apipie/extractor/collector.rb, line 6 def initialize @api_controllers_paths = Apipie.api_controllers_paths @ignored = Apipie.configuration.ignored_by_recorder @descriptions = Hash.new do |h, k| h[k] = {:params => {}, :errors => Set.new} end @records = Hash.new { |h,k| h[k] = [] } end
Public Instance Methods
add_routes_info(desc)
click to toggle source
# File lib/apipie/extractor/collector.rb, line 94 def add_routes_info(desc) api_prefix = Apipie.api_base_url.sub(/\/$/,"") desc[:api] = Apipie::Extractor.apis_from_routes[[desc[:controller].name, desc[:action]]] if desc[:api] desc[:params].each do |name, param| if desc[:api].all? { |a| a[:path].include?(":#{name}") } param[:required] = true end end end end
add_to_records(record)
click to toggle source
# File lib/apipie/extractor/collector.rb, line 35 def add_to_records(record) key = "#{Apipie.get_resource_name(record[:controller])}##{record[:action]}" @records[key] << record end
controller_full_path(controller)
click to toggle source
# File lib/apipie/extractor/collector.rb, line 15 def controller_full_path(controller) Apipie::Extractor.controller_path controller.controller_path end
finalize_descriptions()
click to toggle source
# File lib/apipie/extractor/collector.rb, line 87 def finalize_descriptions @descriptions.each do |method, desc| add_routes_info(desc) end return @descriptions end
handle_record(record)
click to toggle source
# File lib/apipie/extractor/collector.rb, line 26 def handle_record(record) add_to_records(record) if ignore_call?(record) Extractor.logger.info("REST_API: skipping #{record_to_s(record)}") else refine_description(record) end end
ignore_call?(record)
click to toggle source
# File lib/apipie/extractor/collector.rb, line 19 def ignore_call?(record) return true unless record[:controller] return true if @ignored.include?(record[:controller].name) return true if @ignored.include?("#{Apipie.get_resource_name(record[:controller].name)}##{record[:action]}") return true unless @api_controllers_paths.include?(controller_full_path(record[:controller])) end
record_to_s(record)
click to toggle source
# File lib/apipie/extractor/collector.rb, line 106 def record_to_s(record) "#{record[:controller]}##{record[:action]}" end
refine_description(record)
click to toggle source
# File lib/apipie/extractor/collector.rb, line 40 def refine_description(record) description = @descriptions["#{record[:controller].name}##{record[:action]}"] description[:controller] ||= record[:controller] description[:action] ||= record[:action] refine_errors_description(description, record) refine_params_description(description[:params], record[:params]) end
refine_errors_description(description, record)
click to toggle source
# File lib/apipie/extractor/collector.rb, line 49 def refine_errors_description(description, record) if record[:code].to_i >= 300 && !description[:errors].any? { |e| e[:code].to_i == record[:code].to_i } description[:errors] << {:code => record[:code]} end end
refine_params_description(params_desc, recorded_params)
click to toggle source
# File lib/apipie/extractor/collector.rb, line 55 def refine_params_description(params_desc, recorded_params) recorded_params.each do |key, value| params_desc[key] ||= {} param_desc = params_desc[key] if value.nil? param_desc[:allow_nil] = true else # we specify what type it might be. At the end the first type # that left is taken as the more general one unless param_desc[:type] param_desc[:type] = [:bool, :boolean, :number] param_desc[:type] << Hash if value.is_a? Hash param_desc[:type] << :undef end if [:boolean, :bool].include?(param_desc[:type].first) && (! [true, false, 1, 0].include?(value)) param_desc[:type].shift end if param_desc[:type].first == :number && (key.to_s !~ /id$/ || !Apipie::Validator::NumberValidator.validate(value)) param_desc[:type].shift end end if value.is_a? Hash param_desc[:nested] ||= {} refine_params_description(param_desc[:nested], value) end end end