Sha256: d11d75e4c704c0041b38d47c64f3b7d405022cb073638749f9bf564244639e19

Contents?: true

Size: 1.64 KB

Versions: 7

Compression:

Stored size: 1.64 KB

Contents

# frozen_string_literal: true

require "forwardable"

module Openapi3Parser
  class Source
    class ResolvedReference
      extend Forwardable

      def_delegators :source_location, :source
      def_delegators :factory, :resolved_input, :node

      attr_reader :source_location, :object_type

      def initialize(source_location:,
                     object_type:,
                     reference_registry:)
        @source_location = source_location
        @object_type = object_type
        @reference_registry = reference_registry
      end

      def valid?
        errors.empty?
      end

      def errors
        @errors ||= Array(build_errors)
      end

      def factory
        @factory ||= begin
          reference_registry
            .factory(object_type, source_location)
            .tap do |factory|
              message = "Unregistered node factory at #{source_location}"
              raise Openapi3Parser::Error, message unless factory
            end
        end
      end

      private

      attr_reader :reference_registry

      def build_errors
        return source_unavailabe_error unless source.available?
        return pointer_missing_error unless source_location.pointer_defined?

        resolution_error unless factory.valid?
      end

      def source_unavailabe_error
        "Failed to open source #{source.relative_to_root}"
      end

      def pointer_missing_error
        suffix = source.root? ? "" : " in source #{source.relative_to_root}"
        "#{source_location.pointer} is not defined#{suffix}"
      end

      def resolution_error
        "#{source_location} does not resolve to a valid object"
      end
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
openapi3_parser-0.9.0 lib/openapi3_parser/source/resolved_reference.rb
openapi3_parser-0.8.2 lib/openapi3_parser/source/resolved_reference.rb
openapi3_parser-0.8.1 lib/openapi3_parser/source/resolved_reference.rb
openapi3_parser-0.8.0 lib/openapi3_parser/source/resolved_reference.rb
openapi3_parser-0.7.0 lib/openapi3_parser/source/resolved_reference.rb
openapi3_parser-0.6.1 lib/openapi3_parser/source/resolved_reference.rb
openapi3_parser-0.6.0 lib/openapi3_parser/source/resolved_reference.rb