Hanami, Dry, and Rom are joining as Hanakai. Read the announcement →
Hanakai
  • Hanami

    Complete framework for building apps

    Dry

    Validation, types, functional patterns and more

    Rom

    Powerful and flexible persistence toolkit

  • Learn
  • Blog
  • Community
  • Sponsor

Projects

Hanami
Dry
Rom
  • Learn
  • Blog
  • Community
  • Sponsor

Dry

  1. Getting started
    1. Overview
  2. Dry Auto Inject
    1. Introduction
    2. Basic usage
    3. How does it work?
    4. Injection strategies
  3. Dry CLI
    1. Introduction
    2. Commands
    3. Subcommands
    4. Arguments
    5. Options
    6. Variadic arguments
    7. Commands with subcommands and params
    8. Callbacks
  4. Dry Configurable
    1. Introduction & Usage
    2. Converting config to Data
    3. Testing
  5. Dry Core
    1. Introduction
    2. Cache
    3. Container
    4. Constants
    5. Working with Classes
      1. Class Attributes
      2. Class Builder
    6. Deprecations
    7. Equalizer
    8. Extensions
  6. Dry Effects
    1. Introduction
    2. Effects
      1. Cache
      2. Current Time
      3. Deferred execution
      4. Environment
      5. Interrupt
      6. Parallel execution
      7. Reader
      8. Resolve (Dependency Injection)
      9. State
      10. Timeout
  7. Dry Events
    1. Introduction
  8. Dry Files
    1. Introduction
    2. File System Utilities
    3. Ruby File Manipulation
    4. Adapters
    5. Error Handling
  9. Dry Inflector
    1. Introduction
  10. Dry Initializer
    1. Introduction & Usage
    2. Container Version
    3. Params and Options
    4. Tolerance to Unknown Arguments
    5. Optional Attributes and Default Values
    6. Type Constraints
    7. Readers
    8. Inheritance
    9. Skip Undefined
    10. Attributes
    11. Rails Support
  11. Dry Logger
    1. Introduction
    2. Backends
    3. Formatters
    4. Templates
    5. Filtering sensitive data
    6. Context
    7. Tagged logging
    8. Crash handling
    9. Testing
    10. Examples
  12. Dry Logic
    1. Introduction
    2. Predicates
    3. Operations
  13. Dry Matcher
    1. Introduction
    2. Class enhancement
    3. Result matcher
  14. Dry Monads
    1. Introduction
    2. Getting started
    3. Maybe
    4. Result
    5. Do notation
    6. Try
    7. List
    8. Task
    9. Validated
    10. Case equality
    11. Tracing failures
    12. Pattern matching
    13. Unit
  15. Dry Monitor
    1. Introduction
    2. Third Party Integrations
  16. Dry Operation
    1. Introduction
    2. Error Handling
    3. Configuration
    4. Extensions
    5. Design Pattern
  17. Dry Rails
    1. Introduction
  18. Dry Schema
    1. Introduction
    2. Basics
      1. Built-in predicates
      2. Macros
      3. Type specs
      4. Working with schemas
    3. Optional keys and values
    4. Nested data
    5. Reusing schemas
    6. Params
    7. JSON
    8. Error messages
    9. Advanced
      1. Composing schemas
      2. Custom predicates
      3. Custom types
      4. Filtering
      5. Key maps
      6. Predicate logic
      7. Processor steps
      8. Rule AST
      9. Unexpected keys
    10. Extensions
      1. Hints
      2. Info
      3. JSON Schema
      4. Monads
  19. Dry Schema
    1. Introduction
    2. Basics
      1. Built-in predicates
      2. Macros
      3. Type specs
      4. Working with schemas
    3. Optional keys and values
    4. Nested data
    5. Reusing schemas
    6. Params
    7. JSON
    8. Error messages
    9. Advanced
      1. Composing schemas
      2. Custom predicates
      3. Custom types
      4. Filtering
      5. Key maps
      6. Predicate logic
      7. Processor steps
      8. Rule AST
      9. Unexpected keys
    10. Extensions
      1. Hints
      2. Info
      3. JSON Schema
      4. Monads
  20. Dry System
    1. Introduction
    2. Container
    3. Component dirs
    4. Providers
    5. Dependency auto-injection
    6. Plugins
    7. External provider sources
    8. Settings
    9. Test Mode
  21. Dry Transformer
    1. Introduction
    2. Transformation objects
    3. Built-in transformation
    4. Using standalone functions
  22. Dry Types
    1. Introduction
    2. Getting Started
    3. Built-in Types
    4. Optional values
    5. Default Values
    6. Fallbacks
    7. Constraints
    8. Hash Schemas
    9. Array With Member
    10. Enum
    11. Map
    12. Combining Types
      1. Intersection
      2. Sum
    13. Custom Types
    14. Custom Type Builders
    15. Extensions
      1. Maybe
      2. Monads
  23. Dry Validation
    1. Introduction
    2. Configuration
    3. Schemas
    4. Rules
    5. Messages
    6. Macros
    7. External dependencies
    8. Extensions
    9. Pattern matching
  24. Dry Container Deprecated
    1. Introduction & Usage
    2. Registry & Resolver
    3. Testing
    Dry Transaction Deprecated
    1. Introduction
    2. Basic usage
    3. Wrapping operations
    4. Injecting operations
    5. Step notifications
    6. Around steps
    7. Step adapters
    8. Custom step adapters
    Dry View Deprecated
    1. Introduction
    2. Configuration
    3. Injecting dependencies
    4. Exposures
    5. Templates
    6. Parts
    7. Scopes
    8. Context
    9. Testing
  1. Getting started
    1. Overview
  2. Dry Auto Inject
    1. Introduction
    2. Basic usage
    3. How does it work?
    4. Injection strategies
  3. Dry CLI
    1. Introduction
    2. Commands
    3. Subcommands
    4. Arguments
    5. Options
    6. Variadic arguments
    7. Commands with subcommands and params
    8. Callbacks
  4. Dry Configurable
    1. Introduction & Usage
    2. Converting config to Data
    3. Testing
  5. Dry Core
    1. Introduction
    2. Cache
    3. Container
    4. Constants
    5. Working with Classes
      1. Class Attributes
      2. Class Builder
    6. Deprecations
    7. Equalizer
    8. Extensions
  6. Dry Effects
    1. Introduction
    2. Effects
      1. Cache
      2. Current Time
      3. Deferred execution
      4. Environment
      5. Interrupt
      6. Parallel execution
      7. Reader
      8. Resolve (Dependency Injection)
      9. State
      10. Timeout
  7. Dry Events
    1. Introduction
  8. Dry Files
    1. Introduction
    2. File System Utilities
    3. Ruby File Manipulation
    4. Adapters
    5. Error Handling
  9. Dry Inflector
    1. Introduction
  10. Dry Initializer
    1. Introduction & Usage
    2. Container Version
    3. Params and Options
    4. Tolerance to Unknown Arguments
    5. Optional Attributes and Default Values
    6. Type Constraints
    7. Readers
    8. Inheritance
    9. Skip Undefined
    10. Attributes
    11. Rails Support
  11. Dry Logger
    1. Introduction
    2. Backends
    3. Formatters
    4. Templates
    5. Filtering sensitive data
    6. Context
    7. Tagged logging
    8. Crash handling
    9. Testing
    10. Examples
  12. Dry Logic
    1. Introduction
    2. Predicates
    3. Operations
  13. Dry Matcher
    1. Introduction
    2. Class enhancement
    3. Result matcher
  14. Dry Monads
    1. Introduction
    2. Getting started
    3. Maybe
    4. Result
    5. Do notation
    6. Try
    7. List
    8. Task
    9. Validated
    10. Case equality
    11. Tracing failures
    12. Pattern matching
    13. Unit
  15. Dry Monitor
    1. Introduction
    2. Third Party Integrations
  16. Dry Operation
    1. Introduction
    2. Error Handling
    3. Configuration
    4. Extensions
    5. Design Pattern
  17. Dry Rails
    1. Introduction
  18. Dry Schema
    1. Introduction
    2. Basics
      1. Built-in predicates
      2. Macros
      3. Type specs
      4. Working with schemas
    3. Optional keys and values
    4. Nested data
    5. Reusing schemas
    6. Params
    7. JSON
    8. Error messages
    9. Advanced
      1. Composing schemas
      2. Custom predicates
      3. Custom types
      4. Filtering
      5. Key maps
      6. Predicate logic
      7. Processor steps
      8. Rule AST
      9. Unexpected keys
    10. Extensions
      1. Hints
      2. Info
      3. JSON Schema
      4. Monads
  19. Dry Schema
    1. Introduction
    2. Basics
      1. Built-in predicates
      2. Macros
      3. Type specs
      4. Working with schemas
    3. Optional keys and values
    4. Nested data
    5. Reusing schemas
    6. Params
    7. JSON
    8. Error messages
    9. Advanced
      1. Composing schemas
      2. Custom predicates
      3. Custom types
      4. Filtering
      5. Key maps
      6. Predicate logic
      7. Processor steps
      8. Rule AST
      9. Unexpected keys
    10. Extensions
      1. Hints
      2. Info
      3. JSON Schema
      4. Monads
  20. Dry System
    1. Introduction
    2. Container
    3. Component dirs
    4. Providers
    5. Dependency auto-injection
    6. Plugins
    7. External provider sources
    8. Settings
    9. Test Mode
  21. Dry Transformer
    1. Introduction
    2. Transformation objects
    3. Built-in transformation
    4. Using standalone functions
  22. Dry Types
    1. Introduction
    2. Getting Started
    3. Built-in Types
    4. Optional values
    5. Default Values
    6. Fallbacks
    7. Constraints
    8. Hash Schemas
    9. Array With Member
    10. Enum
    11. Map
    12. Combining Types
      1. Intersection
      2. Sum
    13. Custom Types
    14. Custom Type Builders
    15. Extensions
      1. Maybe
      2. Monads
  23. Dry Validation
    1. Introduction
    2. Configuration
    3. Schemas
    4. Rules
    5. Messages
    6. Macros
    7. External dependencies
    8. Extensions
    9. Pattern matching
  24. Dry Container Deprecated
    1. Introduction & Usage
    2. Registry & Resolver
    3. Testing
    Dry Transaction Deprecated
    1. Introduction
    2. Basic usage
    3. Wrapping operations
    4. Injecting operations
    5. Step notifications
    6. Around steps
    7. Step adapters
    8. Custom step adapters
    Dry View Deprecated
    1. Introduction
    2. Configuration
    3. Injecting dependencies
    4. Exposures
    5. Templates
    6. Parts
    7. Scopes
    8. Context
    9. Testing
  1. Dry
  2. Dry Schema
v1.14

Advanced

  • Predicate Logic
  • Composing schemas
  • Unexpected keys
  • Filtering
  • Key maps
  • Rule AST
  • Custom types
  • Processor steps
Previous guide:

Dry Schema Error messages

Next guide:

Dry Schema Composing schemas

  • Hanakai
    • Hanami
    • Dry
    • Rom
    • Status
    • Colophon
  • Learn
    • Hanami
    • Dry
    • Rom
  • Community
    • Code repos
    • Discussion forum
    • Chat room
    • Mastodon
    • Bluesky
    • Newsletter
    • Code of conduct
    • AI policy
  • Blog
  • Sponsor

Supported by

© 2026 Hanakai team