Skip to content

Commit b18ff93

Browse files
authored
Merge pull request rails#52626 from p8/guides/add-digests-to-assets
Add digests to guide assets
2 parents 36a4edc + c546aa6 commit b18ff93

File tree

4 files changed

+57
-27
lines changed

4 files changed

+57
-27
lines changed

guides/rails_guides/generator.rb

Lines changed: 46 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
require "fileutils"
55
require "nokogiri"
66
require "securerandom"
7+
require "digest"
78

89
require "active_support/core_ext/string/output_safety"
910
require "active_support/core_ext/object/blank"
@@ -19,15 +20,16 @@ class Generator
1920
GUIDES_RE = /\.(?:erb|md)\z/
2021

2122
def initialize(edge:, version:, all:, only:, epub:, language:, direction: nil, lint:)
22-
@edge = edge
23-
@version = version
24-
@all = all
25-
@only = only
26-
@epub = epub
27-
@language = language
28-
@direction = direction || "ltr"
29-
@lint = lint
30-
@warnings = []
23+
@edge = edge
24+
@version = version
25+
@all = all
26+
@only = only
27+
@epub = epub
28+
@language = language
29+
@direction = direction || "ltr"
30+
@digest_paths = {}
31+
@lint = lint
32+
@warnings = []
3133

3234
if @epub
3335
register_special_mime_types
@@ -39,6 +41,14 @@ def initialize(edge:, version:, all:, only:, epub:, language:, direction: nil, l
3941
end
4042

4143
def generate
44+
if !dry_run?
45+
# First copy assets and add digests to make sure digest_paths are
46+
# present in generate_guides.
47+
process_scss
48+
copy_assets
49+
add_digests
50+
end
51+
4252
generate_guides
4353

4454
if @lint && @warnings.any?
@@ -47,8 +57,6 @@ def generate
4757
end
4858

4959
if !dry_run?
50-
process_scss
51-
copy_assets
5260
generate_epub if @epub
5361
end
5462
end
@@ -122,16 +130,33 @@ def select_only(guides)
122130

123131
def process_scss
124132
system "bundle exec dartsass \
125-
#{@guides_dir}/assets/stylesrc/style.scss:#{@output_dir}/stylesheets/style-v2.css \
126-
#{@guides_dir}/assets/stylesrc/highlight.scss:#{@output_dir}/stylesheets/highlight-v2.css \
127-
#{@guides_dir}/assets/stylesrc/print.scss:#{@output_dir}/stylesheets/print-v2.css"
133+
#{@guides_dir}/assets/stylesrc/style.scss:#{@output_dir}/stylesheets/style.css \
134+
#{@guides_dir}/assets/stylesrc/highlight.scss:#{@output_dir}/stylesheets/highlight.css \
135+
#{@guides_dir}/assets/stylesrc/print.scss:#{@output_dir}/stylesheets/print.css"
128136
end
129137

130138
def copy_assets
131139
source_files = Dir.glob("#{@guides_dir}/assets/*").reject { |name| name.include?("stylesrc") }
132140
FileUtils.cp_r(source_files, @output_dir)
133141
end
134142

143+
def add_digests
144+
assets_files = Dir.glob("{javascripts,stylesheets}/**/*", base: @output_dir)
145+
# Add the MD5 digest to the asset names.
146+
assets_files.each do |asset|
147+
asset_path = File.join(@output_dir, asset)
148+
if File.file?(asset_path)
149+
digest = Digest::MD5.file(asset_path).hexdigest
150+
ext = File.extname(asset)
151+
basename = File.basename(asset, ext)
152+
dirname = File.dirname(asset)
153+
digest_path = "#{dirname}/#{basename}-#{digest}#{ext}"
154+
FileUtils.mv(asset_path, "#{@output_dir}/#{digest_path}")
155+
@digest_paths[asset] = digest_path
156+
end
157+
end
158+
end
159+
135160
def output_file_for(guide)
136161
if guide.end_with?(".md")
137162
guide.sub(/md\z/, "html")
@@ -157,12 +182,13 @@ def generate_guide(guide, output_file)
157182

158183
view = ActionView::Base.with_empty_template_cache.with_view_paths(
159184
[@source_dir],
160-
edge: @edge,
161-
version: @version,
162-
epub: "epub/#{epub_filename}",
163-
language: @language,
164-
direction: @direction,
165-
uuid: SecureRandom.uuid
185+
edge: @edge,
186+
version: @version,
187+
epub: "epub/#{epub_filename}",
188+
language: @language,
189+
direction: @direction,
190+
uuid: SecureRandom.uuid,
191+
digest_paths: @digest_paths
166192
)
167193
view.extend(Helpers)
168194

guides/rails_guides/helpers.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,5 +51,9 @@ def code(&block)
5151
c = capture(&block)
5252
content_tag(:code, c)
5353
end
54+
55+
def digest_path(original_filename)
56+
@digest_paths[original_filename] || original_filename
57+
end
5458
end
5559
end

guides/source/epub/layout.html.erb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<html xmlns="http://www.w3.org/1999/xhtml">
33
<head>
44
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"></meta>
5-
<link rel="stylesheet" type="text/css" href="stylesheets/epub.css"></link>
5+
<link rel="stylesheet" type="text/css" href="<%= digest_path('stylesheets/epub.css') %>"></link>
66
<title><%= yield(:page_title) || 'Ruby on Rails Guides' %></title>
77
</head>
88
<body class="guide">

guides/source/layout.html.erb

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,17 @@
55
<meta charset="utf-8">
66
<meta name="viewport" content="width=device-width, initial-scale=1">
77
<title><%= yield(:page_title) %></title>
8-
<link rel="stylesheet" type="text/css" href="stylesheets/style-v2.css" data-turbo-track="reload">
9-
<link rel="stylesheet" type="text/css" href="stylesheets/print-v2.css" media="print">
10-
<link rel="stylesheet" type="text/css" href="stylesheets/highlight-v2.css" data-turbo-track="reload">
8+
<link rel="stylesheet" type="text/css" href="<%= digest_path('stylesheets/style.css') %>" data-turbo-track="reload">
9+
<link rel="stylesheet" type="text/css" href="<%= digest_path('stylesheets/print.css') %>" media="print">
10+
<link rel="stylesheet" type="text/css" href="<%= digest_path('stylesheets/highlight.css') %>" data-turbo-track="reload">
1111

1212
<link rel="icon" href="images/favicon.ico" sizes="any">
1313

1414
<link rel="apple-touch-icon" href="images/icon.png">
1515

16-
<script src="javascripts/@hotwired--turbo.js" data-turbo-track="reload"></script>
17-
<script src="javascripts/clipboard.js" data-turbo-track="reload"></script>
18-
<script src="javascripts/guides.js" data-turbo-track="reload"></script>
16+
<script src="<%= digest_path('javascripts/@hotwired--turbo.js') %>" data-turbo-track="reload"></script>
17+
<script src="<%= digest_path('javascripts/clipboard.js') %>" data-turbo-track="reload"></script>
18+
<script src="<%= digest_path('javascripts/guides.js') %>" data-turbo-track="reload"></script>
1919

2020
<meta property="og:title" content="<%= yield(:page_title) %>" />
2121
<meta name="description" content="<%= yield(:description) %>" />

0 commit comments

Comments
 (0)