Class: ViewComponentReducible::Adapter::Redis
- Defined in:
- lib/view_component_reducible/adapter/redis.rb
Overview
Redis adapter storing envelope outside of the session.
Constant Summary collapse
- DEFAULT_TTL =
900- DEFAULT_NAMESPACE =
'vcr'
Class Method Summary collapse
Instance Method Summary collapse
- #dump(envelope, request:) ⇒ String
-
#initialize(secret:, redis: nil, redis_url: nil, redis_ttl: DEFAULT_TTL, redis_namespace: DEFAULT_NAMESPACE) ⇒ Redis
constructor
A new instance of Redis.
- #load(request:) ⇒ Hash
- #verifier ⇒ ActiveSupport::MessageVerifier
Constructor Details
#initialize(secret:, redis: nil, redis_url: nil, redis_ttl: DEFAULT_TTL, redis_namespace: DEFAULT_NAMESPACE) ⇒ Redis
Returns a new instance of Redis.
24 25 26 27 28 29 |
# File 'lib/view_component_reducible/adapter/redis.rb', line 24 def initialize(secret:, redis: nil, redis_url: nil, redis_ttl: DEFAULT_TTL, redis_namespace: DEFAULT_NAMESPACE) super(secret:) @redis = redis || build_client(redis_url) @redis_ttl = redis_ttl @redis_namespace = redis_namespace end |
Class Method Details
.state_param_name ⇒ Object
15 16 17 |
# File 'lib/view_component_reducible/adapter/redis.rb', line 15 def self.state_param_name 'vcr_state_key' end |
Instance Method Details
#dump(envelope, request:) ⇒ String
39 40 41 42 43 44 |
# File 'lib/view_component_reducible/adapter/redis.rb', line 39 def dump(envelope, request:) _ = request key = SecureRandom.hex(16) write(key, JSON.generate(envelope)) verifier.generate({ 'k' => key }) end |
#load(request:) ⇒ Hash
48 49 50 51 52 53 54 55 56 |
# File 'lib/view_component_reducible/adapter/redis.rb', line 48 def load(request:) signed = request.params.fetch(self.class.state_param_name) payload = verifier.verify(signed) key = payload.fetch('k') raw = @redis.get(redis_key(key)) raise KeyError, "Missing envelope for #{key}" if raw.nil? JSON.parse(raw) end |
#verifier ⇒ ActiveSupport::MessageVerifier
32 33 34 |
# File 'lib/view_component_reducible/adapter/redis.rb', line 32 def verifier @verifier ||= ActiveSupport::MessageVerifier.new(@secret, digest: 'SHA256', serializer: JSON) end |