Sha256: a3400ef244434a82e91e6b50b9fa85e4bab83d06b0f61ecaff5e82ee0593d68b

Contents?: true

Size: 1.06 KB

Versions: 7

Compression:

Stored size: 1.06 KB

Contents

require "graphiti/open_api"
require_relative "struct"

module Graphiti::OpenAPI
  class AttributeData < Struct
    attribute :type, Types::String
    attribute :readable, Types::Bool
    attribute :writable, Types::Bool
    attribute :description, Types::String.optional
  end

  class Attribute < AttributeData
    attribute :name, Types::Symbol
    attribute :resource, Types::Any

    def_instance_delegators :resource, :schema

    def type
      schema.types[__attributes__[:type].to_sym]
    end

    def to_property
      return {} unless readable || writable

      definition = type.to_schema
      definition[:description] = description if description
      definition[:readOnly] = readable unless writable
      definition[:writeOnly] = writable unless readable
      {name => definition}
    end
  end

  class Attributes < Hash
    def self.load(resource, data = resource.__attributes__[:attributes])
      data.each_with_object(new) do |(name, data), result|
        result[name] = Attribute.new(data.to_hash.merge(name: name, resource: resource))
      end
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
graphiti-openapi-0.1.7 app/models/graphiti/open_api/attribute.rb
graphiti-openapi-0.1.6 app/models/graphiti/open_api/attribute.rb
graphiti-openapi-0.1.5 app/models/graphiti/open_api/attribute.rb
graphiti-openapi-0.1.4 app/models/graphiti/open_api/attribute.rb
graphiti-openapi-0.1.3 app/models/graphiti/open_api/attribute.rb
graphiti-openapi-0.1.2 app/models/graphiti/open_api/attribute.rb
graphiti-openapi-0.1.0 app/models/graphiti/open_api/attribute.rb