File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -6,20 +6,21 @@ module Persistence
66 class CookieAdapter
77
88 def initialize ( context )
9- @cookies = context . send ( :cookies )
9+ @request , @response = context . request , context . response
10+ @cookies = @request . cookies
1011 @expires = Time . now + cookie_length_config
1112 end
1213
1314 def []( key )
14- hash [ key ]
15+ hash [ key . to_s ]
1516 end
1617
1718 def []=( key , value )
18- set_cookie ( hash . merge ( key => value ) )
19+ set_cookie ( hash . merge! ( key . to_s => value ) )
1920 end
2021
2122 def delete ( key )
22- set_cookie ( hash . tap { |h | h . delete ( key ) } )
23+ set_cookie ( hash . tap { |h | h . delete ( key . to_s ) } )
2324 end
2425
2526 def keys
@@ -28,22 +29,25 @@ def keys
2829
2930 private
3031
31- def set_cookie ( value )
32- @cookies [ :split ] = {
33- :value => JSON . generate ( value ) ,
34- :expires => @expires
35- }
32+ def set_cookie ( value = { } )
33+ @response . set_cookie :split . to_s , default_options . merge ( value : JSON . generate ( value ) )
34+ end
35+
36+ def default_options
37+ { expires : @expires , path : '/' }
3638 end
3739
3840 def hash
39- if @cookies [ :split ]
40- begin
41- JSON . parse ( @cookies [ :split ] )
42- rescue JSON ::ParserError
41+ @hash ||= begin
42+ if cookies = @cookies [ :split . to_s ]
43+ begin
44+ JSON . parse ( cookies )
45+ rescue JSON ::ParserError
46+ { }
47+ end
48+ else
4349 { }
4450 end
45- else
46- { }
4751 end
4852 end
4953
Original file line number Diff line number Diff line change 11# frozen_string_literal: true
22require "spec_helper"
3+ require 'rack/test'
34
45describe Split ::Persistence ::CookieAdapter do
56
6- let ( :context ) { double ( :cookies => CookiesMock . new ) }
7+ let ( :env ) { Rack ::MockRequest . env_for ( "http://example.com:8080/" ) }
8+ let ( :request ) { Rack ::Request . new ( env ) }
9+ let ( :response ) { Rack ::MockResponse . new ( 200 , { } , "" ) }
10+ let ( :context ) { double ( request : request , response : response ) }
711 subject { Split ::Persistence ::CookieAdapter . new ( context ) }
812
913 describe "#[] and #[]=" do
3034 end
3135
3236 it "handles invalid JSON" do
33- context . cookies [ :split ] = { :value => '{"foo":2,' , :expires => Time . now }
37+ context . request . cookies [ :split ] = { :value => '{"foo":2,' , :expires => Time . now }
3438 expect ( subject [ "my_key" ] ) . to be_nil
3539 subject [ "my_key" ] = "my_value"
3640 expect ( subject [ "my_key" ] ) . to eq ( "my_value" )
You can’t perform that action at this time.
0 commit comments