Module: Evilution::Session::Schema
- Defined in:
- lib/evilution/session/schema.rb
Constant Summary collapse
- CURRENT_VERSION =
1
Class Method Summary collapse
- .location_clause(source) ⇒ Object
- .raise_future!(value, source) ⇒ Object
- .raise_invalid!(value, source) ⇒ Object
-
.validate!(data, source: nil) ⇒ Object
Validates the schema_version of a parsed session JSON Hash.
Class Method Details
.location_clause(source) ⇒ Object
41 42 43 |
# File 'lib/evilution/session/schema.rb', line 41 def location_clause(source) source ? " at #{source}" : "" end |
.raise_future!(value, source) ⇒ Object
34 35 36 37 38 39 |
# File 'lib/evilution/session/schema.rb', line 34 def raise_future!(value, source) raise Evilution::Error, "session file#{location_clause(source)} has schema_version #{value}, " \ "newer than this evilution gem supports (current: #{CURRENT_VERSION}). " \ "Upgrade the evilution gem." end |
.raise_invalid!(value, source) ⇒ Object
29 30 31 32 |
# File 'lib/evilution/session/schema.rb', line 29 def raise_invalid!(value, source) raise Evilution::Error, "invalid schema_version #{value.inspect}#{location_clause(source)}: must be a positive Integer" end |
.validate!(data, source: nil) ⇒ Object
Validates the schema_version of a parsed session JSON Hash.
Sessions written before schema_version was introduced (key absent entirely) are treated as CURRENT_VERSION — the JSON shape that defined version 1. A key that is explicitly present but null/non-positive/non- integer is rejected as invalid; “missing” and “corrupted” must not collapse into the same lenient bucket. A schema_version newer than this gem supports raises Evilution::Error with an explicit “upgrade the gem” message so future writers cannot be silently misread.
19 20 21 22 23 24 25 26 27 |
# File 'lib/evilution/session/schema.rb', line 19 def validate!(data, source: nil) return unless data.key?("schema_version") || data.key?(:schema_version) raw = data.fetch("schema_version") { data[:schema_version] } raise_invalid!(raw, source) unless raw.is_a?(Integer) && raw.positive? return if raw <= CURRENT_VERSION raise_future!(raw, source) end |