jekyll 4.0.0.pre.alpha1 → 4.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (57) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +58 -17
  3. data/lib/jekyll.rb +5 -1
  4. data/lib/jekyll/cache.rb +71 -64
  5. data/lib/jekyll/cleaner.rb +5 -5
  6. data/lib/jekyll/collection.rb +6 -4
  7. data/lib/jekyll/command.rb +4 -2
  8. data/lib/jekyll/commands/new.rb +4 -4
  9. data/lib/jekyll/commands/serve.rb +9 -1
  10. data/lib/jekyll/commands/serve/servlet.rb +13 -14
  11. data/lib/jekyll/commands/serve/websockets.rb +1 -1
  12. data/lib/jekyll/configuration.rb +40 -129
  13. data/lib/jekyll/converters/identity.rb +2 -2
  14. data/lib/jekyll/converters/markdown/kramdown_parser.rb +70 -9
  15. data/lib/jekyll/convertible.rb +21 -20
  16. data/lib/jekyll/document.rb +56 -31
  17. data/lib/jekyll/drops/document_drop.rb +12 -0
  18. data/lib/jekyll/drops/drop.rb +14 -8
  19. data/lib/jekyll/drops/site_drop.rb +11 -1
  20. data/lib/jekyll/drops/url_drop.rb +52 -1
  21. data/lib/jekyll/entry_filter.rb +38 -44
  22. data/lib/jekyll/excerpt.rb +3 -3
  23. data/lib/jekyll/filters.rb +140 -22
  24. data/lib/jekyll/filters/url_filters.rb +41 -14
  25. data/lib/jekyll/frontmatter_defaults.rb +15 -20
  26. data/lib/jekyll/hooks.rb +2 -5
  27. data/lib/jekyll/inclusion.rb +32 -0
  28. data/lib/jekyll/liquid_renderer.rb +18 -15
  29. data/lib/jekyll/liquid_renderer/file.rb +10 -0
  30. data/lib/jekyll/liquid_renderer/table.rb +18 -61
  31. data/lib/jekyll/mime.types +53 -11
  32. data/lib/jekyll/page.rb +26 -2
  33. data/lib/jekyll/page_excerpt.rb +25 -0
  34. data/lib/jekyll/path_manager.rb +31 -0
  35. data/lib/jekyll/profiler.rb +58 -0
  36. data/lib/jekyll/reader.rb +4 -1
  37. data/lib/jekyll/readers/collection_reader.rb +1 -0
  38. data/lib/jekyll/readers/data_reader.rb +1 -0
  39. data/lib/jekyll/readers/layout_reader.rb +1 -0
  40. data/lib/jekyll/readers/page_reader.rb +5 -5
  41. data/lib/jekyll/readers/post_reader.rb +2 -1
  42. data/lib/jekyll/readers/static_file_reader.rb +3 -3
  43. data/lib/jekyll/readers/theme_assets_reader.rb +1 -0
  44. data/lib/jekyll/renderer.rb +9 -15
  45. data/lib/jekyll/site.rb +21 -12
  46. data/lib/jekyll/static_file.rb +15 -10
  47. data/lib/jekyll/tags/highlight.rb +2 -4
  48. data/lib/jekyll/tags/include.rb +67 -11
  49. data/lib/jekyll/tags/post_url.rb +8 -5
  50. data/lib/jekyll/theme.rb +19 -10
  51. data/lib/jekyll/url.rb +7 -3
  52. data/lib/jekyll/utils.rb +14 -18
  53. data/lib/jekyll/utils/platforms.rb +1 -1
  54. data/lib/jekyll/utils/win_tz.rb +1 -1
  55. data/lib/jekyll/version.rb +1 -1
  56. data/lib/theme_template/theme.gemspec.erb +1 -4
  57. metadata +33 -36
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1510de5e88a3e6d48fa5eb7686dfafc1cf94b820cd9b44fdd635bff9c306d98b
4
- data.tar.gz: e4f444b21baf087d33f3dd7040c17b2fa00f5ed4a32f3602ee26722d4270ebc3
3
+ metadata.gz: b74631944252558b9ad068a1df651f0890577d11c6ac24d06050fe76e9a41d60
4
+ data.tar.gz: c34826fe92efe4fe968692fa3517c4f8ddf600b9c99af1776d305804e313a1fe
5
5
  SHA512:
6
- metadata.gz: 854691fcc3090fe0292767b7aaa5c20504d5d11c08c9f301398cc5af70d387c002ad804fdf20a1583ab4a93d326425aff205b89554860c6babb84f6154923b85
7
- data.tar.gz: ef22dd4eea32776ef7f25748241f1236431b8fd566bb377d8d66a657ade71e5de836ea149f7c7e0ff3483f471e8da801915261c6e0a110e97a43970707b3b05c
6
+ metadata.gz: d89ea1ca35864a53aa21d21847ef357d33a28f8e094bc4c39bc519c2895ea6e8a87d86669252af4b9431a23634209bf38e909ea7b0686ba22bcac898a43488cc
7
+ data.tar.gz: 950488593a4b255d8196baf07dfdd04a85bd062cf7b612531b6253eb4118d77ab8209290f535621dd2dc6aec2a73f8079092d243aaa002411e855b6264a5c33a
@@ -1,6 +1,8 @@
1
1
  ---
2
+ inherit_from: .rubocop_todo.yml
2
3
 
3
4
  require:
5
+ - rubocop-performance
4
6
  - ./rubocop/jekyll
5
7
 
6
8
  Jekyll/NoPutsAllowed:
@@ -8,7 +10,7 @@ Jekyll/NoPutsAllowed:
8
10
  - rake/*.rake
9
11
 
10
12
  AllCops:
11
- TargetRubyVersion: 2.3
13
+ TargetRubyVersion: 2.4
12
14
  Include:
13
15
  - lib/**/*.rb
14
16
  - test/**/*.rb
@@ -19,30 +21,53 @@ AllCops:
19
21
  - script/**/*
20
22
  - vendor/**/*
21
23
  - tmp/**/*
22
- Layout/AlignHash:
24
+
25
+ Layout/EmptyComment:
26
+ Enabled: false
27
+ Layout/EmptyLinesAroundAttributeAccessor:
28
+ Enabled: true
29
+ Layout/EndAlignment:
30
+ Severity: error
31
+ Layout/HashAlignment:
23
32
  EnforcedHashRocketStyle: table
24
33
  Layout/IndentationWidth:
25
34
  Severity: error
26
- Layout/IndentArray:
35
+ Layout/FirstArrayElementIndentation:
27
36
  EnforcedStyle: consistent
28
- Layout/IndentHash:
37
+ Layout/FirstHashElementIndentation:
29
38
  EnforcedStyle: consistent
39
+ Layout/LineLength:
40
+ Exclude:
41
+ - !ruby/regexp /features\/.*.rb/
42
+ - Rakefile
43
+ - rake/*.rake
44
+ - Gemfile
45
+ Max: 100
46
+ Severity: warning
30
47
  Layout/MultilineMethodCallIndentation:
31
48
  EnforcedStyle: indented
32
49
  Layout/MultilineOperationIndentation:
33
50
  EnforcedStyle: indented
51
+ Layout/SpaceAroundMethodCallOperator:
52
+ Enabled: true
53
+
34
54
  Lint/NestedPercentLiteral:
35
55
  Exclude:
36
56
  - test/test_site.rb
37
- Layout/EmptyComment:
57
+ Lint/DeprecatedOpenSSLConstant:
58
+ Enabled: true
59
+ Lint/MixedRegexpCaptureTypes:
38
60
  Enabled: false
39
- Layout/EndAlignment:
40
- Severity: error
61
+ Lint/RaiseException:
62
+ Enabled: true
63
+ Lint/StructNewOverride:
64
+ Enabled: true
41
65
  Lint/UnreachableCode:
42
66
  Severity: error
43
67
  Lint/Void:
44
68
  Exclude:
45
69
  - lib/jekyll/site.rb
70
+
46
71
  Metrics/AbcSize:
47
72
  Max: 21
48
73
  Metrics/BlockLength:
@@ -63,24 +88,20 @@ Metrics/CyclomaticComplexity:
63
88
  Exclude:
64
89
  - lib/jekyll/utils.rb
65
90
  - lib/jekyll/commands/serve.rb
66
- Metrics/LineLength:
67
- Exclude:
68
- - !ruby/regexp /features\/.*.rb/
69
- - Rakefile
70
- - rake/*.rake
71
- - Gemfile
72
- Max: 100
73
- Severity: warning
91
+ Max: 11
74
92
  Metrics/MethodLength:
75
93
  CountComments: false
76
94
  Max: 20
77
95
  Severity: error
78
96
  Metrics/ModuleLength:
79
97
  Max: 240
98
+ Exclude:
99
+ - lib/jekyll/filters.rb
80
100
  Metrics/ParameterLists:
81
101
  Max: 4
82
102
  Metrics/PerceivedComplexity:
83
103
  Max: 8
104
+
84
105
  Naming/FileName:
85
106
  Enabled: false
86
107
  Naming/HeredocDelimiterNaming:
@@ -92,6 +113,7 @@ Naming/MemoizedInstanceVariableName:
92
113
  - lib/jekyll/drops/site_drop.rb
93
114
  - lib/jekyll/drops/unified_payload_drop.rb
94
115
  - lib/jekyll/page_without_a_file.rb
116
+
95
117
  Security/MarshalLoad:
96
118
  Exclude:
97
119
  - !ruby/regexp /test\/.*.rb$/
@@ -100,6 +122,7 @@ Security/YAMLLoad:
100
122
  Exclude:
101
123
  - !ruby/regexp /features\/.*.rb/
102
124
  - !ruby/regexp /test\/.*.rb$/
125
+
103
126
  Style/AccessModifierDeclarations:
104
127
  Enabled: false
105
128
  Style/Alias:
@@ -109,20 +132,30 @@ Style/AndOr:
109
132
  Style/ClassAndModuleChildren:
110
133
  Exclude:
111
134
  - test/**/*.rb
112
- Style/FrozenStringLiteralComment:
113
- EnforcedStyle: always
114
135
  Style/Documentation:
115
136
  Enabled: false
116
137
  Style/DoubleNegation:
117
138
  Enabled: false
139
+ Style/ExponentialNotation:
140
+ Enabled: true
118
141
  Style/FormatStringToken:
119
142
  Exclude:
120
143
  - lib/jekyll/utils/ansi.rb
144
+ - lib/jekyll/liquid_renderer/table.rb
145
+ - lib/jekyll/profiler.rb
146
+ Style/FrozenStringLiteralComment:
147
+ EnforcedStyle: always
121
148
  Style/GuardClause:
122
149
  Enabled: false
150
+ Style/HashEachMethods:
151
+ Enabled: true
123
152
  Style/HashSyntax:
124
153
  EnforcedStyle: hash_rockets
125
154
  Severity: error
155
+ Style/HashTransformKeys:
156
+ Enabled: false
157
+ Style/HashTransformValues:
158
+ Enabled: true
126
159
  Style/MixinUsage:
127
160
  Exclude:
128
161
  - test/helper.rb
@@ -139,6 +172,12 @@ Style/PercentLiteralDelimiters:
139
172
  "%w": "()"
140
173
  "%W": "()"
141
174
  "%x": "()"
175
+ Style/RedundantFetchBlock:
176
+ Enabled: false
177
+ Style/RedundantRegexpCharacterClass:
178
+ Enabled: true
179
+ Style/RedundantRegexpEscape:
180
+ Enabled: true
142
181
  Style/RegexpLiteral:
143
182
  EnforcedStyle: percent_r
144
183
  Style/RescueModifier:
@@ -148,6 +187,8 @@ Style/SafeNavigation:
148
187
  - lib/jekyll/document.rb
149
188
  Style/SignalException:
150
189
  EnforcedStyle: only_raise
190
+ Style/SlicingWithRange:
191
+ Enabled: false
151
192
  Style/StringLiterals:
152
193
  EnforcedStyle: double_quotes
153
194
  Style/StringLiteralsInInterpolation:
@@ -50,10 +50,12 @@ module Jekyll
50
50
  autoload :EntryFilter, "jekyll/entry_filter"
51
51
  autoload :Errors, "jekyll/errors"
52
52
  autoload :Excerpt, "jekyll/excerpt"
53
+ autoload :PageExcerpt, "jekyll/page_excerpt"
53
54
  autoload :External, "jekyll/external"
54
55
  autoload :FrontmatterDefaults, "jekyll/frontmatter_defaults"
55
56
  autoload :Hooks, "jekyll/hooks"
56
57
  autoload :Layout, "jekyll/layout"
58
+ autoload :Inclusion, "jekyll/inclusion"
57
59
  autoload :Cache, "jekyll/cache"
58
60
  autoload :CollectionReader, "jekyll/readers/collection_reader"
59
61
  autoload :DataReader, "jekyll/readers/data_reader"
@@ -65,8 +67,10 @@ module Jekyll
65
67
  autoload :LogAdapter, "jekyll/log_adapter"
66
68
  autoload :Page, "jekyll/page"
67
69
  autoload :PageWithoutAFile, "jekyll/page_without_a_file"
70
+ autoload :PathManager, "jekyll/path_manager"
68
71
  autoload :PluginManager, "jekyll/plugin_manager"
69
72
  autoload :Publisher, "jekyll/publisher"
73
+ autoload :Profiler, "jekyll/profiler"
70
74
  autoload :Reader, "jekyll/reader"
71
75
  autoload :Regenerator, "jekyll/regenerator"
72
76
  autoload :RelatedPosts, "jekyll/related_posts"
@@ -189,7 +193,7 @@ module Jekyll
189
193
  end
190
194
 
191
195
  # Conditional optimizations
192
- Jekyll::External.require_if_present("liquid-c")
196
+ Jekyll::External.require_if_present("liquid/c")
193
197
  end
194
198
  end
195
199
 
@@ -4,9 +4,59 @@ require "digest"
4
4
 
5
5
  module Jekyll
6
6
  class Cache
7
- # rubocop:disable Style/ClassVars
8
- @@caches = {}
9
- @@disk_cache_enabled = true
7
+ # class-wide base cache
8
+ @base_cache = {}
9
+
10
+ # class-wide directive to write cache to disk is enabled by default
11
+ @disk_cache_enabled = true
12
+
13
+ class << self
14
+ # class-wide cache location
15
+ attr_accessor :cache_dir
16
+
17
+ # class-wide directive to write cache to disk
18
+ attr_reader :disk_cache_enabled
19
+
20
+ # class-wide base cache reader
21
+ attr_reader :base_cache
22
+
23
+ # Disable Marshaling cached items to disk
24
+ def disable_disk_cache!
25
+ @disk_cache_enabled = false
26
+ end
27
+
28
+ # Clear all caches
29
+ def clear
30
+ delete_cache_files
31
+ base_cache.each_value(&:clear)
32
+ end
33
+
34
+ # Compare the current config to the cached config
35
+ # If they are different, clear all caches
36
+ #
37
+ # Returns nothing.
38
+ def clear_if_config_changed(config)
39
+ config = config.inspect
40
+ cache = Jekyll::Cache.new "Jekyll::Cache"
41
+ return if cache.key?("config") && cache["config"] == config
42
+
43
+ clear
44
+ cache = Jekyll::Cache.new "Jekyll::Cache"
45
+ cache["config"] = config
46
+ nil
47
+ end
48
+
49
+ private
50
+
51
+ # Delete all cached items from all caches
52
+ #
53
+ # Returns nothing.
54
+ def delete_cache_files
55
+ FileUtils.rm_rf(@cache_dir) if disk_cache_enabled
56
+ end
57
+ end
58
+
59
+ #
10
60
 
11
61
  # Get an existing named cache, or create a new one if none exists
12
62
  #
@@ -14,27 +64,10 @@ module Jekyll
14
64
  #
15
65
  # Returns nothing.
16
66
  def initialize(name)
17
- @cache = @@caches[name] ||= {}
67
+ @cache = Jekyll::Cache.base_cache[name] ||= {}
18
68
  @name = name.gsub(%r![^\w\s-]!, "-")
19
69
  end
20
70
 
21
- # Set class-wide base_dir
22
- def self.base_dir=(dir_path)
23
- @@base_dir = dir_path
24
- end
25
-
26
- # Disable Marshaling cached items to disk
27
- def self.disable_disk_cache!
28
- @@disk_cache_enabled = false
29
- end
30
- # rubocop:enable Style/ClassVars
31
-
32
- # Clear all caches
33
- def self.clear
34
- delete_cache_files
35
- @@caches.each_value(&:clear)
36
- end
37
-
38
71
  # Clear this particular cache
39
72
  def clear
40
73
  delete_cache_files
@@ -49,7 +82,7 @@ module Jekyll
49
82
  return @cache[key] if @cache.key?(key)
50
83
 
51
84
  path = path_to(hash(key))
52
- if @@disk_cache_enabled && File.file?(path) && File.readable?(path)
85
+ if disk_cache_enabled? && File.file?(path) && File.readable?(path)
53
86
  @cache[key] = load(path)
54
87
  else
55
88
  raise
@@ -61,7 +94,7 @@ module Jekyll
61
94
  # Returns nothing.
62
95
  def []=(key, value)
63
96
  @cache[key] = value
64
- return unless @@disk_cache_enabled
97
+ return unless disk_cache_enabled?
65
98
 
66
99
  path = path_to(hash(key))
67
100
  value = new Hash(value) if value.is_a?(Hash) && !value.default.nil?
@@ -70,9 +103,8 @@ module Jekyll
70
103
  Jekyll.logger.debug "Cache:", "Cannot dump object #{key}"
71
104
  end
72
105
 
73
- # If an item already exists in the cache, retrieve it
74
- # Else execute code block, and add the result to the cache, and return that
75
- # result
106
+ # If an item already exists in the cache, retrieve it.
107
+ # Else execute code block, and add the result to the cache, and return that result.
76
108
  def getset(key)
77
109
  self[key]
78
110
  rescue StandardError
@@ -86,10 +118,7 @@ module Jekyll
86
118
  # Returns nothing.
87
119
  def delete(key)
88
120
  @cache.delete(key)
89
- return unless @@disk_cache_enabled
90
-
91
- path = path_to(hash(key))
92
- File.delete(path)
121
+ File.delete(path_to(hash(key))) if disk_cache_enabled?
93
122
  end
94
123
 
95
124
  # Check if `key` already exists in this cache
@@ -100,40 +129,27 @@ module Jekyll
100
129
  return true if @cache.key?(key)
101
130
  # Otherwise, it might be cached on disk
102
131
  # but we should not consider the disk cache if it is disabled
103
- return false unless @@disk_cache_enabled
132
+ return false unless disk_cache_enabled?
104
133
 
105
134
  path = path_to(hash(key))
106
135
  File.file?(path) && File.readable?(path)
107
136
  end
108
137
 
109
- # Compare the current config to the cached config
110
- # If they are different, clear all caches
111
- #
112
- # Returns nothing.
113
- def self.clear_if_config_changed(config)
114
- config = config.inspect
115
- cache = Jekyll::Cache.new "Jekyll::Cache"
116
- return if cache.key?("config") && cache["config"] == config
117
-
118
- clear
119
- cache = Jekyll::Cache.new "Jekyll::Cache"
120
- cache["config"] = config
121
- nil
138
+ def disk_cache_enabled?
139
+ !!Jekyll::Cache.disk_cache_enabled
122
140
  end
123
141
 
124
142
  private
125
143
 
126
- # Given a hashed key, return the path to where this item would be saved on
127
- # disk
144
+ # Given a hashed key, return the path to where this item would be saved on disk.
128
145
  def path_to(hash = nil)
129
- @base_dir ||= File.join(@@base_dir, @name)
146
+ @base_dir ||= File.join(Jekyll::Cache.cache_dir, @name)
130
147
  return @base_dir if hash.nil?
131
148
 
132
149
  File.join(@base_dir, hash[0..1], hash[2..-1]).freeze
133
150
  end
134
151
 
135
- # Given a key, return a SHA2 hash that can be used for caching this item to
136
- # disk
152
+ # Given a key, return a SHA2 hash that can be used for caching this item to disk.
137
153
  def hash(key)
138
154
  Digest::SHA2.hexdigest(key).freeze
139
155
  end
@@ -142,22 +158,14 @@ module Jekyll
142
158
  #
143
159
  # Returns nothing.
144
160
  def delete_cache_files
145
- FileUtils.rm_rf(path_to) if @@disk_cache_enabled
146
- end
147
-
148
- # Delete all cached items from all caches
149
- #
150
- # Returns nothing.
151
- def self.delete_cache_files
152
- FileUtils.rm_rf(@@base_dir) if @@disk_cache_enabled
161
+ FileUtils.rm_rf(path_to) if disk_cache_enabled?
153
162
  end
154
- private_class_method :delete_cache_files
155
163
 
156
- # Load `path` from disk and return the result
164
+ # Load `path` from disk and return the result.
157
165
  # This MUST NEVER be called in Safe Mode
158
166
  # rubocop:disable Security/MarshalLoad
159
167
  def load(path)
160
- raise unless @@disk_cache_enabled
168
+ raise unless disk_cache_enabled?
161
169
 
162
170
  cached_file = File.open(path, "rb")
163
171
  value = Marshal.load(cached_file)
@@ -166,15 +174,14 @@ module Jekyll
166
174
  end
167
175
  # rubocop:enable Security/MarshalLoad
168
176
 
169
- # Given a path and a value, save value to disk at path
177
+ # Given a path and a value, save value to disk at path.
170
178
  # This should NEVER be called in Safe Mode
171
179
  #
172
180
  # Returns nothing.
173
181
  def dump(path, value)
174
- return unless @@disk_cache_enabled
182
+ return unless disk_cache_enabled?
175
183
 
176
- dir = File.dirname(path)
177
- FileUtils.mkdir_p(dir)
184
+ FileUtils.mkdir_p(File.dirname(path))
178
185
  File.open(path, "wb") do |cached_file|
179
186
  Marshal.dump(value, cached_file)
180
187
  end
@@ -3,7 +3,7 @@
3
3
  module Jekyll
4
4
  # Handles the cleanup of a site's destination before it is built.
5
5
  class Cleaner
6
- HIDDEN_FILE_REGEX = %r!\/\.{1,2}$!.freeze
6
+ HIDDEN_FILE_REGEX = %r!/\.{1,2}$!.freeze
7
7
  attr_reader :site
8
8
 
9
9
  def initialize(site)
@@ -66,7 +66,7 @@ module Jekyll
66
66
  #
67
67
  # Returns a Set with the directory paths
68
68
  def new_dirs
69
- @new_dirs ||= new_files.map { |file| parent_dirs(file) }.flatten.to_set
69
+ @new_dirs ||= new_files.flat_map { |file| parent_dirs(file) }.to_set
70
70
  end
71
71
 
72
72
  # Private: The list of parent directories of a given file
@@ -77,7 +77,7 @@ module Jekyll
77
77
  if parent_dir == site.dest
78
78
  []
79
79
  else
80
- [parent_dir] + parent_dirs(parent_dir)
80
+ parent_dirs(parent_dir).unshift(parent_dir)
81
81
  end
82
82
  end
83
83
 
@@ -94,7 +94,7 @@ module Jekyll
94
94
  #
95
95
  # Returns a Set with the directory paths
96
96
  def keep_dirs
97
- site.keep_files.map { |file| parent_dirs(site.in_dest_dir(file)) }.flatten.to_set
97
+ site.keep_files.flat_map { |file| parent_dirs(site.in_dest_dir(file)) }.to_set
98
98
  end
99
99
 
100
100
  # Private: Creates a regular expression from the config's keep_files array
@@ -105,7 +105,7 @@ module Jekyll
105
105
  #
106
106
  # Returns the regular expression
107
107
  def keep_file_regex
108
- %r!\A#{Regexp.quote(site.dest)}\/(#{Regexp.union(site.keep_files).source})!
108
+ %r!\A#{Regexp.quote(site.dest)}/(#{Regexp.union(site.keep_files).source})!
109
109
  end
110
110
  end
111
111
  end