Module: Castkit::Contract::DataObject

Defined in:
lib/castkit/contract/data_object.rb

Overview

Extension module that adds ‘.to_dataobject` and `.dataobject` support to Castkit contracts.

This allows any contract to be dynamically converted into a Castkit::DataObject class, enabling reuse of validation schemas for serialization, coercion, or API response modeling.

This module is automatically included by Castkit contract classes and is not intended to be used manually.

Examples:

contract = Castkit::Contract.build(:user) do
  string :id
  string :email
end

UserDto = contract.to_dataobject
UserDto.new(id: "123", email: "[email protected]")

Instance Method Summary collapse

Instance Method Details

#dataobjectClass<Castkit::DataObject>

Returns or builds a Castkit::DataObject from the current contract.

Memoizes the result to avoid repeated regeneration.

Examples:

contract = Castkit::Contract.build(:user) do
  string :id
  string :name
end

dto_class = contract.dataobject
dto = dto_class.new(id: "123", name: "Alice")

Returns:



36
37
38
# File 'lib/castkit/contract/data_object.rb', line 36

def dataobject
  @dataobject ||= to_dataobject
end

#to_dataobjectClass<Castkit::DataObject> Also known as: to_dto

Constructs an ephemeral Castkit::DataObject class from the current contract.

This creates a new anonymous class each time unless memoized via #dataobject.

Examples:

dto_class = contract.to_dataobject

Returns:



48
49
50
51
52
53
54
# File 'lib/castkit/contract/data_object.rb', line 48

def to_dataobject
  Class.new(Castkit::DataObject).tap do |klass|
    attributes.each_value do |attr|
      klass.attribute(attr.field, attr.type, **attr.options)
    end
  end
end