Module: Castkit

Defined in:
lib/castkit.rb,
lib/castkit/cli.rb,
lib/castkit/error.rb,
lib/castkit/types.rb,
lib/castkit/castkit.rb,
lib/castkit/plugins.rb,
lib/castkit/version.rb,
lib/generators/base.rb,
lib/generators/type.rb,
lib/castkit/cli/list.rb,
lib/castkit/cli/main.rb,
lib/castkit/contract.rb,
lib/castkit/attribute.rb,
lib/castkit/inflector.rb,
lib/castkit/validator.rb,
lib/generators/plugin.rb,
lib/castkit/types/base.rb,
lib/castkit/types/date.rb,
lib/castkit/core/config.rb,
lib/castkit/data_object.rb,
lib/castkit/types/float.rb,
lib/generators/contract.rb,
lib/castkit/cli/generate.rb,
lib/castkit/types/string.rb,
lib/generators/validator.rb,
lib/castkit/configuration.rb,
lib/castkit/contract/base.rb,
lib/castkit/types/boolean.rb,
lib/castkit/types/integer.rb,
lib/generators/serializer.rb,
lib/generators/data_object.rb,
lib/castkit/contract/result.rb,
lib/castkit/core/attributes.rb,
lib/castkit/types/date_time.rb,
lib/castkit/validators/base.rb,
lib/castkit/serializers/base.rb,
lib/castkit/types/collection.rb,
lib/castkit/core/registerable.rb,
lib/castkit/contract/validator.rb,
lib/castkit/contract/data_object.rb,
lib/castkit/core/attribute_types.rb,
lib/castkit/ext/attribute/access.rb,
lib/castkit/ext/attribute/options.rb,
lib/castkit/ext/data_object/plugins.rb,
lib/castkit/ext/attribute/validation.rb,
lib/castkit/ext/data_object/contract.rb,
lib/castkit/validators/float_validator.rb,
lib/castkit/validators/string_validator.rb,
lib/castkit/ext/attribute/error_handling.rb,
lib/castkit/validators/boolean_validator.rb,
lib/castkit/validators/integer_validator.rb,
lib/castkit/validators/numeric_validator.rb,
lib/castkit/ext/data_object/serialization.rb,
lib/castkit/serializers/default_serializer.rb,
lib/castkit/ext/data_object/deserialization.rb,
lib/castkit/validators/collection_validator.rb

Overview

Castkit is a lightweight, type-safe data object system for Ruby.

It provides a declarative DSL for defining DTOs with typecasting, validation, access control, serialization, deserialization, and OpenAPI-friendly schema generation.

Examples:

Defining a simple data object

class UserDto < Castkit::DataObject
  string :name
  integer :age, required: false
end

user = UserDto.new(name: "Alice", age: 30)
user.to_h #=> { name: "Alice", age: 30 }

See Also:

Defined Under Namespace

Modules: CLI, Contract, Contracts, Core, DataObjects, Ext, Generators, Inflector, Plugins, Serializers, Types, Validators Classes: Attribute, AttributeError, Configuration, ContractError, DataObject, DataObjectError, Error, SerializationError, TypeError, Validator

Constant Summary collapse

VERSION =
"0.3.0"

Class Method Summary collapse

Class Method Details

.configurationCastkit::Configuration

Retrieves the global Castkit configuration instance.

Returns:



49
50
51
# File 'lib/castkit/castkit.rb', line 49

def configuration
  @configuration ||= Configuration.new
end

.configure {|config| ... } ⇒ void

This method returns an undefined value.

Yields the global configuration object for customization.

Examples:

Disabling array enforcement

Castkit.configure do |config|
  config.enforce_typing = false
end

Yield Parameters:



42
43
44
# File 'lib/castkit/castkit.rb', line 42

def configure
  yield(configuration)
end

.dataobject?(obj) ⇒ Boolean

Checks whether a given object is a subclass of Castkit::DataObject.

Parameters:

  • obj (Object)

    the object to test

Returns:

  • (Boolean)

    true if obj is a Castkit::DataObject class



65
66
67
# File 'lib/castkit/castkit.rb', line 65

def dataobject?(obj)
  obj.is_a?(Class) && obj.ancestors.include?(Castkit::DataObject)
end

.type_caster(type) ⇒ Proc

Returns a type caster lambda for the given type.

Type casting performs both validation and deserialization on the provided value.

Parameters:

  • type (Symbol)

    the registered type (e.g. :string)

Returns:

  • (Proc)

    a lambda that accepts a value and options and returns a casted result



75
76
77
78
79
80
81
# File 'lib/castkit/castkit.rb', line 75

def type_caster(type)
  type_definition = configuration.fetch_type(type)

  lambda do |value, validator: nil, options: {}, context: nil|
    type_definition.class.cast!(value, validator: validator, options: options, context: context)
  end
end

.type_deserializer(type) ⇒ Proc

Returns a deserializer lambda for the given type.

Parameters:

  • type (Symbol)

    the registered type (e.g. :string)

Returns:

  • (Proc)

    a lambda that calls ‘.deserialize` on the type



95
96
97
# File 'lib/castkit/castkit.rb', line 95

def type_deserializer(type)
  ->(value) { configuration.fetch_type(type).deserialize(value) }
end

.type_serializer(type) ⇒ Proc

Returns a serializer lambda for the given type.

Parameters:

  • type (Symbol)

    the registered type (e.g. :string)

Returns:

  • (Proc)

    a lambda that calls ‘.serialize` on the type



87
88
89
# File 'lib/castkit/castkit.rb', line 87

def type_serializer(type)
  ->(value) { configuration.fetch_type(type).serialize(value) }
end

.type_validator(type) ⇒ Proc

Returns a validator lambda for the given type.

Parameters:

  • type (Symbol)

    the registered type (e.g. :string)

Returns:

  • (Proc)

    a lambda that calls ‘.validate!` on the type



103
104
105
# File 'lib/castkit/castkit.rb', line 103

def type_validator(type)
  ->(value) { configuration.fetch_type(type).validate!(value) }
end

.warning(message) ⇒ void

This method returns an undefined value.

Emits a warning to STDERR if ‘enable_warnings` is enabled in config.

Parameters:

  • message (String)

    the warning message



57
58
59
# File 'lib/castkit/castkit.rb', line 57

def warning(message)
  warn message if configuration.enable_warnings
end