Module: Castkit::Contract
- Defined in:
- lib/castkit/contract.rb,
lib/castkit/contract/base.rb,
lib/castkit/contract/result.rb,
lib/castkit/contract/validator.rb,
lib/castkit/contract/data_object.rb
Overview
Castkit::Contract provides a lightweight mechanism for defining and validating structured input using a DSL similar to Castkit::DataObject, but without requiring a full data model. Contracts are ideal for validating operation inputs, service payloads, or external API request data.
Contracts support primitive type coercion, nested data object validation, and configurable strictness for unknown attributes. Each contract is defined as a standalone class with its own rules and validation logic.
Defined Under Namespace
Modules: DataObject Classes: Base, Result, Validator
Class Method Summary collapse
-
.build(name = nil, **validation_rules) { ... } ⇒ Class<Castkit::Contract::Base>
Builds a contract from a DSL block and optional validation rules.
-
.from_dataobject(source, as: nil) ⇒ Class<Castkit::Contract::Base>
Builds a contract from an existing Castkit::DataObject class.
Class Method Details
.build(name = nil, **validation_rules) { ... } ⇒ Class<Castkit::Contract::Base>
Builds a contract from a DSL block and optional validation rules.
35 36 37 38 39 40 |
# File 'lib/castkit/contract.rb', line 35 def build(name = nil, **validation_rules, &block) klass = Class.new(Castkit::Contract::Base) klass.send(:define, name, nil, validation_rules: validation_rules, &block) klass end |
.from_dataobject(source, as: nil) ⇒ Class<Castkit::Contract::Base>
Builds a contract from an existing Castkit::DataObject class.
56 57 58 59 60 61 62 63 64 |
# File 'lib/castkit/contract.rb', line 56 def from_dataobject(source, as: nil) name = as || Castkit::Inflector.unqualified_name(source) name = Castkit::Inflector.underscore(name).to_sym klass = Class.new(Castkit::Contract::Base) klass.send(:define, name, source, validation_rules: source.validation_rules) klass end |