module Croods::Resource::JsonSchema::Links::Collection

Public Class Methods

definition(attribute) click to toggle source
# File lib/croods/resource/json_schema/links/collection.rb, line 49
def definition(attribute)
  definition = Definition.schema(attribute)

  {
    anyOf: [{ type: ['array'], items: definition }, definition]
  }
end
filters(resource) click to toggle source
# File lib/croods/resource/json_schema/links/collection.rb, line 22
def filters(resource)
  filters = {}

  resource.filters.each do |attribute|
    unless resource.model.has_attribute?(attribute.name)
      attribute.name = "#{attribute.name}_id"
    end

    filters[attribute.name] = definition(attribute)
  end

  filters
end
properties(resource) click to toggle source
# File lib/croods/resource/json_schema/links/collection.rb, line 36
def properties(resource)
  properties = {}

  params = resource.pagination_params + resource.order_params +
           resource.search_params

  params.each do |attribute|
    properties[attribute.name] = definition(attribute)
  end

  properties.merge(filters(resource))
end
required(resource) click to toggle source
# File lib/croods/resource/json_schema/links/collection.rb, line 57
def required(resource)
  collection_properties = resource.filters +
                          resource.pagination_params

  collection_properties.reject(&:null).map(&:name)
end
schema(resource) click to toggle source
# File lib/croods/resource/json_schema/links/collection.rb, line 64
def schema(resource)
  {
    additionalProperties: false,
    properties: properties(resource),
    required: required(resource),
    type: ['object']
  }
end
target_schema(resource) click to toggle source
# File lib/croods/resource/json_schema/links/collection.rb, line 73
def target_schema(resource)
  {
    anyOf: [
      { type: ['array'], items: resource.ref },
      { '$ref': '#/definitions/error' }
    ]
  }
end