Class: ViewComponentReducible::Adapter::Session

Inherits:
Base
  • Object
show all
Defined in:
lib/view_component_reducible/adapter/session.rb

Overview

Session adapter storing envelope in server session.

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Base

#initialize

Constructor Details

This class inherits a constructor from ViewComponentReducible::Adapter::Base

Class Method Details

.state_param_nameObject



11
12
13
# File 'lib/view_component_reducible/adapter/session.rb', line 11

def self.state_param_name
  'vcr_state_key'
end

Instance Method Details

#dump(envelope, request:) ⇒ String

Parameters:

Returns:



23
24
25
26
27
28
29
30
# File 'lib/view_component_reducible/adapter/session.rb', line 23

def dump(envelope, request:)
  key = SecureRandom.hex(16)
  session = request.session
  session_keys = session.respond_to?(:keys) ? session.keys : session.to_hash.keys
  session_keys.grep(/\Avcr:/).each { |session_key| session.delete(session_key) }
  session["vcr:#{key}"] = envelope
  verifier.generate({ 'k' => key })
end

#load(request:) ⇒ Hash

Parameters:

Returns:



34
35
36
37
38
39
# File 'lib/view_component_reducible/adapter/session.rb', line 34

def load(request:)
  signed = request.params.fetch(self.class.state_param_name)
  payload = verifier.verify(signed)
  key = payload.fetch('k')
  request.session.fetch("vcr:#{key}")
end

#verifierActiveSupport::MessageVerifier

Returns:



16
17
18
# File 'lib/view_component_reducible/adapter/session.rb', line 16

def verifier
  @verifier ||= ActiveSupport::MessageVerifier.new(@secret, digest: 'SHA256', serializer: JSON)
end