Class: Spurline::Session::Serializer

Inherits:
Object
  • Object
show all
Defined in:
lib/spurline/session/serializer.rb

Overview

JSON serializer/deserializer for persisted sessions. Includes a format_version field for forward-compatible migrations.

Constant Summary collapse

FORMAT_VERSION =
1
CONTENT_TYPE =
"Spurline::Security::Content"
TIME_TYPE =
"Time"
SYMBOL_TYPE =
"Symbol"

Instance Method Summary collapse

Instance Method Details

#from_json(json, store:) ⇒ Object



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/spurline/session/serializer.rb', line 23

def from_json(json, store:)
  payload = JSON.parse(json)
  unless payload.is_a?(Hash)
    raise Spurline::SessionDeserializationError, "Session payload must be a JSON object."
  end

  version = payload.fetch("format_version")
  unless version == FORMAT_VERSION
    raise Spurline::SessionDeserializationError,
      "Unsupported session format version: #{version.inspect}."
  end

  session_data = deserialize_session(payload.fetch("session"))
  Session.restore(session_data, store: store)
rescue Spurline::SessionDeserializationError
  raise
rescue JSON::ParserError, KeyError, TypeError, NoMethodError, ArgumentError, Spurline::ConfigurationError => e
  raise Spurline::SessionDeserializationError, "Failed to deserialize session payload: #{e.message}"
end

#to_json(session) ⇒ Object



16
17
18
19
20
21
# File 'lib/spurline/session/serializer.rb', line 16

def to_json(session)
  JSON.generate(
    format_version: FORMAT_VERSION,
    session: serialize_session(session)
  )
end