Sha256: caa102b16e1772cdeb5afac3fad29d978bd8645950c99cc614a21c91d6900bca

Contents?: true

Size: 1.53 KB

Versions: 26

Compression:

Stored size: 1.53 KB

Contents

# frozen_string_literal: true

module Cocina
  module Generator
    # Base class for generating from openapi
    class SchemaBase
      attr_reader :schema_doc, :key, :required, :parent

      def initialize(schema_doc, key: nil, required: false, parent: nil)
        @schema_doc = schema_doc
        @key = key
        @required = required
        @parent = parent
      end

      def filename
        "#{name.underscore}.rb"
      end

      def name
        key || schema_doc.name
      end

      def omittable
        return '' if required

        '.meta(omittable: true)'
      end

      def quote(item)
        return item unless schema_doc.type == 'string'

        "'#{item}'"
      end

      def description
        return '' unless schema_doc.description

        "# #{schema_doc.description}\n"
      end

      def example
        return '' unless schema_doc.example

        "# example: #{schema_doc.example}\n"
      end

      def dry_datatype(doc)
        case doc.type
        when 'integer'
          'Strict::Integer'
        when 'string'
          string_dry_datatype(doc)
        when 'boolean'
          'Strict::Bool'
        else
          if doc.one_of&.map(&:type).all? { |o| %w[integer string].include?(o) }
            'Nominal::Any'
          else
            raise "#{schema_doc.type} not supported"
          end
        end
      end

      def string_dry_datatype(doc)
        case doc.format
        when 'date-time'
          'Params::DateTime'
        else
          'Strict::String'
        end
      end
    end
  end
end

Version data entries

26 entries across 26 versions & 1 rubygems

Version Path
cocina-models-0.57.0 lib/cocina/generator/schema_base.rb
cocina-models-0.56.1 lib/cocina/generator/schema_base.rb
cocina-models-0.56.0 lib/cocina/generator/schema_base.rb
cocina-models-0.55.0 lib/cocina/generator/schema_base.rb
cocina-models-0.54.0 lib/cocina/generator/schema_base.rb
cocina-models-0.54.0.beta.2 lib/cocina/generator/schema_base.rb
cocina-models-0.53.1 lib/cocina/generator/schema_base.rb
cocina-models-0.54.0.beta.1 lib/cocina/generator/schema_base.rb
cocina-models-0.53.0 lib/cocina/generator/schema_base.rb
cocina-models-0.52.0 lib/cocina/generator/schema_base.rb
cocina-models-0.51.0 lib/cocina/generator/schema_base.rb
cocina-models-0.50.0 lib/cocina/generator/schema_base.rb
cocina-models-0.49.0 lib/cocina/generator/schema_base.rb
cocina-models-0.48.0 lib/cocina/generator/schema_base.rb
cocina-models-0.47.2 lib/cocina/generator/schema_base.rb
cocina-models-0.47.1 lib/cocina/generator/schema_base.rb
cocina-models-0.47.0 lib/cocina/generator/schema_base.rb
cocina-models-0.46.0 lib/cocina/generator/schema_base.rb
cocina-models-0.45.0 lib/cocina/generator/schema_base.rb
cocina-models-0.44.0 lib/cocina/generator/schema_base.rb