CrSerializer

JSON (and later YAML) serializer and validator inspired by JMS Serializer Annotations and Symphony Validation Constraint Annotations. Built on top of the standard library functionality of JSON::Serializable.

Goals

Roadmap

Installation

Add this to your application's shard.yml:

dependencies:
  CrSerializer:
    github: Blacksmoke16/CrSerializer

Usage

require "CrSerializer"

# Raise an exception if a validation test fails
@[CrSerializer::Options(raise_on_invalid: true)]
class Example
  include CrSerializer::Json

  property name : String
  
  # Validates on deserialization that value is >= 0 AND not nil
  @[CrSerializer::Assertions(greater_than_or_equal: 0, nil: false)] 
  property age : Int32
  
  # Do not inclue password on serialize, nor set it on deserialize
  @[CrSerializer::Json::Options(expose: false, readonly: true)]
  property password : String?
end

json_str = %({"name": "John", "age": 22, "password": "passw0rd!"})

example = Example.deserialize json_str
example.name # => "John"
example.age # => 22

# password is nil because it was set to `readonly`
example.password # => nil

example.password = "passw0rd!"

example.password # => "passw0rd!"

# password is not serialized because `expose` was set to false
example.serialize # => {"name":"John","age":22}


json_str = %({"name": "John", "age": -1, "password": "passw0rd!"})
# raises an exepction due to `raise_on_invalid` being true
example2 = Example.deserialize json_str # => Unhandled exception: Validation tests failed (CrSerializer::ValidationException)

Instance Variables properties

Class properties

Validations

Generic

Numeric

String

Array

Date

Contributing

  1. Fork it (https://github.com/Blacksmoke16/CrSerializer/fork)
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create a new Pull Request

Contributors