rails_http_preload 0.1.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1ab167b50cca5eecf4e8b289c407f12cd14fd96b343bd4562276c797fc8d0b7f
4
- data.tar.gz: 9fc88a983e9e44f7c03ee37e8eb915c8f7766ad63410f8e18fc82b1279fbb855
3
+ metadata.gz: 61c3fa6d2a963768a57379057000200b6cbd12dcce2dd7b1f196025ddd293ac9
4
+ data.tar.gz: 6e02d5a4bef38c2e0b10767e0a0b9e3ca497e64ace257e2d21181b458156746f
5
5
  SHA512:
6
- metadata.gz: 5ac3bb7fd8268eba569957770020c54fde8b67409d3376c41f6ac30e4373eb64e73636047338dd47dcc684b1f33da16af2d84e2171b8ec7d84a1105ebd72e180
7
- data.tar.gz: 28f2a8d1585a17d899279ffab85979d5eb4744af9c1f6cfdf3ea98008ae47320c9d154bc46d224a0f0be056614b4f9951a8c1323eb82d273cb38da1191363b9b
6
+ metadata.gz: 5c9a33394ef06842c7e75bca1a91f5aa3c043589acae80ebfd246d5e4d4b0417b704bce8af2d5178159966db42f1302e4460f3cfbc12223e0043f454b60af9c7
7
+ data.tar.gz: b34234412e0b00c63ff2c33ef838fb0b7b571200f80650e592a8dbebcc7d4e84aba16db0c90795f5b5b868d5c0152b59e8ae23361be17cf5471a19da01f389fd
data/CHANGELOG.md CHANGED
@@ -1,5 +1,14 @@
1
1
  ## [Unreleased]
2
2
 
3
+ ## [0.3.0] - 2022-05-29
4
+
5
+ - Removed unnecessary require statement
6
+
7
+ ## [0.2.0] - 2022-05-29
8
+
9
+ - Bugfix: blank asset hosts should not add a blank link header
10
+ - Bugfix: don't overwrite existing link headers in responses
11
+
3
12
  ## [0.1.0] - 2022-11-21
4
13
 
5
14
  - Initial release
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rails_http_preload (0.1.0)
4
+ rails_http_preload (0.3.0)
5
5
  actionpack
6
6
  actionview
7
7
  rails
@@ -9,86 +9,86 @@ PATH
9
9
  GEM
10
10
  remote: https://rubygems.org/
11
11
  specs:
12
- actioncable (7.0.4)
13
- actionpack (= 7.0.4)
14
- activesupport (= 7.0.4)
12
+ actioncable (7.0.5)
13
+ actionpack (= 7.0.5)
14
+ activesupport (= 7.0.5)
15
15
  nio4r (~> 2.0)
16
16
  websocket-driver (>= 0.6.1)
17
- actionmailbox (7.0.4)
18
- actionpack (= 7.0.4)
19
- activejob (= 7.0.4)
20
- activerecord (= 7.0.4)
21
- activestorage (= 7.0.4)
22
- activesupport (= 7.0.4)
17
+ actionmailbox (7.0.5)
18
+ actionpack (= 7.0.5)
19
+ activejob (= 7.0.5)
20
+ activerecord (= 7.0.5)
21
+ activestorage (= 7.0.5)
22
+ activesupport (= 7.0.5)
23
23
  mail (>= 2.7.1)
24
24
  net-imap
25
25
  net-pop
26
26
  net-smtp
27
- actionmailer (7.0.4)
28
- actionpack (= 7.0.4)
29
- actionview (= 7.0.4)
30
- activejob (= 7.0.4)
31
- activesupport (= 7.0.4)
27
+ actionmailer (7.0.5)
28
+ actionpack (= 7.0.5)
29
+ actionview (= 7.0.5)
30
+ activejob (= 7.0.5)
31
+ activesupport (= 7.0.5)
32
32
  mail (~> 2.5, >= 2.5.4)
33
33
  net-imap
34
34
  net-pop
35
35
  net-smtp
36
36
  rails-dom-testing (~> 2.0)
37
- actionpack (7.0.4)
38
- actionview (= 7.0.4)
39
- activesupport (= 7.0.4)
40
- rack (~> 2.0, >= 2.2.0)
37
+ actionpack (7.0.5)
38
+ actionview (= 7.0.5)
39
+ activesupport (= 7.0.5)
40
+ rack (~> 2.0, >= 2.2.4)
41
41
  rack-test (>= 0.6.3)
42
42
  rails-dom-testing (~> 2.0)
43
43
  rails-html-sanitizer (~> 1.0, >= 1.2.0)
44
- actiontext (7.0.4)
45
- actionpack (= 7.0.4)
46
- activerecord (= 7.0.4)
47
- activestorage (= 7.0.4)
48
- activesupport (= 7.0.4)
44
+ actiontext (7.0.5)
45
+ actionpack (= 7.0.5)
46
+ activerecord (= 7.0.5)
47
+ activestorage (= 7.0.5)
48
+ activesupport (= 7.0.5)
49
49
  globalid (>= 0.6.0)
50
50
  nokogiri (>= 1.8.5)
51
- actionview (7.0.4)
52
- activesupport (= 7.0.4)
51
+ actionview (7.0.5)
52
+ activesupport (= 7.0.5)
53
53
  builder (~> 3.1)
54
54
  erubi (~> 1.4)
55
55
  rails-dom-testing (~> 2.0)
56
56
  rails-html-sanitizer (~> 1.1, >= 1.2.0)
57
- activejob (7.0.4)
58
- activesupport (= 7.0.4)
57
+ activejob (7.0.5)
58
+ activesupport (= 7.0.5)
59
59
  globalid (>= 0.3.6)
60
- activemodel (7.0.4)
61
- activesupport (= 7.0.4)
62
- activerecord (7.0.4)
63
- activemodel (= 7.0.4)
64
- activesupport (= 7.0.4)
65
- activestorage (7.0.4)
66
- actionpack (= 7.0.4)
67
- activejob (= 7.0.4)
68
- activerecord (= 7.0.4)
69
- activesupport (= 7.0.4)
60
+ activemodel (7.0.5)
61
+ activesupport (= 7.0.5)
62
+ activerecord (7.0.5)
63
+ activemodel (= 7.0.5)
64
+ activesupport (= 7.0.5)
65
+ activestorage (7.0.5)
66
+ actionpack (= 7.0.5)
67
+ activejob (= 7.0.5)
68
+ activerecord (= 7.0.5)
69
+ activesupport (= 7.0.5)
70
70
  marcel (~> 1.0)
71
71
  mini_mime (>= 1.1.0)
72
- activesupport (7.0.4)
72
+ activesupport (7.0.5)
73
73
  concurrent-ruby (~> 1.0, >= 1.0.2)
74
74
  i18n (>= 1.6, < 2)
75
75
  minitest (>= 5.1)
76
76
  tzinfo (~> 2.0)
77
77
  ast (2.4.2)
78
78
  builder (3.2.4)
79
- concurrent-ruby (1.1.10)
79
+ concurrent-ruby (1.2.2)
80
80
  crass (1.0.6)
81
81
  date (3.3.3)
82
82
  erubi (1.12.0)
83
- globalid (1.0.0)
83
+ globalid (1.1.0)
84
84
  activesupport (>= 5.0)
85
- i18n (1.12.0)
85
+ i18n (1.13.0)
86
86
  concurrent-ruby (~> 1.0)
87
87
  json (2.6.3)
88
- loofah (2.19.1)
88
+ loofah (2.21.3)
89
89
  crass (~> 1.0.2)
90
- nokogiri (>= 1.5.9)
91
- mail (2.8.0)
90
+ nokogiri (>= 1.12.0)
91
+ mail (2.8.1)
92
92
  mini_mime (>= 0.1.1)
93
93
  net-imap
94
94
  net-pop
@@ -96,8 +96,7 @@ GEM
96
96
  marcel (1.0.2)
97
97
  method_source (1.0.0)
98
98
  mini_mime (1.1.2)
99
- mini_portile2 (2.8.1)
100
- minitest (5.16.3)
99
+ minitest (5.18.0)
101
100
  net-imap (0.3.4)
102
101
  date
103
102
  net-protocol
@@ -107,39 +106,41 @@ GEM
107
106
  timeout
108
107
  net-smtp (0.3.3)
109
108
  net-protocol
110
- nio4r (2.5.8)
111
- nokogiri (1.13.10)
112
- mini_portile2 (~> 2.8.0)
109
+ nio4r (2.5.9)
110
+ nokogiri (1.15.2-arm64-darwin)
111
+ racc (~> 1.4)
112
+ nokogiri (1.15.2-x86_64-linux)
113
113
  racc (~> 1.4)
114
114
  parallel (1.22.1)
115
115
  parser (3.1.3.0)
116
116
  ast (~> 2.4.1)
117
117
  racc (1.6.2)
118
- rack (2.2.5)
119
- rack-test (2.0.2)
118
+ rack (2.2.7)
119
+ rack-test (2.1.0)
120
120
  rack (>= 1.3)
121
- rails (7.0.4)
122
- actioncable (= 7.0.4)
123
- actionmailbox (= 7.0.4)
124
- actionmailer (= 7.0.4)
125
- actionpack (= 7.0.4)
126
- actiontext (= 7.0.4)
127
- actionview (= 7.0.4)
128
- activejob (= 7.0.4)
129
- activemodel (= 7.0.4)
130
- activerecord (= 7.0.4)
131
- activestorage (= 7.0.4)
132
- activesupport (= 7.0.4)
121
+ rails (7.0.5)
122
+ actioncable (= 7.0.5)
123
+ actionmailbox (= 7.0.5)
124
+ actionmailer (= 7.0.5)
125
+ actionpack (= 7.0.5)
126
+ actiontext (= 7.0.5)
127
+ actionview (= 7.0.5)
128
+ activejob (= 7.0.5)
129
+ activemodel (= 7.0.5)
130
+ activerecord (= 7.0.5)
131
+ activestorage (= 7.0.5)
132
+ activesupport (= 7.0.5)
133
133
  bundler (>= 1.15.0)
134
- railties (= 7.0.4)
134
+ railties (= 7.0.5)
135
135
  rails-dom-testing (2.0.3)
136
136
  activesupport (>= 4.2.0)
137
137
  nokogiri (>= 1.6)
138
- rails-html-sanitizer (1.4.4)
139
- loofah (~> 2.19, >= 2.19.1)
140
- railties (7.0.4)
141
- actionpack (= 7.0.4)
142
- activesupport (= 7.0.4)
138
+ rails-html-sanitizer (1.6.0)
139
+ loofah (~> 2.21)
140
+ nokogiri (~> 1.14)
141
+ railties (7.0.5)
142
+ actionpack (= 7.0.5)
143
+ activesupport (= 7.0.5)
143
144
  method_source
144
145
  rake (>= 12.2)
145
146
  thor (~> 1.0)
@@ -161,15 +162,15 @@ GEM
161
162
  rubocop-ast (1.24.1)
162
163
  parser (>= 3.1.1.0)
163
164
  ruby-progressbar (1.11.0)
164
- thor (1.2.1)
165
- timeout (0.3.1)
166
- tzinfo (2.0.5)
165
+ thor (1.2.2)
166
+ timeout (0.3.2)
167
+ tzinfo (2.0.6)
167
168
  concurrent-ruby (~> 1.0)
168
169
  unicode-display_width (2.3.0)
169
170
  websocket-driver (0.7.5)
170
171
  websocket-extensions (>= 0.1.0)
171
172
  websocket-extensions (0.1.5)
172
- zeitwerk (2.6.6)
173
+ zeitwerk (2.6.8)
173
174
 
174
175
  PLATFORMS
175
176
  arm64-darwin-22
data/README.md CHANGED
@@ -47,7 +47,7 @@ In the best case scenario, your observed Largest Contentful Paint times should b
47
47
 
48
48
  ### Worst Case Scenario
49
49
 
50
- In the worst case, nothing happens. For example, your CDN doesn't support early hints. No problem, you've just added ~1kb of HTTP headers to your responses, it's basically a no-op. You cannot really create new bugs or bad behavior by including this header.
50
+ In the worst case, nothing happens. For example, your CDN doesn't support early hints. No problem, you've just added a few bytes of HTTP headers to your responses, it's basically a no-op. You cannot really create new bugs or bad behavior by including this header.
51
51
  ## Installation
52
52
 
53
53
  Add this line to your application's Gemfile:
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "action_view/helpers/asset_url_helper"
4
- require "active_support/concern"
5
3
  require "action_dispatch"
6
4
 
7
5
  module RailsHttpPreload
@@ -13,7 +11,7 @@ module RailsHttpPreload
13
11
  def call(env)
14
12
  response = @app.call(env)
15
13
 
16
- response[1]["Link"] = preconnect_header if required?(response, ActionDispatch::Request.new(env))
14
+ response[1]["Link"] = preconnect_header(response) if required?(response, ActionDispatch::Request.new(env))
17
15
 
18
16
  response
19
17
  end
@@ -21,8 +19,7 @@ module RailsHttpPreload
21
19
  # TODO: Should we just add it to every response anyway and let the browser
22
20
  # figure it out?
23
21
  def required?(response, request)
24
- html?(response) &&
25
- !already_connected?(request)
22
+ config.asset_host.present? && html?(response) && !already_connected?(request)
26
23
  end
27
24
 
28
25
  # Adding this header to, for example, a JSON response would be pointless
@@ -31,18 +28,26 @@ module RailsHttpPreload
31
28
  response[1]["Content-Type"].match?("html")
32
29
  end
33
30
 
31
+ def current_asset_host
32
+ ActionController::Base.helpers.compute_asset_host("", host: config.asset_host)
33
+ end
34
+
34
35
  # If the asset host is equal to the request domain, no need to add.
35
36
  def already_connected?(request)
36
- protocol = request.protocol.gsub("://", "")
37
- ActionController::Base.helpers.compute_asset_host("", host: config.asset_host) ==
38
- ActionController::Base.helpers.compute_asset_host("", { protocol: protocol, host: request.domain })
37
+ request.base_url == current_asset_host
39
38
  end
40
39
 
41
- def preconnect_header
42
- [
43
- ActionController::Base.helpers.compute_asset_host("", host: config.asset_host),
40
+ def preconnect_header(response)
41
+ header = [
42
+ current_asset_host,
44
43
  *config.additional_urls
45
44
  ].compact.map { |url| create_link_header(url) }.join(", ")
45
+
46
+ if response[1]["Link"]
47
+ "#{header}, #{response[1]["Link"]}"
48
+ else
49
+ header
50
+ end
46
51
  end
47
52
 
48
53
  def create_link_header(url)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RailsHttpPreload
4
- VERSION = "0.1.0"
4
+ VERSION = "0.3.0"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails_http_preload
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nate Berkopec
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-05-26 00:00:00.000000000 Z
11
+ date: 1980-01-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: actionpack
@@ -95,7 +95,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
97
  requirements: []
98
- rubygems_version: 3.3.15
98
+ rubygems_version: 3.4.12
99
99
  signing_key:
100
100
  specification_version: 4
101
101
  summary: Automatically add an HTTP header to Rails apps to use 103 Early Hints