Class: GrapeOAS::Introspectors::DryIntrospectorSupport::ContractResolver

Inherits:
Object
  • Object
show all
Defined in:
lib/grape_oas/introspectors/dry_introspector_support/contract_resolver.rb

Overview

Resolves contract class, schema, and metadata from a Dry contract. Handles both class and instance contracts.

Instance Method Summary collapse

Constructor Details

#initialize(contract) ⇒ ContractResolver

Returns a new instance of ContractResolver.



9
10
11
# File 'lib/grape_oas/introspectors/dry_introspector_support/contract_resolver.rb', line 9

def initialize(contract)
  @contract = contract
end

Instance Method Details

#canonical_nameString?

Gets canonical name for contracts and schemas.

  • For Dry::Validation::Contract: uses class name

  • For Dry::Schema with schema_name: uses the defined schema_name

Returns:

  • (String, nil)

    the canonical name or nil



36
37
38
39
40
41
42
43
# File 'lib/grape_oas/introspectors/dry_introspector_support/contract_resolver.rb', line 36

def canonical_name
  return contract_class.name if validation_contract?

  # Check for schema_name on Dry::Schema objects
  return @contract.schema_name if @contract.respond_to?(:schema_name) && @contract.schema_name

  nil
end

#contract_classClass

Gets the contract class (handles both class and instance).

Returns:

  • (Class)

    the contract class



16
17
18
# File 'lib/grape_oas/introspectors/dry_introspector_support/contract_resolver.rb', line 16

def contract_class
  @contract.is_a?(Class) ? @contract : @contract.class
end

#contract_schemaObject

Gets the schema from contract (handles both class and instance).

Returns:

  • (Object)

    the contract schema



23
24
25
26
27
28
29
# File 'lib/grape_oas/introspectors/dry_introspector_support/contract_resolver.rb', line 23

def contract_schema
  if @contract.is_a?(Class)
    @contract.respond_to?(:schema) ? @contract.schema : @contract
  else
    @contract.respond_to?(:schema) ? @contract.class.schema : @contract
  end
end

#validation_contract?Boolean

Checks if this is a Dry::Validation::Contract (class or instance).

Returns:

  • (Boolean)

    true if validation contract



48
49
50
51
52
53
54
55
56
# File 'lib/grape_oas/introspectors/dry_introspector_support/contract_resolver.rb', line 48

def validation_contract?
  return false unless defined?(Dry::Validation::Contract)

  if @contract.is_a?(Class)
    @contract < Dry::Validation::Contract
  else
    @contract.is_a?(Dry::Validation::Contract)
  end
end