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
link(resource, action = nil)
click to toggle source
# File lib/croods/resource/json_schema/links/collection.rb, line 9 def link(resource, action = nil) href = resource.collection_path href += "/#{action.name}" if action { href: href, method: action&.method&.upcase || 'GET', rel: 'instances', schema: schema(resource), targetSchema: target_schema(resource) } 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