Project

schemacop

0.01
A long-lived project that still receives updates
Schemacop validates ruby structures consisting of nested hashes and arrays against simple schema definitions.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Runtime

 Project Readme

Ruby Gem Version

Schemacop

Schemacop validates ruby structures consisting of nested hashes and arrays against schema definitions described by a simple DSL. It is also able to generate JSON Schema compliant JSON output, i.e. for use in conjunction with OpenAPI.

Compatibility

Schemacop is tested with the following ruby versions:

  • 2.6.2
  • 2.7.1
  • 3.0.1
  • 3.1.0
  • 3.2.0
  • 3.3.0

Other ruby versions might work but are not covered by our automated tests.

Basic example

schema = Schemacop::Schema3.new :hash do
  scm :group do
    str! :name
  end
  str! :name
  int? :age, minimum: 21
  ary! :groups do
    list :reference, path: :group
  end
end

schema.validate!(
  name: 'John Doe',
  age: 42,
  groups: [
    { name: 'Group 1' },
    { name: 'Group 2' }
  ]
)

Installation

To install the Schemacop gem:

$ gem install schemacop

To install it using bundler (recommended for any application), add it to your Gemfile:

gem 'schemacop', '>= 3.0.0'

Schema specification

The actual schema definition depends on the schema version you're using. Schemacop 3 supports version 3 and also the legacy version 2 for backwards compatibility. For version 1, you need to use the 1.x versions of schemacop.

JSON generation

Using the method as_json on any V3 schema will produce a JSON schema compliant to the JSON Schema standard.

Schemacop::Schema3.new :hash do
  str! :name
end.as_json

# Will result in
{
  type: :object,
  properties: {
    name: { type: :string }
  },
  additionalProperties: false,
  required: [:name]
}

On the resulting data structure, you can use to_json to convert it into an actual JSON string.

Exceptions

Schemacop will throw one of the following checked exceptions:

  • Schemacop::Exceptions::InvalidSchemaError

    This exception is thrown when the given schema definition format is invalid.

  • Schemacop::Exceptions::ValidationError

    This exception is thrown when the given data does not comply with the given schema definition.

Development

To run tests:

  • Check out the source

  • Run bundle install

  • Run bundle exec rake test to run all tests

  • Run bundle exec rake test TEST=test/unit/some/file.rb to run a single test file

Copyright

Copyright © 2016 - 2024 Sitrox. See LICENSE for further details.