class R2OAS::Schema::V3::FromFiles::Components::SchemaObject

Public Class Methods

new(doc, ref, opts) click to toggle source
# File lib/r2-oas/schema/v3/object/from_files/components/schema_object.rb, line 17
def initialize(doc, ref, opts)
  super(opts)
  @doc = doc
  @parent_ref = Components::SchemaRef.new(ref)
  resolve_dependencies!
end

Public Instance Methods

call_ref_path!() click to toggle source
# File lib/r2-oas/schema/v3/object/from_files/components/schema_object.rb, line 46
def call_ref_path!
  callback = proc { |obj| obj.ref_path }
  deep_call(@doc, '$ref', callback)
end
ref_path() click to toggle source
# File lib/r2-oas/schema/v3/object/from_files/components/schema_object.rb, line 71
def ref_path
  "#/components/schemas/#{schema_name}"
end
resolve_dependencies!() click to toggle source
# File lib/r2-oas/schema/v3/object/from_files/components/schema_object.rb, line 33
def resolve_dependencies!
  deep_replace!(@doc, '$ref') do |ref_path|
    schema_obj, schema_type, pure_schema_name = ref_path.split('/').slice(1..-1)
    schema_doc = root_doc&.fetch(schema_obj, nil)&.fetch(schema_type, nil)&.fetch(pure_schema_name, nil) || {}

    ref = create_child_ref(pure_schema_name)
    obj = Components::SchemaObject.new(schema_doc, ref, opts)

    obj_store.add('components/schemas', pure_schema_name, obj)
    obj
  end
end
schema_name() click to toggle source
# File lib/r2-oas/schema/v3/object/from_files/components/schema_object.rb, line 51
def schema_name
  return @resolved_schema_name if @resolved_schema_name.present?

  before_schema_name = ref_dup[:schema_name]

  _ref_dup = ref_dup
  execute_transform_plugins(:components_schema_name, _ref_dup)
  @resolved_schema_name = _ref_dup[:schema_name]

  if before_schema_name != @resolved_schema_name
    if reserved_schema_name_list.include?(@resolved_schema_name)
      raise DepulicateSchemaNameError, "Transformed schema name: '#{@resolved_schema_name}' cannot be used. It already exists."
    else
      obj_store.appended_components_schema_name_list.push(@resolved_schema_name)
    end
  end

  @resolved_schema_name
end
to_doc() click to toggle source
# File lib/r2-oas/schema/v3/object/from_files/components/schema_object.rb, line 24
def to_doc
  call_ref_path!

  # MEMO:
  # If it is overwritten, it may lead to unexpected problems, so give a copy
  execute_transform_plugins(:components_schema, @doc, ref_dup)
  @doc
end

Private Instance Methods

create_child_ref(schema_name) click to toggle source
# File lib/r2-oas/schema/v3/object/from_files/components/schema_object.rb, line 88
def create_child_ref(schema_name)
  local_ref_hash = ref_dup.to_h
  parent_schema_name = local_ref_hash[:schema_name]
  depth = local_ref_hash[:depth] + 1
  ref_data = local_ref_hash.merge({ from: :schema, schema_name: schema_name, parent_schema_name: parent_schema_name, depth: depth })
  ref = Components::SchemaRef.new(ref_data)
  ref.send(:parent=, ref_dup)
  ref
end
ref_dup() click to toggle source
# File lib/r2-oas/schema/v3/object/from_files/components/schema_object.rb, line 77
def ref_dup
  @parent_ref.dup
end
reserved_schema_name_list() click to toggle source
# File lib/r2-oas/schema/v3/object/from_files/components/schema_object.rb, line 81
def reserved_schema_name_list
  (
    obj_store.components_schema_name_list +
    obj_store.appended_components_schema_name_list
  ).uniq
end