0.0
No release in over a year
Validate RSMP message against RSMP JSON Schema. Support validating against core and different SXL's, in different versions.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

~> 13.0
~> 3.11.0

Runtime

~> 0.2.21
 Project Readme

RSMP Schemer

Deprecated: Validation is now handled by rsmp_scheme.

Gem for validating RSMP messages against RSMP JSON schemas.

Background

When communicating via RSMP, the version of core and SXL used is negotiated during connection, and can therefore vary depending on who you communicate with.

To validate against the correct version of the JSON schema, all relevant versions need to be avaiable, so you can

The actual JSON scheme files are maintained in the repo https://github.com/rsmp-nordic/rsmp_schema. Different version of core and SXLs are mainted in different branches.

Each of these branches are included here as submodules, so you can choose which core and SXL version you want to validate against.

The actual validation is performed with the json_schemer gem.

Usage

Use Schemer#validate to validate against a particular schema type and version.

Validating against core and sxl schemas is done separately. The core schema validates everything that's common to all types of equipment/SXLs. SXL schemas validate the mesage types specific to a type of equipment.

For example, the core schema will validate that a CommandRequest has all the correct attributes, e.g. that there is a command code. The SXL schema will validate the content of the attributes. e.g. that the command code represents a valid command.

If there are validation errors and error will be returned, pointing to the offendig items. The errors come from the json_schemer gem.

Nil means there are no errors, ie. the message is valid.

Example, validating an an AggregatedStatusRequest:

message = {
  "mType" => "rSMsg",
  "type" => "AggregatedStatusRequest",
  "mId" => "E68A0010-C336-41ac-BD58-5C80A72C7092",
  "cId" => "AB+84001=860SG001"
}

# validing using core 3.1.4 will return an error, because the message
# type AggregatedStatusRequest was not introduced until 3.1.5:
errors = RSMP::Schemer.validate(message, core: '3.1.4')
# => [["/type", "enum", nil]]

# The first item '/type' indicate the field with error
# The second item 'enum' indicate an invalid enum valiue

# validating using core 3.1.5 will succeeed, ie. return no errors:
errors = RSMP::Schemer.validate(message, core: '3.1.5')
# => nil

# validate against several schemas:
errors = RSMP::Schemer.validate(message, core: '3.1.5', tlc: '1.0.15')
# => nil