macmillan-utils 1.0.30 → 1.0.31

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 264d16416f0255bd1acd4e7726ba9b8cac771965
4
- data.tar.gz: 0faf3e3ed4d047880dadf0b35ed94491e59f7215
3
+ metadata.gz: 7ae6079821a9d8aeea074790ab1ae354fa3b6554
4
+ data.tar.gz: e444d8c35eb98e1156f91c04559bfda77fc063d0
5
5
  SHA512:
6
- metadata.gz: d497fef0654cefb7b49eb8a4ff481983b3e926dd47df8ae626ea33de97a128556f27548ec7d110f9d20b5f35bc7cf185f3ffff5b6e93504cb7dd442023a0ee49
7
- data.tar.gz: a2770670c0a9ef6d84b04746882f138a4d2b7a7422370582c502d8ae5f7b2af169ac756bd95a4fe143cdf2c50b5fbb8b7160b3db93b0939646733af34c40d914
6
+ metadata.gz: d3a50baa236a6b1b7feb48bd270cfd676101c1967cda53a2fb6fb2f0857811888393225eb03987e56bd7c4b053b18afaa45225693b1def2a62467763911b1c5a
7
+ data.tar.gz: f62ee633295943b1aa944d6da3e87605038977096ad667dc57182dbdeed4db24c68b4f5796303fd8e3db779e698052e3bb9af02f7d2bc871580adb501efd506e
@@ -22,7 +22,7 @@ module Macmillan
22
22
  end
23
23
 
24
24
  class CallHandler
25
- attr_reader :app, :request, :user_env_key, :user_id_method, :cookie_key
25
+ attr_reader :app, :request, :user_env_key, :user_id_method, :cookie_key, :rack_errors, :uuid_is_new_key
26
26
 
27
27
  def initialize(env, app, user_env_key, user_id_method, cookie_key)
28
28
  @app = app
@@ -30,10 +30,21 @@ module Macmillan
30
30
  @user_env_key = user_env_key
31
31
  @user_id_method = user_id_method
32
32
  @cookie_key = cookie_key
33
+ @rack_errors = env['rack.errors']
34
+ @uuid_is_new_key = "#{cookie_key}_is_new"
33
35
 
34
- env[cookie_key] = final_user_uuid
36
+ env[cookie_key] = final_user_uuid
37
+ env[uuid_is_new_key] = true if uuid_is_new?
35
38
  end
36
39
 
40
+ def finish
41
+ save_cookie if store_cookie?
42
+ clean_old_cookies
43
+ response.finish
44
+ end
45
+
46
+ private
47
+
37
48
  def response
38
49
  @response ||= begin
39
50
  status, headers, body = app.call(request.env)
@@ -41,26 +52,16 @@ module Macmillan
41
52
  end
42
53
  end
43
54
 
44
- def finish
45
- save_cookie if store_cookie?
46
- clean_old_cookies
47
- response.finish
48
- end
49
-
50
55
  def user
51
56
  request.env[user_env_key]
52
57
  end
53
58
 
59
+ def user_hexdigest
60
+ Digest::SHA1.hexdigest(user.public_send(user_id_method).to_s) if user
61
+ end
62
+
54
63
  def final_user_uuid
55
- @final_user_uuid ||= begin
56
- if user
57
- Digest::SHA1.hexdigest(user.public_send(user_id_method).to_s)
58
- elsif uuid_from_cookies
59
- uuid_from_cookies
60
- else
61
- SecureRandom.uuid
62
- end
63
- end
64
+ @final_user_uuid ||= user_hexdigest || uuid_from_cookies || SecureRandom.uuid
64
65
  end
65
66
 
66
67
  def uuid_from_cookies
@@ -70,6 +71,7 @@ module Macmillan
70
71
  def store_cookie?
71
72
  final_user_uuid != uuid_from_cookies
72
73
  end
74
+ alias_method :uuid_is_new?, :store_cookie?
73
75
 
74
76
  def save_cookie
75
77
  cookie_value = { value: final_user_uuid, path: '/', expires: DateTime.now.next_year.to_time }
@@ -24,6 +24,11 @@ RSpec.describe Macmillan::Utils::Middleware::Uuid do
24
24
  expect(app).to receive(:call).with(hash_including('user.uuid' => user_uuid)).and_return(app_return)
25
25
  _status, _headers, _body = subject.call(request.env)
26
26
  end
27
+
28
+ it 'tells following rack app the user_uuid is new' do
29
+ expect(app).to receive(:call).with(hash_including('user.uuid_is_new' => true)).and_return(app_return)
30
+ _status, _headers, _body = subject.call(request.env)
31
+ end
27
32
  end
28
33
 
29
34
  context 'who also has a randomly assigned user_uuid cookie (from a previous non-authenticated session)' do
@@ -35,6 +40,11 @@ RSpec.describe Macmillan::Utils::Middleware::Uuid do
35
40
  _status, headers, _body = subject.call(request.env)
36
41
  expect(headers['Set-Cookie']).to include("user.uuid=#{user_uuid}")
37
42
  end
43
+
44
+ it 'tells following rack app the user_uuid is new' do
45
+ expect(app).to receive(:call).with(hash_including('user.uuid_is_new' => true)).and_return(app_return)
46
+ _status, _headers, _body = subject.call(request.env)
47
+ end
38
48
  end
39
49
  end
40
50
 
@@ -54,6 +64,11 @@ RSpec.describe Macmillan::Utils::Middleware::Uuid do
54
64
  _status, headers, _body = subject.call(request.env)
55
65
  expect(headers['Set-Cookie']).to include('user.uuid=wibble')
56
66
  end
67
+
68
+ it 'tells following rack app the user_uuid is new' do
69
+ expect(app).to receive(:call).with(hash_including('user.uuid_is_new' => true)).and_return(app_return)
70
+ _status, _headers, _body = subject.call(request.env)
71
+ end
57
72
  end
58
73
 
59
74
  context 'who has visited before and has a user_uuid cookie' do
@@ -70,6 +85,13 @@ RSpec.describe Macmillan::Utils::Middleware::Uuid do
70
85
  _status, headers, _body = subject.call(request.env)
71
86
  expect(headers['Set-Cookie']).to be_nil
72
87
  end
88
+
89
+ it 'does not tell following rack app the user_uuid is new' do
90
+ expect(app).to receive(:call) do |args|
91
+ expect(args).not_to have_key('user.uuid_is_new')
92
+ end.and_return(app_return)
93
+ _status, _headers, _body = subject.call(request.env)
94
+ end
73
95
  end
74
96
  end
75
97
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: macmillan-utils
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.30
4
+ version: 1.0.31
5
5
  platform: ruby
6
6
  authors:
7
7
  - Springer Nature
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-08-03 00:00:00.000000000 Z
11
+ date: 2016-08-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler