# frozen_string_literal: true # rubocop:disable Metrics/MethodLength class JsonApiSchema module Structure extend self def schema(data_properties) { type: :object, properties: { data: { type: :object, properties: data_properties }, meta: { type: :object }, links: { type: :object } }, required: [:data] } end def collection(data_properties) { type: :object, properties: { data: { type: :array, items: { type: :object, properties: data_properties } }, meta: { type: :object, properties: { pagination: { type: :object, properties: { results: { type: :integer, example: 250 }, pages: { type: :integer, example: 5 }, page: { type: :integer, example: 2 }, per_page: { type: :integer, example: 50 }, } } }, required: [:pagination] }, links: { type: :object, properties: { self: { type: :string }, first: { type: :string }, prev: { type: :string, nullable: true }, next: { type: :string, nullable: true }, last: { type: :string } } } }, required: [:data, :meta, :links] } end def data_properties(object_name, attributes, required, relationship_properties) { id: { type: :string, example: "1" }, type: { type: :string, example: object_name }, attributes: { type: :object, properties: attributes, required: }, relationships: { type: :object, properties: relationship_properties } } end end end # rubocop:enable Metrics/MethodLength