Sha256: 92f7020893dc3d76c45a423a3338bb5aa6d0d3ff039a6fcae2f0432ec366e8ea

Contents?: true

Size: 1012 Bytes

Versions: 2

Compression:

Stored size: 1012 Bytes

Contents

# frozen_string_literal: true

require_relative 'parser'

module BrightSerializer
  module Entity
    class Base
      DEFAULT_DEFINITION = { type: :undefined }.freeze

      # https://swagger.io/specification/v2/?sbsearch=array%20response#schema-object

      def initialize(definition)
        @definition = definition
      end

      def to_h
        @definition.transform_keys! { |k| Inflector.camel_lower k.to_s }
        parse_ref!
        @definition
      end

      def parse_ref!
        object = nested_hash(@definition, 'ref')
        return unless object

        ref_entity_name = Inflector.constantize(object.delete('ref')).entity_name
        relation = "#/definitions/#{ref_entity_name}"
        object['$ref'] = relation
      end

      def nested_hash(obj, key)
        if obj.respond_to?(:key?) && obj.key?(key)
          obj
        elsif obj.respond_to?(:each)
          r = nil
          obj.find { |*a| r = nested_hash(a.last, key) }
          r
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
bright_serializer-0.2.1 lib/bright_serializer/entity/base.rb
bright_serializer-0.2.0 lib/bright_serializer/entity/base.rb