class ApiSchema::SerializerDefinition

Constants

PriorReference

Attributes

api_version[R]
description[RW]
fields[R]
id[R]
name[RW]
parent[R]
prior_references[RW]
references[R]
type[RW]

Public Class Methods

new(id, type, api_version, name=nil, parent_id = nil) click to toggle source
# File lib/api_schema/serializer_definition.rb, line 10
def initialize(id, type, api_version, name=nil, parent_id = nil)
  @id = id
  @type = type
  @name = name || id
  @api_version = api_version
  @parent = api_version.serializers.detect { |s| s.id == parent_id } if parent_id
  @fields = parent&.fields || []
  @prior_references = parent&.prior_references || []
  @references = []
end

Public Instance Methods

build() click to toggle source
# File lib/api_schema/serializer_definition.rb, line 29
def build
  build_references
  sd = self
  swagger_schema(id) { schema_for(sd) }
end
build_references() click to toggle source
# File lib/api_schema/serializer_definition.rb, line 35
def build_references
  @prior_references.each do |pr|
    reference = api_version.serializers.detect { |s| s.id == pr.id }
    reference.type = pr.type
    reference.description = pr.desc
    reference.name = reference.name.to_s.pluralize if reference.type == :array
    @references << reference
  end
end
method_missing(type, *args, &block) click to toggle source
# File lib/api_schema/serializer_definition.rb, line 45
def method_missing(type, *args, &block)
  options = args[1] || {}
  @fields << Field.new(type, args[0], options)
end
reference(refernce_id, type: :object, desc: nil) click to toggle source
# File lib/api_schema/serializer_definition.rb, line 25
def reference(refernce_id, type: :object, desc: nil)
  @prior_references << PriorReference.new(refernce_id, type, desc)
end
required_fields() click to toggle source
# File lib/api_schema/serializer_definition.rb, line 21
def required_fields
  fields.select { |f| f.required? }.map(&:name) + references.map(&:name)
end