class Avromatic::Model::Attributes::AttributeDefinition
Attributes
default[R]
field[R]
name[R]
name_string[R]
owner[R]
setter_name[R]
type[R]
Public Class Methods
new(owner:, field:, type:)
click to toggle source
# File lib/avromatic/model/attributes.rb, line 28 def initialize(owner:, field:, type:) @owner = owner @field = field @required = FieldHelper.required?(field) @nullable = FieldHelper.nullable?(field) @type = type @values_immutable = type.referenced_model_classes.all?(&:recursively_immutable?) @name = field.name.to_sym @name_string = field.name.to_s.dup.freeze @setter_name = "#{field.name}=".to_sym @default = if field.default == :no_default nil elsif field.default.duplicable? field.default.dup.deep_freeze else field.default end end
Public Instance Methods
coerce(input)
click to toggle source
# File lib/avromatic/model/attributes.rb, line 59 def coerce(input) type.coerce(input) rescue Avromatic::Model::UnknownAttributeError => e raise Avromatic::Model::CoercionError.new( "Value for #{owner.name}##{name} could not be coerced to a #{type.name} " \ "because the following unexpected attributes were provided: #{e.unknown_attributes.join(', ')}. " \ "Only the following attributes are allowed: #{e.allowed_attributes.join(', ')}. " \ "Provided argument: #{input.inspect}" ) rescue StandardError if type.input_classes && type.input_classes.none? { |input_class| input.is_a?(input_class) } raise Avromatic::Model::CoercionError.new( "Value for #{owner.name}##{name} could not be coerced to a #{type.name} " \ "because a #{input.class.name} was provided but expected a #{type.input_classes.map(&:name).to_sentence( two_words_connector: ' or ', last_word_connector: ', or ' )}. " \ "Provided argument: #{input.inspect}" ) elsif input.is_a?(Hash) && type.is_a?(Avromatic::Model::Types::UnionType) raise Avromatic::Model::CoercionError.new( "Value for #{owner.name}##{name} could not be coerced to a #{type.name} " \ "because no union member type matches the provided attributes: #{input.inspect}" ) else raise Avromatic::Model::CoercionError.new( "Value for #{owner.name}##{name} could not be coerced to a #{type.name}. " \ "Provided argument: #{input.inspect}" ) end end
nullable?()
click to toggle source
# File lib/avromatic/model/attributes.rb, line 47 def nullable? @nullable end
required?()
click to toggle source
# File lib/avromatic/model/attributes.rb, line 51 def required? @required end
values_immutable?()
click to toggle source
# File lib/avromatic/model/attributes.rb, line 55 def values_immutable? @values_immutable end