Sha256: 7b29719a60c9624644f0fb9a9c6577351d8a2bdbd47392fc0f8f43411ecf6701

Contents?: true

Size: 1.53 KB

Versions: 8

Compression:

Stored size: 1.53 KB

Contents

module OpenApi
  # https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.1.md#path-item-object
  class PathItem
    prepend EquatableAsContent

    attr_accessor :ref, :summary, :description, :servers, :parameters, :operations

    OPERATION_NAMES = [:get, :put, :post, :delete, :options, :head, :patch, :trace]

    def initialize(ref: nil, summary: nil, description: nil, servers: nil, parameters: nil, **operations)
      self.ref = ref
      self.summary = summary
      self.description = description
      self.servers = servers
      self.parameters = parameters
      self.operations = operations.map { |k, v| [k.to_s.underscore, v] }.to_h.with_indifferent_access
    end

    def serializable_hash
      {
        "ref" => ref&.to_s,
        "summary" => summary&.to_s,
        "description" => description&.to_s,
        "servers" => servers&.map(&:serializable_hash),
        "parameters" => parameters&.map(&:serializable_hash),
      }.merge(operations.map { |k, v| [k.to_s.underscore, v.serializable_hash] }.to_h)
       .compact
    end

    def self.load(hash)
      operations = hash.select { |key| key.to_sym.in?(OPERATION_NAMES) }
      new(
        ref: hash["$ref"]&.to_s,
        summary: hash["summary"]&.to_s,
        description: hash["description"]&.to_s,
        servers: hash["servers"]&.map { |server_hash| Server.load(server_hash) },
        parameters: hash["parameters"]&.map { |h| Reference.load(h) || Parameter.load(h) },
        **operations.map { |k ,v| [k.to_sym, Operation.load(v)] }.to_h,
      )
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
open_api-0.6.2 lib/open_api/path_item.rb
open_api-0.6.1 lib/open_api/path_item.rb
open_api-0.6.0 lib/open_api/path_item.rb
open_api-0.5.0 lib/open_api/path_item.rb
open_api-0.4.0 lib/open_api/path_item.rb
open_api-0.3.4 lib/open_api/path_item.rb
open_api-0.3.3 lib/open_api/path_item.rb
open_api-0.3.2 lib/open_api/path_item.rb