Class: Castkit::Contract::Base
- Inherits:
-
Object
- Object
- Castkit::Contract::Base
- Extended by:
- Castkit::Core::AttributeTypes, Castkit::Core::Config, Cattri
- Defined in:
- lib/castkit/contract/base.rb
Overview
Base class for all Castkit contracts.
Castkit contracts define validation logic over a set of attributes using a DSL. You can either subclass this directly or use build to generate ephemeral or reusable contract classes.
Constant Summary collapse
- ATTRIBUTE_OPTIONS =
i[ required aliases min max format of validator unwrapped prefix force_type ].freeze
Class Method Summary collapse
-
.attribute(field, type, **options) ⇒ void
Defines an attribute for the contract.
-
.attributes ⇒ Hash{Symbol => Castkit::Attribute}
Returns the defined attributes.
-
.validate(input) ⇒ Castkit::Contract::Result
Validates input against the contract and returns a Result.
-
.validate!(input) ⇒ void
Validates input and raises on failure.
Methods included from Castkit::Core::Config
allow_unknown, extended, ignore_unknown, relaxed, strict, validation_rules, warn_on_unknown
Methods included from Castkit::Core::AttributeTypes
array, boolean, dataobject, date, datetime, define_type_dsl, float, hash, included, integer, string, unwrapped
Class Method Details
.attribute(field, type, **options) ⇒ void
This method returns an undefined value.
Defines an attribute for the contract.
Only a subset of options is allowed inside a contract.
51 52 53 54 |
# File 'lib/castkit/contract/base.rb', line 51 def attribute(field, type, **) = .slice(*ATTRIBUTE_OPTIONS) attributes[field] = Castkit::Attribute.new(field, type, **) end |
.attributes ⇒ Hash{Symbol => Castkit::Attribute}
Returns the defined attributes.
83 84 85 |
# File 'lib/castkit/contract/base.rb', line 83 def attributes definition[:attributes] end |
.validate(input) ⇒ Castkit::Contract::Result
Validates input against the contract and returns a Result.
60 61 62 63 64 |
# File 'lib/castkit/contract/base.rb', line 60 def validate(input) validate!(input) rescue Castkit::ContractError => e Castkit::Contract::Result.new(definition[:name].to_s, input, errors: e.errors) end |
.validate!(input) ⇒ void
This method returns an undefined value.
Validates input and raises on failure.
71 72 73 74 |
# File 'lib/castkit/contract/base.rb', line 71 def validate!(input) Castkit::Contract::Validator.call!(attributes.values, input, **validation_rules) Castkit::Contract::Result.new(definition[:name].to_s, input) end |