Class: Apiwork::Contract::Union

Inherits:
Union
  • Object
show all
Defined in:
lib/apiwork/contract/union.rb

Overview

Block context for defining inline union types.

Accessed via ‘union :name, discriminator: do` inside contract actions. Use Union#variant to define possible types.

Examples:

instance_eval style

union :payment_method, discriminator: :type do
  variant tag: 'card' do
    object do
      string :last_four
    end
  end
  variant tag: 'bank' do
    object do
      string :account_number
    end
  end
end

yield style

union :payment_method, discriminator: :type do |union|
  union.variant tag: 'card' do |variant|
    variant.object do |object|
      object.string :last_four
    end
  end
  union.variant tag: 'bank' do |variant|
    variant.object do |object|
      object.string :account_number
    end
  end
end

See Also:

Instance Attribute Summary collapse

Attributes inherited from Union

#discriminator, #variants

Instance Method Summary collapse

Methods inherited from Union

#variant

Constructor Details

#initialize(contract_class, discriminator: nil) ⇒ Union

Returns a new instance of Union.



44
45
46
47
# File 'lib/apiwork/contract/union.rb', line 44

def initialize(contract_class, discriminator: nil)
  super(discriminator:)
  @contract_class = contract_class
end

Instance Attribute Details

#contract_classObject (readonly)



42
43
44
# File 'lib/apiwork/contract/union.rb', line 42

def contract_class
  @contract_class
end