jekyll 4.2.1 → 4.2.2

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.
Files changed (124) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +350 -350
  3. data/LICENSE +21 -21
  4. data/README.markdown +86 -86
  5. data/exe/jekyll +57 -57
  6. data/lib/blank_template/_config.yml +3 -3
  7. data/lib/blank_template/_layouts/default.html +12 -12
  8. data/lib/blank_template/_sass/main.scss +9 -9
  9. data/lib/blank_template/assets/css/main.scss +4 -4
  10. data/lib/blank_template/index.md +8 -8
  11. data/lib/jekyll/cache.rb +190 -190
  12. data/lib/jekyll/cleaner.rb +111 -111
  13. data/lib/jekyll/collection.rb +309 -309
  14. data/lib/jekyll/command.rb +105 -105
  15. data/lib/jekyll/commands/build.rb +93 -93
  16. data/lib/jekyll/commands/clean.rb +45 -45
  17. data/lib/jekyll/commands/doctor.rb +177 -177
  18. data/lib/jekyll/commands/help.rb +34 -34
  19. data/lib/jekyll/commands/new.rb +172 -169
  20. data/lib/jekyll/commands/new_theme.rb +40 -40
  21. data/lib/jekyll/commands/serve/live_reload_reactor.rb +122 -122
  22. data/lib/jekyll/commands/serve/livereload_assets/livereload.js +1183 -1183
  23. data/lib/jekyll/commands/serve/servlet.rb +202 -202
  24. data/lib/jekyll/commands/serve/websockets.rb +81 -81
  25. data/lib/jekyll/commands/serve.rb +362 -362
  26. data/lib/jekyll/configuration.rb +313 -313
  27. data/lib/jekyll/converter.rb +54 -54
  28. data/lib/jekyll/converters/identity.rb +41 -41
  29. data/lib/jekyll/converters/markdown/kramdown_parser.rb +199 -199
  30. data/lib/jekyll/converters/markdown.rb +113 -113
  31. data/lib/jekyll/converters/smartypants.rb +70 -70
  32. data/lib/jekyll/convertible.rb +257 -257
  33. data/lib/jekyll/deprecator.rb +50 -50
  34. data/lib/jekyll/document.rb +544 -544
  35. data/lib/jekyll/drops/collection_drop.rb +20 -20
  36. data/lib/jekyll/drops/document_drop.rb +70 -70
  37. data/lib/jekyll/drops/drop.rb +293 -293
  38. data/lib/jekyll/drops/excerpt_drop.rb +19 -19
  39. data/lib/jekyll/drops/jekyll_drop.rb +32 -32
  40. data/lib/jekyll/drops/site_drop.rb +66 -66
  41. data/lib/jekyll/drops/static_file_drop.rb +14 -14
  42. data/lib/jekyll/drops/unified_payload_drop.rb +26 -26
  43. data/lib/jekyll/drops/url_drop.rb +140 -140
  44. data/lib/jekyll/entry_filter.rb +121 -121
  45. data/lib/jekyll/errors.rb +20 -20
  46. data/lib/jekyll/excerpt.rb +201 -201
  47. data/lib/jekyll/external.rb +79 -79
  48. data/lib/jekyll/filters/date_filters.rb +110 -110
  49. data/lib/jekyll/filters/grouping_filters.rb +64 -64
  50. data/lib/jekyll/filters/url_filters.rb +98 -98
  51. data/lib/jekyll/filters.rb +535 -535
  52. data/lib/jekyll/frontmatter_defaults.rb +240 -240
  53. data/lib/jekyll/generator.rb +5 -5
  54. data/lib/jekyll/hooks.rb +107 -107
  55. data/lib/jekyll/inclusion.rb +32 -32
  56. data/lib/jekyll/layout.rb +67 -67
  57. data/lib/jekyll/liquid_extensions.rb +22 -22
  58. data/lib/jekyll/liquid_renderer/file.rb +77 -77
  59. data/lib/jekyll/liquid_renderer/table.rb +55 -55
  60. data/lib/jekyll/liquid_renderer.rb +80 -80
  61. data/lib/jekyll/log_adapter.rb +151 -151
  62. data/lib/jekyll/mime.types +866 -866
  63. data/lib/jekyll/page.rb +217 -217
  64. data/lib/jekyll/page_excerpt.rb +25 -25
  65. data/lib/jekyll/page_without_a_file.rb +14 -14
  66. data/lib/jekyll/path_manager.rb +74 -74
  67. data/lib/jekyll/plugin.rb +92 -92
  68. data/lib/jekyll/plugin_manager.rb +115 -115
  69. data/lib/jekyll/profiler.rb +58 -58
  70. data/lib/jekyll/publisher.rb +23 -23
  71. data/lib/jekyll/reader.rb +192 -192
  72. data/lib/jekyll/readers/collection_reader.rb +23 -23
  73. data/lib/jekyll/readers/data_reader.rb +79 -79
  74. data/lib/jekyll/readers/layout_reader.rb +62 -62
  75. data/lib/jekyll/readers/page_reader.rb +25 -25
  76. data/lib/jekyll/readers/post_reader.rb +85 -85
  77. data/lib/jekyll/readers/static_file_reader.rb +25 -25
  78. data/lib/jekyll/readers/theme_assets_reader.rb +52 -52
  79. data/lib/jekyll/regenerator.rb +195 -195
  80. data/lib/jekyll/related_posts.rb +52 -52
  81. data/lib/jekyll/renderer.rb +265 -265
  82. data/lib/jekyll/site.rb +551 -551
  83. data/lib/jekyll/static_file.rb +208 -208
  84. data/lib/jekyll/stevenson.rb +60 -60
  85. data/lib/jekyll/tags/highlight.rb +110 -110
  86. data/lib/jekyll/tags/include.rb +275 -275
  87. data/lib/jekyll/tags/link.rb +42 -42
  88. data/lib/jekyll/tags/post_url.rb +106 -106
  89. data/lib/jekyll/theme.rb +86 -86
  90. data/lib/jekyll/theme_builder.rb +121 -121
  91. data/lib/jekyll/url.rb +167 -167
  92. data/lib/jekyll/utils/ansi.rb +57 -57
  93. data/lib/jekyll/utils/exec.rb +26 -26
  94. data/lib/jekyll/utils/internet.rb +37 -37
  95. data/lib/jekyll/utils/platforms.rb +67 -67
  96. data/lib/jekyll/utils/thread_event.rb +31 -31
  97. data/lib/jekyll/utils/win_tz.rb +75 -75
  98. data/lib/jekyll/utils.rb +367 -367
  99. data/lib/jekyll/version.rb +5 -5
  100. data/lib/jekyll.rb +195 -195
  101. data/lib/site_template/.gitignore +5 -5
  102. data/lib/site_template/404.html +25 -25
  103. data/lib/site_template/_config.yml +55 -55
  104. data/lib/site_template/_posts/0000-00-00-welcome-to-jekyll.markdown.erb +29 -29
  105. data/lib/site_template/about.markdown +18 -18
  106. data/lib/site_template/index.markdown +6 -6
  107. data/lib/theme_template/CODE_OF_CONDUCT.md.erb +74 -74
  108. data/lib/theme_template/Gemfile +4 -4
  109. data/lib/theme_template/LICENSE.txt.erb +21 -21
  110. data/lib/theme_template/README.md.erb +52 -52
  111. data/lib/theme_template/_layouts/default.html +1 -1
  112. data/lib/theme_template/_layouts/page.html +5 -5
  113. data/lib/theme_template/_layouts/post.html +5 -5
  114. data/lib/theme_template/example/_config.yml.erb +1 -1
  115. data/lib/theme_template/example/_post.md +12 -12
  116. data/lib/theme_template/example/index.html +14 -14
  117. data/lib/theme_template/example/style.scss +7 -7
  118. data/lib/theme_template/gitignore.erb +6 -6
  119. data/lib/theme_template/theme.gemspec.erb +16 -16
  120. data/rubocop/jekyll/assert_equal_literal_actual.rb +149 -149
  121. data/rubocop/jekyll/no_p_allowed.rb +23 -23
  122. data/rubocop/jekyll/no_puts_allowed.rb +23 -23
  123. data/rubocop/jekyll.rb +5 -5
  124. metadata +3 -3
@@ -1,208 +1,208 @@
1
- # frozen_string_literal: true
2
-
3
- module Jekyll
4
- class StaticFile
5
- extend Forwardable
6
-
7
- attr_reader :relative_path, :extname, :name
8
-
9
- def_delegator :to_liquid, :to_json, :to_json
10
-
11
- class << self
12
- # The cache of last modification times [path] -> mtime.
13
- def mtimes
14
- @mtimes ||= {}
15
- end
16
-
17
- def reset_cache
18
- @mtimes = nil
19
- end
20
- end
21
-
22
- # Initialize a new StaticFile.
23
- #
24
- # site - The Site.
25
- # base - The String path to the <source>.
26
- # dir - The String path between <source> and the file.
27
- # name - The String filename of the file.
28
- # rubocop: disable Metrics/ParameterLists
29
- def initialize(site, base, dir, name, collection = nil)
30
- @site = site
31
- @base = base
32
- @dir = dir
33
- @name = name
34
- @collection = collection
35
- @relative_path = File.join(*[@dir, @name].compact)
36
- @extname = File.extname(@name)
37
- end
38
- # rubocop: enable Metrics/ParameterLists
39
-
40
- # Returns source file path.
41
- def path
42
- @path ||= begin
43
- # Static file is from a collection inside custom collections directory
44
- if !@collection.nil? && !@site.config["collections_dir"].empty?
45
- File.join(*[@base, @site.config["collections_dir"], @dir, @name].compact)
46
- else
47
- File.join(*[@base, @dir, @name].compact)
48
- end
49
- end
50
- end
51
-
52
- # Obtain destination path.
53
- #
54
- # dest - The String path to the destination dir.
55
- #
56
- # Returns destination file path.
57
- def destination(dest)
58
- @destination ||= {}
59
- @destination[dest] ||= @site.in_dest_dir(dest, Jekyll::URL.unescape_path(url))
60
- end
61
-
62
- def destination_rel_dir
63
- if @collection
64
- File.dirname(url)
65
- else
66
- @dir
67
- end
68
- end
69
-
70
- def modified_time
71
- @modified_time ||= File.stat(path).mtime
72
- end
73
-
74
- # Returns last modification time for this file.
75
- def mtime
76
- modified_time.to_i
77
- end
78
-
79
- # Is source path modified?
80
- #
81
- # Returns true if modified since last write.
82
- def modified?
83
- self.class.mtimes[path] != mtime
84
- end
85
-
86
- # Whether to write the file to the filesystem
87
- #
88
- # Returns true unless the defaults for the destination path from
89
- # _config.yml contain `published: false`.
90
- def write?
91
- publishable = defaults.fetch("published", true)
92
- return publishable unless @collection
93
-
94
- publishable && @collection.write?
95
- end
96
-
97
- # Write the static file to the destination directory (if modified).
98
- #
99
- # dest - The String path to the destination dir.
100
- #
101
- # Returns false if the file was not modified since last time (no-op).
102
- def write(dest)
103
- dest_path = destination(dest)
104
- return false if File.exist?(dest_path) && !modified?
105
-
106
- self.class.mtimes[path] = mtime
107
-
108
- FileUtils.mkdir_p(File.dirname(dest_path))
109
- FileUtils.rm(dest_path) if File.exist?(dest_path)
110
- copy_file(dest_path)
111
-
112
- true
113
- end
114
-
115
- def data
116
- @data ||= @site.frontmatter_defaults.all(relative_path, type)
117
- end
118
-
119
- def to_liquid
120
- @to_liquid ||= Drops::StaticFileDrop.new(self)
121
- end
122
-
123
- # Generate "basename without extension" and strip away any trailing periods.
124
- # NOTE: `String#gsub` removes all trailing periods (in comparison to `String#chomp`)
125
- def basename
126
- @basename ||= File.basename(name, extname).gsub(%r!\.*\z!, "")
127
- end
128
-
129
- def placeholders
130
- {
131
- :collection => @collection.label,
132
- :path => cleaned_relative_path,
133
- :output_ext => "",
134
- :name => basename,
135
- :title => "",
136
- }
137
- end
138
-
139
- # Similar to Jekyll::Document#cleaned_relative_path.
140
- # Generates a relative path with the collection's directory removed when applicable
141
- # and additionally removes any multiple periods in the string.
142
- #
143
- # NOTE: `String#gsub!` removes all trailing periods (in comparison to `String#chomp!`)
144
- #
145
- # Examples:
146
- # When `relative_path` is "_methods/site/my-cool-avatar...png":
147
- # cleaned_relative_path
148
- # # => "/site/my-cool-avatar"
149
- #
150
- # Returns the cleaned relative path of the static file.
151
- def cleaned_relative_path
152
- @cleaned_relative_path ||= begin
153
- cleaned = relative_path[0..-extname.length - 1]
154
- cleaned.gsub!(%r!\.*\z!, "")
155
- cleaned.sub!(@collection.relative_directory, "") if @collection
156
- cleaned
157
- end
158
- end
159
-
160
- # Applies a similar URL-building technique as Jekyll::Document that takes
161
- # the collection's URL template into account. The default URL template can
162
- # be overriden in the collection's configuration in _config.yml.
163
- def url
164
- @url ||= begin
165
- base = if @collection.nil?
166
- cleaned_relative_path
167
- else
168
- Jekyll::URL.new(
169
- :template => @collection.url_template,
170
- :placeholders => placeholders
171
- )
172
- end.to_s.chomp("/")
173
- base << extname
174
- end
175
- end
176
-
177
- # Returns the type of the collection if present, nil otherwise.
178
- def type
179
- @type ||= @collection.nil? ? nil : @collection.label.to_sym
180
- end
181
-
182
- # Returns the front matter defaults defined for the file's URL and/or type
183
- # as defined in _config.yml.
184
- def defaults
185
- @defaults ||= @site.frontmatter_defaults.all url, type
186
- end
187
-
188
- # Returns a debug string on inspecting the static file.
189
- # Includes only the relative path of the object.
190
- def inspect
191
- "#<#{self.class} @relative_path=#{relative_path.inspect}>"
192
- end
193
-
194
- private
195
-
196
- def copy_file(dest_path)
197
- if @site.safe || Jekyll.env == "production"
198
- FileUtils.cp(path, dest_path)
199
- else
200
- FileUtils.copy_entry(path, dest_path)
201
- end
202
-
203
- unless File.symlink?(dest_path)
204
- File.utime(self.class.mtimes[path], self.class.mtimes[path], dest_path)
205
- end
206
- end
207
- end
208
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Jekyll
4
+ class StaticFile
5
+ extend Forwardable
6
+
7
+ attr_reader :relative_path, :extname, :name
8
+
9
+ def_delegator :to_liquid, :to_json, :to_json
10
+
11
+ class << self
12
+ # The cache of last modification times [path] -> mtime.
13
+ def mtimes
14
+ @mtimes ||= {}
15
+ end
16
+
17
+ def reset_cache
18
+ @mtimes = nil
19
+ end
20
+ end
21
+
22
+ # Initialize a new StaticFile.
23
+ #
24
+ # site - The Site.
25
+ # base - The String path to the <source>.
26
+ # dir - The String path between <source> and the file.
27
+ # name - The String filename of the file.
28
+ # rubocop: disable Metrics/ParameterLists
29
+ def initialize(site, base, dir, name, collection = nil)
30
+ @site = site
31
+ @base = base
32
+ @dir = dir
33
+ @name = name
34
+ @collection = collection
35
+ @relative_path = File.join(*[@dir, @name].compact)
36
+ @extname = File.extname(@name)
37
+ end
38
+ # rubocop: enable Metrics/ParameterLists
39
+
40
+ # Returns source file path.
41
+ def path
42
+ @path ||= begin
43
+ # Static file is from a collection inside custom collections directory
44
+ if !@collection.nil? && !@site.config["collections_dir"].empty?
45
+ File.join(*[@base, @site.config["collections_dir"], @dir, @name].compact)
46
+ else
47
+ File.join(*[@base, @dir, @name].compact)
48
+ end
49
+ end
50
+ end
51
+
52
+ # Obtain destination path.
53
+ #
54
+ # dest - The String path to the destination dir.
55
+ #
56
+ # Returns destination file path.
57
+ def destination(dest)
58
+ @destination ||= {}
59
+ @destination[dest] ||= @site.in_dest_dir(dest, Jekyll::URL.unescape_path(url))
60
+ end
61
+
62
+ def destination_rel_dir
63
+ if @collection
64
+ File.dirname(url)
65
+ else
66
+ @dir
67
+ end
68
+ end
69
+
70
+ def modified_time
71
+ @modified_time ||= File.stat(path).mtime
72
+ end
73
+
74
+ # Returns last modification time for this file.
75
+ def mtime
76
+ modified_time.to_i
77
+ end
78
+
79
+ # Is source path modified?
80
+ #
81
+ # Returns true if modified since last write.
82
+ def modified?
83
+ self.class.mtimes[path] != mtime
84
+ end
85
+
86
+ # Whether to write the file to the filesystem
87
+ #
88
+ # Returns true unless the defaults for the destination path from
89
+ # _config.yml contain `published: false`.
90
+ def write?
91
+ publishable = defaults.fetch("published", true)
92
+ return publishable unless @collection
93
+
94
+ publishable && @collection.write?
95
+ end
96
+
97
+ # Write the static file to the destination directory (if modified).
98
+ #
99
+ # dest - The String path to the destination dir.
100
+ #
101
+ # Returns false if the file was not modified since last time (no-op).
102
+ def write(dest)
103
+ dest_path = destination(dest)
104
+ return false if File.exist?(dest_path) && !modified?
105
+
106
+ self.class.mtimes[path] = mtime
107
+
108
+ FileUtils.mkdir_p(File.dirname(dest_path))
109
+ FileUtils.rm(dest_path) if File.exist?(dest_path)
110
+ copy_file(dest_path)
111
+
112
+ true
113
+ end
114
+
115
+ def data
116
+ @data ||= @site.frontmatter_defaults.all(relative_path, type)
117
+ end
118
+
119
+ def to_liquid
120
+ @to_liquid ||= Drops::StaticFileDrop.new(self)
121
+ end
122
+
123
+ # Generate "basename without extension" and strip away any trailing periods.
124
+ # NOTE: `String#gsub` removes all trailing periods (in comparison to `String#chomp`)
125
+ def basename
126
+ @basename ||= File.basename(name, extname).gsub(%r!\.*\z!, "")
127
+ end
128
+
129
+ def placeholders
130
+ {
131
+ :collection => @collection.label,
132
+ :path => cleaned_relative_path,
133
+ :output_ext => "",
134
+ :name => basename,
135
+ :title => "",
136
+ }
137
+ end
138
+
139
+ # Similar to Jekyll::Document#cleaned_relative_path.
140
+ # Generates a relative path with the collection's directory removed when applicable
141
+ # and additionally removes any multiple periods in the string.
142
+ #
143
+ # NOTE: `String#gsub!` removes all trailing periods (in comparison to `String#chomp!`)
144
+ #
145
+ # Examples:
146
+ # When `relative_path` is "_methods/site/my-cool-avatar...png":
147
+ # cleaned_relative_path
148
+ # # => "/site/my-cool-avatar"
149
+ #
150
+ # Returns the cleaned relative path of the static file.
151
+ def cleaned_relative_path
152
+ @cleaned_relative_path ||= begin
153
+ cleaned = relative_path[0..-extname.length - 1]
154
+ cleaned.gsub!(%r!\.*\z!, "")
155
+ cleaned.sub!(@collection.relative_directory, "") if @collection
156
+ cleaned
157
+ end
158
+ end
159
+
160
+ # Applies a similar URL-building technique as Jekyll::Document that takes
161
+ # the collection's URL template into account. The default URL template can
162
+ # be overriden in the collection's configuration in _config.yml.
163
+ def url
164
+ @url ||= begin
165
+ base = if @collection.nil?
166
+ cleaned_relative_path
167
+ else
168
+ Jekyll::URL.new(
169
+ :template => @collection.url_template,
170
+ :placeholders => placeholders
171
+ )
172
+ end.to_s.chomp("/")
173
+ base << extname
174
+ end
175
+ end
176
+
177
+ # Returns the type of the collection if present, nil otherwise.
178
+ def type
179
+ @type ||= @collection.nil? ? nil : @collection.label.to_sym
180
+ end
181
+
182
+ # Returns the front matter defaults defined for the file's URL and/or type
183
+ # as defined in _config.yml.
184
+ def defaults
185
+ @defaults ||= @site.frontmatter_defaults.all url, type
186
+ end
187
+
188
+ # Returns a debug string on inspecting the static file.
189
+ # Includes only the relative path of the object.
190
+ def inspect
191
+ "#<#{self.class} @relative_path=#{relative_path.inspect}>"
192
+ end
193
+
194
+ private
195
+
196
+ def copy_file(dest_path)
197
+ if @site.safe || Jekyll.env == "production"
198
+ FileUtils.cp(path, dest_path)
199
+ else
200
+ FileUtils.copy_entry(path, dest_path)
201
+ end
202
+
203
+ unless File.symlink?(dest_path)
204
+ File.utime(self.class.mtimes[path], self.class.mtimes[path], dest_path)
205
+ end
206
+ end
207
+ end
208
+ end
@@ -1,60 +1,60 @@
1
- # frozen_string_literal: true
2
-
3
- module Jekyll
4
- class Stevenson < ::Logger
5
- def initialize
6
- @progname = nil
7
- @level = DEBUG
8
- @default_formatter = Formatter.new
9
- @logdev = $stdout
10
- @formatter = proc do |_, _, _, msg|
11
- msg.to_s
12
- end
13
- end
14
-
15
- def add(severity, message = nil, progname = nil)
16
- severity ||= UNKNOWN
17
- @logdev = logdevice(severity)
18
-
19
- return true if @logdev.nil? || severity < @level
20
-
21
- progname ||= @progname
22
- if message.nil?
23
- if block_given?
24
- message = yield
25
- else
26
- message = progname
27
- progname = @progname
28
- end
29
- end
30
- @logdev.puts(
31
- format_message(format_severity(severity), Time.now, progname, message)
32
- )
33
- true
34
- end
35
-
36
- # Log a +WARN+ message
37
- def warn(progname = nil, &block)
38
- add(WARN, nil, progname.yellow, &block)
39
- end
40
-
41
- # Log an +ERROR+ message
42
- def error(progname = nil, &block)
43
- add(ERROR, nil, progname.red, &block)
44
- end
45
-
46
- def close
47
- # No LogDevice in use
48
- end
49
-
50
- private
51
-
52
- def logdevice(severity)
53
- if severity > INFO
54
- $stderr
55
- else
56
- $stdout
57
- end
58
- end
59
- end
60
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Jekyll
4
+ class Stevenson < ::Logger
5
+ def initialize
6
+ @progname = nil
7
+ @level = DEBUG
8
+ @default_formatter = Formatter.new
9
+ @logdev = $stdout
10
+ @formatter = proc do |_, _, _, msg|
11
+ msg.to_s
12
+ end
13
+ end
14
+
15
+ def add(severity, message = nil, progname = nil)
16
+ severity ||= UNKNOWN
17
+ @logdev = logdevice(severity)
18
+
19
+ return true if @logdev.nil? || severity < @level
20
+
21
+ progname ||= @progname
22
+ if message.nil?
23
+ if block_given?
24
+ message = yield
25
+ else
26
+ message = progname
27
+ progname = @progname
28
+ end
29
+ end
30
+ @logdev.puts(
31
+ format_message(format_severity(severity), Time.now, progname, message)
32
+ )
33
+ true
34
+ end
35
+
36
+ # Log a +WARN+ message
37
+ def warn(progname = nil, &block)
38
+ add(WARN, nil, progname.yellow, &block)
39
+ end
40
+
41
+ # Log an +ERROR+ message
42
+ def error(progname = nil, &block)
43
+ add(ERROR, nil, progname.red, &block)
44
+ end
45
+
46
+ def close
47
+ # No LogDevice in use
48
+ end
49
+
50
+ private
51
+
52
+ def logdevice(severity)
53
+ if severity > INFO
54
+ $stderr
55
+ else
56
+ $stdout
57
+ end
58
+ end
59
+ end
60
+ end