jekyll 4.0.0.pre.alpha1 → 4.0.0.pre.beta1

Sign up to get free protection for your applications and to get access to all the features.
@@ -9,14 +9,13 @@ module Jekyll
9
9
  @unfiltered_content = []
10
10
  end
11
11
 
12
- # Read all the files in <source>/<dir>/ for Yaml header and create a new Page
13
- # object for each file.
12
+ # Create a new `Jekyll::Page` object for each entry in a given array.
14
13
  #
15
- # dir - The String relative path of the directory to read.
14
+ # files - An array of file names inside `@dir`
16
15
  #
17
- # Returns an array of static pages.
16
+ # Returns an array of publishable `Jekyll::Page` objects.
18
17
  def read(files)
19
- files.map do |page|
18
+ files.each do |page|
20
19
  @unfiltered_content << Page.new(@site, @site.source, @dir, page)
21
20
  end
22
21
  @unfiltered_content.select { |page| site.publisher.publish?(page) }
@@ -50,7 +50,7 @@ module Jekyll
50
50
  # Returns klass type of content files
51
51
  def read_content(dir, magic_dir, matcher)
52
52
  @site.reader.get_entries(dir, magic_dir).map do |entry|
53
- next unless entry =~ matcher
53
+ next unless matcher.match?(entry)
54
54
 
55
55
  path = @site.in_source_dir(File.join(dir, magic_dir, entry))
56
56
  Document.new(path,
@@ -9,10 +9,9 @@ module Jekyll
9
9
  @unfiltered_content = []
10
10
  end
11
11
 
12
- # Read all the files in <source>/<dir>/ for Yaml header and create a new Page
13
- # object for each file.
12
+ # Create a new StaticFile object for every entry in a given list of basenames.
14
13
  #
15
- # dir - The String relative path of the directory to read.
14
+ # files - an array of file basenames.
16
15
  #
17
16
  # Returns an array of static files.
18
17
  def read(files)
@@ -326,15 +326,15 @@ module Jekyll
326
326
  #
327
327
  # Returns an Array of Documents which should be written
328
328
  def docs_to_write
329
- @docs_to_write ||= documents.select(&:write?)
329
+ documents.select(&:write?)
330
330
  end
331
331
 
332
332
  # Get all the documents
333
333
  #
334
334
  # Returns an Array of all Documents
335
335
  def documents
336
- @documents ||= collections.reduce(Set.new) do |docs, (_, collection)|
337
- docs + collection.docs + collection.files
336
+ collections.each_with_object(Set.new) do |(_, collection), set|
337
+ set.merge(collection.docs).merge(collection.files)
338
338
  end.to_a
339
339
  end
340
340
 
@@ -469,7 +469,7 @@ module Jekyll
469
469
 
470
470
  # Disable Marshaling cache to disk in Safe Mode
471
471
  def configure_cache
472
- Jekyll::Cache.base_dir = in_source_dir(config["cache_dir"], "Jekyll/Cache")
472
+ Jekyll::Cache.cache_dir = in_source_dir(config["cache_dir"], "Jekyll/Cache")
473
473
  Jekyll::Cache.disable_disk_cache! if safe
474
474
  end
475
475
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Jekyll
4
4
  module Tags
5
- class HighlightBlock < Liquid::Raw
5
+ class HighlightBlock < Liquid::Block
6
6
  include Liquid::StandardFilters
7
7
 
8
8
  # The regular expression syntax checker. Start with the language specifier.
@@ -33,7 +33,7 @@ module Jekyll
33
33
  def render(context)
34
34
  prefix = context["highlighter_prefix"] || ""
35
35
  suffix = context["highlighter_suffix"] || ""
36
- code = @body.gsub(LEADING_OR_TRAILING_LINE_TERMINATORS, "")
36
+ code = super.to_s.gsub(LEADING_OR_TRAILING_LINE_TERMINATORS, "")
37
37
 
38
38
  output =
39
39
  case context.registers[:site].highlighter
@@ -103,8 +103,6 @@ module Jekyll
103
103
  "<figure class=\"highlight\"><pre><code #{code_attributes}>"\
104
104
  "#{code.chomp}</code></pre></figure>"
105
105
  end
106
-
107
- def ensure_valid_markup(tag_name, markup, parse_context); end
108
106
  end
109
107
  end
110
108
  end
@@ -54,7 +54,7 @@ module Jekyll
54
54
  end
55
55
 
56
56
  def validate_file_name(file)
57
- if file =~ INVALID_SEQUENCES || file !~ VALID_FILENAME_CHARS
57
+ if INVALID_SEQUENCES.match?(file) || !VALID_FILENAME_CHARS.match?(file)
58
58
  raise ArgumentError, <<~MSG
59
59
  Invalid syntax for include tag. File contains invalid characters or sequences:
60
60
 
@@ -69,7 +69,7 @@ module Jekyll
69
69
  end
70
70
 
71
71
  def validate_params
72
- unless @params =~ FULL_VALID_SYNTAX
72
+ unless FULL_VALID_SYNTAX.match?(@params)
73
73
  raise ArgumentError, <<~MSG
74
74
  Invalid syntax for include tag:
75
75
 
@@ -90,7 +90,7 @@ module Jekyll
90
90
 
91
91
  # Render the variable if required
92
92
  def render_variable(context)
93
- Liquid::Template.parse(@file).render(context) if @file =~ VARIABLE_SYNTAX
93
+ Liquid::Template.parse(@file).render(context) if VARIABLE_SYNTAX.match?(@file)
94
94
  end
95
95
 
96
96
  def tag_includes_dirs(context)
@@ -100,7 +100,7 @@ module Jekyll
100
100
  def locate_include_file(context, file, safe)
101
101
  includes_dirs = tag_includes_dirs(context)
102
102
  includes_dirs.each do |dir|
103
- path = File.join(dir.to_s, file.to_s)
103
+ path = PathManager.join(dir, file)
104
104
  return path if valid_include_file?(path, dir.to_s, safe)
105
105
  end
106
106
  raise IOError, could_not_locate_message(file, includes_dirs, safe)
@@ -209,6 +209,7 @@ module Jekyll
209
209
  else
210
210
  File.join(site.config["collections_dir"], page_payload["path"])
211
211
  end
212
+ resource_path.sub!(%r!/#excerpt\z!, "")
212
213
  site.in_source_dir File.dirname(resource_path)
213
214
  end
214
215
  end
@@ -57,6 +57,8 @@ module Jekyll
57
57
  end
58
58
 
59
59
  class PostUrl < Liquid::Tag
60
+ include Jekyll::Filters::URLFilters
61
+
60
62
  def initialize(tag_name, post, tokens)
61
63
  super
62
64
  @orig_post = post.strip
@@ -72,24 +74,25 @@ module Jekyll
72
74
  end
73
75
 
74
76
  def render(context)
77
+ @context = context
75
78
  site = context.registers[:site]
76
79
 
77
- site.posts.docs.each do |p|
78
- return p.url if @post == p
80
+ site.posts.docs.each do |document|
81
+ return relative_url(document) if @post == document
79
82
  end
80
83
 
81
84
  # New matching method did not match, fall back to old method
82
85
  # with deprecation warning if this matches
83
86
 
84
- site.posts.docs.each do |p|
85
- next unless @post.deprecated_equality p
87
+ site.posts.docs.each do |document|
88
+ next unless @post.deprecated_equality document
86
89
 
87
90
  Jekyll::Deprecator.deprecation_message "A call to "\
88
91
  "'{% post_url #{@post.name} %}' did not match " \
89
92
  "a post using the new matching method of checking name " \
90
93
  "(path-date-slug) equality. Please make sure that you " \
91
94
  "change this tag to match the post's name exactly."
92
- return p.url
95
+ return relative_url(document)
93
96
  end
94
97
 
95
98
  raise Jekyll::Errors::PostURLError, <<~MSG
@@ -62,11 +62,22 @@ module Jekyll
62
62
  # escape the theme root.
63
63
  # However, symlinks are allowed to point to other directories within the theme.
64
64
  Jekyll.sanitized_path(root, File.realpath(Jekyll.sanitized_path(root, folder.to_s)))
65
- rescue Errno::ENOENT, Errno::EACCES, Errno::ELOOP
66
- Jekyll.logger.warn "Invalid theme folder:", folder
65
+ rescue Errno::ENOENT, Errno::EACCES, Errno::ELOOP => e
66
+ log_realpath_exception(e, folder)
67
67
  nil
68
68
  end
69
69
 
70
+ def log_realpath_exception(err, folder)
71
+ return if err.is_a?(Errno::ENOENT)
72
+
73
+ case err
74
+ when Errno::EACCES
75
+ Jekyll.logger.error "Theme error:", "Directory '#{folder}' is not accessible."
76
+ when Errno::ELOOP
77
+ Jekyll.logger.error "Theme error:", "Directory '#{folder}' includes a symbolic link loop."
78
+ end
79
+ end
80
+
70
81
  def gemspec
71
82
  @gemspec ||= Gem::Specification.find_by_name(name)
72
83
  rescue Gem::LoadError
@@ -129,6 +129,8 @@ module Jekyll
129
129
  #
130
130
  # Returns the escaped path.
131
131
  def self.escape_path(path)
132
+ return path if path.empty? || %r!^[a-zA-Z0-9./-]+$!.match?(path)
133
+
132
134
  # Because URI.escape doesn't escape "?", "[" and "]" by default,
133
135
  # specify unsafe string (except unreserved, sub-delims, ":", "@" and "/").
134
136
  #
@@ -139,8 +141,7 @@ module Jekyll
139
141
  # pct-encoded = "%" HEXDIG HEXDIG
140
142
  # sub-delims = "!" / "$" / "&" / "'" / "(" / ")"
141
143
  # / "*" / "+" / "," / ";" / "="
142
- path = Addressable::URI.encode(path)
143
- path.encode("utf-8").sub("#", "%23")
144
+ Addressable::URI.encode(path).encode("utf-8").sub("#", "%23")
144
145
  end
145
146
 
146
147
  # Unescapes a URL path segment
@@ -154,7 +155,10 @@ module Jekyll
154
155
  #
155
156
  # Returns the unescaped path.
156
157
  def self.unescape_path(path)
157
- Addressable::URI.unencode(path.encode("utf-8"))
158
+ path = path.encode("utf-8")
159
+ return path unless path.include?("%")
160
+
161
+ Addressable::URI.unencode(path)
158
162
  end
159
163
  end
160
164
  end
@@ -17,14 +17,7 @@ module Jekyll
17
17
  SLUGIFY_PRETTY_REGEXP = Regexp.new("[^[:alnum:]._~!$&'()+,;=@]+").freeze
18
18
  SLUGIFY_ASCII_REGEXP = Regexp.new("[^[A-Za-z0-9]]+").freeze
19
19
 
20
- # Takes an indented string and removes the preceding spaces on each line
21
-
22
- def strip_heredoc(str)
23
- str.gsub(%r!^[ \t]{#{(str.scan(%r!^[ \t]*(?=\S)!).min || "").size}}!, "")
24
- end
25
-
26
20
  # Takes a slug and turns it into a simple title.
27
-
28
21
  def titleize_slug(slug)
29
22
  slug.split("-").map!(&:capitalize).join(" ")
30
23
  end
@@ -75,11 +68,14 @@ module Jekyll
75
68
  #
76
69
  # Returns an array
77
70
  def pluralized_array_from_hash(hash, singular_key, plural_key)
78
- [].tap do |array|
79
- value = value_from_singular_key(hash, singular_key)
80
- value ||= value_from_plural_key(hash, plural_key)
81
- array << value
82
- end.flatten.compact
71
+ array = []
72
+ value = value_from_singular_key(hash, singular_key)
73
+ value ||= value_from_plural_key(hash, plural_key)
74
+
75
+ array << value
76
+ array.flatten!
77
+ array.compact!
78
+ array
83
79
  end
84
80
 
85
81
  def value_from_singular_key(hash, key)
@@ -142,7 +138,7 @@ module Jekyll
142
138
  # Returns true if the YAML front matter is present.
143
139
  # rubocop: disable PredicateName
144
140
  def has_yaml_header?(file)
145
- !!(File.open(file, "rb", &:readline) =~ %r!\A---\s*\r?\n!)
141
+ File.open(file, "rb", &:readline).match? %r!\A---\s*\r?\n!
146
142
  rescue EOFError
147
143
  false
148
144
  end
@@ -72,7 +72,7 @@ module Jekyll
72
72
  def proc_version
73
73
  @proc_version ||=
74
74
  begin
75
- Pathutil.new("/proc/version").read
75
+ File.read("/proc/version")
76
76
  rescue Errno::ENOENT, Errno::EACCES
77
77
  nil
78
78
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Jekyll
4
- VERSION = "4.0.0.pre.alpha1"
4
+ VERSION = "4.0.0.pre.beta1"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jekyll
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.0.0.pre.alpha1
4
+ version: 4.0.0.pre.beta1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tom Preston-Werner
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: exe
12
12
  cert_chain: []
13
- date: 2019-03-19 00:00:00.000000000 Z
13
+ date: 2019-08-04 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: addressable
@@ -273,6 +273,7 @@ files:
273
273
  - lib/jekyll/mime.types
274
274
  - lib/jekyll/page.rb
275
275
  - lib/jekyll/page_without_a_file.rb
276
+ - lib/jekyll/path_manager.rb
276
277
  - lib/jekyll/plugin.rb
277
278
  - lib/jekyll/plugin_manager.rb
278
279
  - lib/jekyll/publisher.rb
@@ -337,7 +338,7 @@ metadata:
337
338
  homepage_uri: https://jekyllrb.com
338
339
  source_code_uri: https://github.com/jekyll/jekyll
339
340
  post_install_message: |
340
- ----------------------------------------------------------------------------------
341
+ -------------------------------------------------------------------------------------
341
342
  This version of Jekyll comes with some major changes.
342
343
 
343
344
  Most notably:
@@ -345,13 +346,14 @@ post_install_message: |
345
346
  You should no longer prepend `{{ site.baseurl }}` to `{% link foo.md %}`
346
347
  For further details: https://github.com/jekyll/jekyll/pull/6727
347
348
 
348
- * Our `highlight` tag no longer parses Liquid and Liquid-like constructs in the
349
- tag's content body. While this means you no longer need to enclose the content
350
- within a `{% raw %}{% endraw %}` block, it also means that you can no longer
351
- do the following as well:
352
- `{% highlight html %}{% include snippet.html %}{% endhighlight %}`
353
- For further details: https://github.com/jekyll/jekyll/pull/6821
354
- ----------------------------------------------------------------------------------
349
+ * Our `post_url` tag now comes with the `relative_url` filter incorporated into it.
350
+ You shouldn't prepend `{{ site.baseurl }}` to `{% post_url 2019-03-27-hello %}`
351
+ For further details: https://github.com/jekyll/jekyll/pull/7589
352
+
353
+ * Support for deprecated configuration options has been removed. We will no longer
354
+ output a warning and gracefully assign their values to the newer counterparts
355
+ internally.
356
+ -------------------------------------------------------------------------------------
355
357
  rdoc_options:
356
358
  - "--charset=UTF-8"
357
359
  require_paths:
@@ -367,7 +369,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
367
369
  - !ruby/object:Gem::Version
368
370
  version: 2.7.0
369
371
  requirements: []
370
- rubygems_version: 3.0.3
372
+ rubygems_version: 3.0.4
371
373
  signing_key:
372
374
  specification_version: 4
373
375
  summary: A simple, blog aware, static site generator.