Module: Pigeon::Serializer
- Defined in:
- lib/pigeon/serializer.rb
Overview
Serializer module for handling payload serialization and validation
Defined Under Namespace
Classes: DeserializationError, SerializationError, ValidationError
Class Method Summary collapse
-
.deserialize(json_string, symbolize_names: false) ⇒ Hash, Array
Deserialize a JSON string to a Ruby object.
-
.serialize(payload) ⇒ String
Serialize a payload to JSON.
-
.validate(payload, schema) ⇒ Boolean
Validate a payload against a JSON schema.
-
.validate_with_registered_schema(payload, schema_name) ⇒ Boolean
Validate a payload against a registered schema.
Class Method Details
.deserialize(json_string, symbolize_names: false) ⇒ Hash, Array
Deserialize a JSON string to a Ruby object
24 25 26 27 28 29 30 31 |
# File 'lib/pigeon/serializer.rb', line 24 def self.deserialize(json_string, symbolize_names: false) return json_string unless json_string.is_a?(String) return {} if json_string.empty? ::JSON.parse(json_string, symbolize_names: symbolize_names) rescue StandardError => e raise DeserializationError, "Failed to deserialize JSON: #{e.}" end |
.serialize(payload) ⇒ String
Serialize a payload to JSON
12 13 14 15 16 17 18 |
# File 'lib/pigeon/serializer.rb', line 12 def self.serialize(payload) return payload if payload.is_a?(String) ::JSON.generate(payload) rescue StandardError => e raise SerializationError, "Failed to serialize payload: #{e.}" end |
.validate(payload, schema) ⇒ Boolean
Validate a payload against a JSON schema
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/pigeon/serializer.rb', line 38 def self.validate(payload, schema) # Skip validation if json-schema gem is not available unless defined?(::JSON::Validator) Pigeon.config.logger.warn("json-schema gem not available, skipping validation") return true end # Parse the payload if it's a string payload_obj = payload.is_a?(String) ? deserialize(payload) : payload # Parse the schema if it's a string schema_obj = schema.is_a?(String) ? deserialize(schema) : schema # Validate the payload against the schema ::JSON::Validator.validate!(schema_obj, payload_obj) true rescue ::JSON::Schema::ValidationError => e raise ValidationError, "Payload validation failed: #{e.}" rescue StandardError => e raise ValidationError, "Schema validation error: #{e.}" end |
.validate_with_registered_schema(payload, schema_name) ⇒ Boolean
Validate a payload against a registered schema
65 66 67 68 69 70 |
# File 'lib/pigeon/serializer.rb', line 65 def self.validate_with_registered_schema(payload, schema_name) schema = Pigeon.config.schemas[schema_name.to_sym] raise ValidationError, "Schema '#{schema_name}' not found" unless schema validate(payload, schema) end |