class ApiSchema::ApiVersion
Attributes
configuration[RW]
errors[RW]
imported_versions[RW]
resources[RW]
serializers[RW]
Public Class Methods
new(configuration)
click to toggle source
# File lib/api_schema/api_version.rb, line 5 def initialize(configuration) @configuration = configuration @resources = [] @serializers = [] @imported_versions = [] @errors = {} end
Public Instance Methods
check_consistency()
click to toggle source
# File lib/api_schema/api_version.rb, line 14 def check_consistency check_serializers_consistency check_resources_consistency check_desc_files_consistency raise UndefinedSerializersError, error_message unless errors.empty? end
Private Instance Methods
add_errors(key, object)
click to toggle source
# File lib/api_schema/api_version.rb, line 90 def add_errors(key, object) errors[key] ||= [] errors[key] << object end
body_error(object)
click to toggle source
# File lib/api_schema/api_version.rb, line 112 def body_error(object) "There is no '#{object.body_param}' body parameter defined for #{object.base_path} resource. Please define it with 'request_body' method" end
check_desc_files_consistency()
click to toggle source
# File lib/api_schema/api_version.rb, line 39 def check_desc_files_consistency resources.each do |resource| add_errors(:undefined_desc_file, resource) unless find_or_import_desc_file(resource) end end
check_resources_consistency()
click to toggle source
# File lib/api_schema/api_version.rb, line 32 def check_resources_consistency resources.each do |resource| add_errors(:undefined_body, resource) unless find_or_import(resource.body_param) add_errors(:undefined_response, resource) unless find_or_import(resource.resp.model) end end
check_serializers_consistency()
click to toggle source
# File lib/api_schema/api_version.rb, line 24 def check_serializers_consistency serializers.each do |serializer| serializer.prior_references.each do |reference| add_errors(:undefined_reference, reference) unless find_or_import(reference.id) end end end
desc_file_error(object)
click to toggle source
# File lib/api_schema/api_version.rb, line 126 def desc_file_error(object) "The file '#{object.desc_file_name}' cannot be found" end
error_message()
click to toggle source
# File lib/api_schema/api_version.rb, line 95 def error_message message = errors.reduce([]) do |memo, (key, errors)| case key when :undefined_body memo += errors.map(&self.method(:body_error)) when :undefined_response memo += errors.map(&self.method(:response_error)) when :undefined_reference memo += errors.map(&self.method(:reference_error)) when :undefined_desc_file memo += errors.map(&self.method(:desc_file_error)) end end message.join(" \n") end
find_in_another_version(serializer_id)
click to toggle source
# File lib/api_schema/api_version.rb, line 57 def find_in_another_version(serializer_id) imported_versions.each do |import| version = imported_version(import) serializer = find_in_version(version, serializer_id) return serializers << serializer if serializer end false end
find_in_another_version_desc_file(resource)
click to toggle source
# File lib/api_schema/api_version.rb, line 71 def find_in_another_version_desc_file(resource) imported_versions.each do |import| version = imported_version(import) return true if find_in_version_desc_file(version, resource) end false end
find_in_version(version, serializer_id)
click to toggle source
# File lib/api_schema/api_version.rb, line 67 def find_in_version(version, serializer_id) version.serializers.detect { |s| s.id == serializer_id } end
find_in_version_desc_file(version, resource)
click to toggle source
# File lib/api_schema/api_version.rb, line 80 def find_in_version_desc_file(version, resource) file_path = "#{version.configuration.descriptions_path}/#{resource.desc_file_name}.md" return resource.desc_file_path = file_path if File.file?(file_path) end
find_or_import(serializer_id)
click to toggle source
# File lib/api_schema/api_version.rb, line 51 def find_or_import(serializer_id) return true unless serializer_id return true if find_in_version(self, serializer_id) return true if find_in_another_version(serializer_id) end
find_or_import_desc_file(resource)
click to toggle source
# File lib/api_schema/api_version.rb, line 45 def find_or_import_desc_file(resource) return true unless resource.desc_file_name return true if find_in_version_desc_file(self, resource) return true if find_in_another_version_desc_file(resource) end
imported_version(import)
click to toggle source
# File lib/api_schema/api_version.rb, line 85 def imported_version(import) "#{import.name.capitalize}::#{import.api_version.capitalize}::BaseDocs" .constantize.api_version end
reference_error(object)
click to toggle source
# File lib/api_schema/api_version.rb, line 122 def reference_error(object) "Reference #{object.id} is not defined" end
response_error(object)
click to toggle source
# File lib/api_schema/api_version.rb, line 117 def response_error(object) "There is no '#{object.resp.model}' response defined for '#{object.summary}' resource. Please define it with 'serializer' method" end