jekyll 3.3.1 → 3.4.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of jekyll might be problematic. Click here for more details.

Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +14 -0
  3. data/LICENSE +1 -1
  4. data/README.markdown +1 -2
  5. data/lib/jekyll.rb +5 -1
  6. data/lib/jekyll/collection.rb +11 -4
  7. data/lib/jekyll/commands/doctor.rb +1 -1
  8. data/lib/jekyll/commands/new.rb +11 -7
  9. data/lib/jekyll/commands/serve.rb +6 -6
  10. data/lib/jekyll/commands/serve/servlet.rb +1 -1
  11. data/lib/jekyll/configuration.rb +5 -5
  12. data/lib/jekyll/converters/markdown/kramdown_parser.rb +1 -1
  13. data/lib/jekyll/converters/markdown/redcarpet_parser.rb +1 -1
  14. data/lib/jekyll/document.rb +4 -4
  15. data/lib/jekyll/drops/jekyll_drop.rb +1 -1
  16. data/lib/jekyll/entry_filter.rb +1 -1
  17. data/lib/jekyll/excerpt.rb +1 -2
  18. data/lib/jekyll/external.rb +1 -1
  19. data/lib/jekyll/filters.rb +7 -32
  20. data/lib/jekyll/filters/grouping_filters.rb +63 -0
  21. data/lib/jekyll/hooks.rb +7 -7
  22. data/lib/jekyll/log_adapter.rb +1 -1
  23. data/lib/jekyll/page.rb +3 -3
  24. data/lib/jekyll/plugin.rb +1 -1
  25. data/lib/jekyll/reader.rb +1 -1
  26. data/lib/jekyll/readers/data_reader.rb +6 -6
  27. data/lib/jekyll/readers/post_reader.rb +1 -1
  28. data/lib/jekyll/regenerator.rb +1 -1
  29. data/lib/jekyll/related_posts.rb +3 -9
  30. data/lib/jekyll/site.rb +2 -2
  31. data/lib/jekyll/static_file.rb +3 -3
  32. data/lib/jekyll/tags/highlight.rb +2 -2
  33. data/lib/jekyll/tags/include.rb +9 -5
  34. data/lib/jekyll/tags/post_url.rb +3 -2
  35. data/lib/jekyll/theme_builder.rb +1 -1
  36. data/lib/jekyll/url.rb +4 -3
  37. data/lib/jekyll/utils.rb +3 -1
  38. data/lib/jekyll/utils/ansi.rb +1 -1
  39. data/lib/jekyll/utils/exec.rb +25 -0
  40. data/lib/jekyll/utils/win_tz.rb +73 -0
  41. data/lib/jekyll/version.rb +1 -1
  42. data/lib/site_template/_posts/0000-00-00-welcome-to-jekyll.markdown.erb +1 -1
  43. data/lib/site_template/about.md +1 -1
  44. data/lib/theme_template/LICENSE.txt.erb +1 -1
  45. data/lib/theme_template/README.md.erb +2 -2
  46. metadata +36 -33
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 68bb27761f573ec04ae1397a773f64e1d8f4545e
4
- data.tar.gz: bd8993ae63044fd48be9ff85bcb0ee5ff7c3dc4c
3
+ metadata.gz: 68e5c34fa249f9c27cbe1c4a0ed36de42d15d715
4
+ data.tar.gz: 256fdf447db9bcfc643f895db6454c74cf67b0f5
5
5
  SHA512:
6
- metadata.gz: bcd138cfb2d0629a83d4b2c16c4fd9d4635cb053ba14302611820be25acef3a475e0956f65933eb4641133769d7e62abdecd60f11636a53f2b70aa945bb2d74d
7
- data.tar.gz: 2addd77ace5a02fae654c07fcc2d2db6d993ac8036771333cbb023d68a09c622d6433a8aefc42d9ab69b57f0972d9f75c0118924a89b0b9bbbec2384827ab907
6
+ metadata.gz: ee35404dd5880c76e378d11c8e7fb35cdb426bf8fa51b047bc942c6f008d076bed83caeadd0fc504787cf01ceade697b0f48c2eda20b081e26d6d102a9599db7
7
+ data.tar.gz: 07cf83c87ec8567f3d6c03c434991cd35248269401f42c0f11dc061a24c105ebe803f0827b746766e82c2ac4e301709c32e338a857c8948ba1a4a2f3ee13e899
@@ -22,6 +22,8 @@ Metrics/BlockLength:
22
22
  Exclude:
23
23
  - test/**/*.rb
24
24
  - lib/jekyll/configuration.rb
25
+ - rake/*.rake
26
+ - jekyll.gemspec
25
27
  Metrics/ClassLength:
26
28
  Exclude:
27
29
  - !ruby/regexp /features\/.*.rb$/
@@ -32,6 +34,8 @@ Metrics/CyclomaticComplexity:
32
34
  Metrics/LineLength:
33
35
  Exclude:
34
36
  - !ruby/regexp /features\/.*.rb/
37
+ - Rakefile
38
+ - rake/*.rake
35
39
  Max: 90
36
40
  Severity: warning
37
41
  Metrics/MethodLength:
@@ -44,6 +48,14 @@ Metrics/ParameterLists:
44
48
  Max: 4
45
49
  Metrics/PerceivedComplexity:
46
50
  Max: 8
51
+ Security/MarshalLoad:
52
+ Exclude:
53
+ - !ruby/regexp /test\/.*.rb$/
54
+ - lib/jekyll/regenerator.rb
55
+ Security/YAMLLoad:
56
+ Exclude:
57
+ - !ruby/regexp /features\/.*.rb/
58
+ - !ruby/regexp /test\/.*.rb$/
47
59
  Style/Alias:
48
60
  Enabled: false
49
61
  Style/AlignArray:
@@ -127,5 +139,7 @@ Style/StringLiterals:
127
139
  EnforcedStyle: double_quotes
128
140
  Style/StringLiteralsInInterpolation:
129
141
  EnforcedStyle: double_quotes
142
+ Style/TrailingCommaInLiteral:
143
+ EnforcedStyleForMultiline: consistent_comma
130
144
  Style/UnneededCapitalW:
131
145
  Enabled: false
data/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2008-2016 Tom Preston-Werner
3
+ Copyright (c) 2008-2017 Tom Preston-Werner and Jekyll contributors
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
@@ -43,8 +43,7 @@ conduct.
43
43
  Please adhere to this code of conduct in any interactions you have in the
44
44
  Jekyll community. It is strictly enforced on all official Jekyll
45
45
  repositories, websites, and resources. If you encounter someone violating
46
- these terms, please let a maintainer ([@parkr](https://github.com/parkr), [@envygeeks](https://github.com/envygeeks), or [@mattr-](https://github.com/mattr-)) know
47
- and we will address it as soon as possible.
46
+ these terms, please let a maintainer ([@parkr](https://github.com/parkr), [@envygeeks](https://github.com/envygeeks), [@mattr-](https://github.com/mattr-), or [@alfredxing](https://github.com/alfredxing)) know and we will address it as soon as possible.
48
47
 
49
48
  ## Diving In
50
49
 
@@ -119,7 +119,11 @@ module Jekyll
119
119
  # Returns nothing
120
120
  # rubocop:disable Style/AccessorMethodName
121
121
  def set_timezone(timezone)
122
- ENV["TZ"] = timezone
122
+ ENV["TZ"] = if Utils::Platforms.really_windows?
123
+ Utils::WinTZ.calculate(timezone)
124
+ else
125
+ timezone
126
+ end
123
127
  end
124
128
  # rubocop:enable Style/AccessorMethodName
125
129
 
@@ -32,8 +32,8 @@ module Jekyll
32
32
  # Override of method_missing to check in @data for the key.
33
33
  def method_missing(method, *args, &blck)
34
34
  if docs.respond_to?(method.to_sym)
35
- Jekyll.logger.warn "Deprecation:", "#{label}.#{method} should be changed to" \
36
- "#{label}.docs.#{method}."
35
+ Jekyll.logger.warn "Deprecation:",
36
+ "#{label}.#{method} should be changed to #{label}.docs.#{method}."
37
37
  Jekyll.logger.warn "", "Called by #{caller.first}."
38
38
  docs.public_send(method.to_sym, *args, &blck)
39
39
  else
@@ -197,6 +197,7 @@ module Jekyll
197
197
  end
198
198
 
199
199
  private
200
+
200
201
  def read_document(full_path)
201
202
  doc = Jekyll::Document.new(full_path, :site => site, :collection => self)
202
203
  doc.read
@@ -208,14 +209,20 @@ module Jekyll
208
209
  end
209
210
 
210
211
  private
212
+
211
213
  def read_static_file(file_path, full_path)
212
214
  relative_dir = Jekyll.sanitized_path(
213
215
  relative_directory,
214
216
  File.dirname(file_path)
215
217
  ).chomp("/.")
216
218
 
217
- files << StaticFile.new(site, site.source, relative_dir,
218
- File.basename(full_path), self)
219
+ files << StaticFile.new(
220
+ site,
221
+ site.source,
222
+ relative_dir,
223
+ File.basename(full_path),
224
+ self
225
+ )
219
226
  end
220
227
  end
221
228
  end
@@ -35,7 +35,7 @@ module Jekyll
35
35
  fsnotify_buggy?(site),
36
36
  !deprecated_relative_permalinks(site),
37
37
  !conflicting_urls(site),
38
- !urls_only_differ_by_case(site)
38
+ !urls_only_differ_by_case(site),
39
39
  ].all?
40
40
  end
41
41
 
@@ -84,6 +84,10 @@ gem "minima", "~> 2.0"
84
84
  group :jekyll_plugins do
85
85
  gem "jekyll-feed", "~> 0.6"
86
86
  end
87
+
88
+ # Windows does not include zoneinfo files, so bundle the tzinfo-data gem
89
+ gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
90
+
87
91
  RUBY
88
92
  end
89
93
 
@@ -121,23 +125,23 @@ RUBY
121
125
  # unless the user opts to generate a blank blog or skip 'bundle install'.
122
126
 
123
127
  def after_install(path, options = {})
124
- Jekyll.logger.info "New jekyll site installed in #{path.cyan}."
125
- Jekyll.logger.info "Bundle install skipped." if options["skip-bundle"]
126
-
127
128
  unless options["blank"] || options["skip-bundle"]
128
129
  bundle_install path
129
130
  end
131
+
132
+ Jekyll.logger.info "New jekyll site installed in #{path.cyan}."
133
+ Jekyll.logger.info "Bundle install skipped." if options["skip-bundle"]
130
134
  end
131
135
 
132
136
  def bundle_install(path)
133
137
  Jekyll::External.require_with_graceful_fail "bundler"
134
138
  Jekyll.logger.info "Running bundle install in #{path.cyan}..."
135
139
  Dir.chdir(path) do
136
- if ENV["CI"]
137
- system("bundle", "install", "--quiet")
138
- else
139
- system("bundle", "install")
140
+ process, output = Jekyll::Utils::Exec.run("bundle", "install")
141
+ output.to_s.each_line do |line|
142
+ Jekyll.logger.info("Bundler:".green, line.strip) unless line.to_s.empty?
140
143
  end
144
+ raise SystemExit unless process.success?
141
145
  end
142
146
  end
143
147
  end
@@ -10,9 +10,9 @@ module Jekyll
10
10
  "ssl_key" => ["--ssl-key [KEY]", "X.509 (SSL) Private Key."],
11
11
  "port" => ["-P", "--port [PORT]", "Port to listen on"],
12
12
  "show_dir_listing" => ["--show-dir-listing",
13
- "Show a directory listing instead of loading your index file."],
13
+ "Show a directory listing instead of loading your index file.",],
14
14
  "skip_initial_build" => ["skip_initial_build", "--skip-initial-build",
15
- "Skips the initial site build which occurs before the server is started."]
15
+ "Skips the initial site build which occurs before the server is started.",],
16
16
  }.freeze
17
17
 
18
18
  #
@@ -88,7 +88,7 @@ module Jekyll
88
88
  index.rhtml
89
89
  index.cgi
90
90
  index.xml
91
- )
91
+ ),
92
92
  }
93
93
 
94
94
  opts[:DirectoryIndex] = [] if opts[:JekyllOptions]["show_dir_listing"]
@@ -116,8 +116,8 @@ module Jekyll
116
116
  WEBrick::Config::FileHandler.merge({
117
117
  :FancyIndexing => true,
118
118
  :NondisclosureName => [
119
- ".ht*", "~*"
120
- ]
119
+ ".ht*", "~*",
120
+ ],
121
121
  })
122
122
  end
123
123
 
@@ -139,7 +139,7 @@ module Jekyll
139
139
  :prefix => ssl_enabled ? "https" : "http",
140
140
  :address => address,
141
141
  :port => port,
142
- :baseurl => baseurl ? "#{baseurl}/" : ""
142
+ :baseurl => baseurl ? "#{baseurl}/" : "",
143
143
  })
144
144
  end
145
145
 
@@ -6,7 +6,7 @@ module Jekyll
6
6
  class Servlet < WEBrick::HTTPServlet::FileHandler
7
7
  DEFAULTS = {
8
8
  "Cache-Control" => "private, max-age=0, proxy-revalidate, " \
9
- "no-store, no-cache, must-revalidate"
9
+ "no-store, no-cache, must-revalidate",
10
10
  }.freeze
11
11
 
12
12
  def initialize(server, root, callbacks)
@@ -58,15 +58,15 @@ module Jekyll
58
58
  "defaults" => [],
59
59
 
60
60
  "liquid" => {
61
- "error_mode" => "warn"
61
+ "error_mode" => "warn",
62
62
  },
63
63
 
64
64
  "rdiscount" => {
65
- "extensions" => []
65
+ "extensions" => [],
66
66
  },
67
67
 
68
68
  "redcarpet" => {
69
- "extensions" => []
69
+ "extensions" => [],
70
70
  },
71
71
 
72
72
  "kramdown" => {
@@ -76,8 +76,8 @@ module Jekyll
76
76
  "smart_quotes" => "lsquo,rsquo,ldquo,rdquo",
77
77
  "input" => "GFM",
78
78
  "hard_wrap" => false,
79
- "footnote_nr" => 1
80
- }
79
+ "footnote_nr" => 1,
80
+ },
81
81
  }.map { |k, v| [k, v.freeze] }].freeze
82
82
 
83
83
  class << self
@@ -11,7 +11,7 @@ module Jekyll
11
11
  "line_numbers" => "inline",
12
12
  "line_number_start" => 1,
13
13
  "tab_width" => 4,
14
- "wrap" => "div"
14
+ "wrap" => "div",
15
15
  }.freeze
16
16
 
17
17
  def initialize(config)
@@ -21,7 +21,7 @@ class Jekyll::Converters::Markdown::RedcarpetParser
21
21
  code,
22
22
  {
23
23
  :lexer => lang,
24
- :options => { :encoding => "utf-8" }
24
+ :options => { :encoding => "utf-8" },
25
25
  }
26
26
  ),
27
27
  lang
@@ -9,7 +9,7 @@ module Jekyll
9
9
 
10
10
  YAML_FRONT_MATTER_REGEXP = %r!\A(---\s*\n.*?\n?)^((---|\.\.\.)\s*$\n?)!m
11
11
  DATELESS_FILENAME_MATCHER = %r!^(?:.+/)*(.*)(\.[^.]+)$!
12
- DATE_FILENAME_MATCHER = %r!^(?:.+/)*(\d+-\d+-\d+)-(.*)(\.[^.]+)$!
12
+ DATE_FILENAME_MATCHER = %r!^(?:.+/)*(\d{4}-\d{2}-\d{2})-(.*)(\.[^.]+)$!
13
13
 
14
14
  # Create a new Document.
15
15
  #
@@ -196,7 +196,7 @@ module Jekyll
196
196
  @url = URL.new({
197
197
  :template => url_template,
198
198
  :placeholders => url_placeholders,
199
- :permalink => permalink
199
+ :permalink => permalink,
200
200
  }).to_s
201
201
  end
202
202
 
@@ -469,14 +469,14 @@ module Jekyll
469
469
  "category",
470
470
  "categories"
471
471
  )
472
- ).map(&:to_s).flatten.uniq
472
+ ).map(&:to_s).flatten.uniq,
473
473
  })
474
474
  end
475
475
 
476
476
  private
477
477
  def populate_tags
478
478
  merge_data!({
479
- "tags" => Utils.pluralized_array_from_hash(data, "tag", "tags").flatten
479
+ "tags" => Utils.pluralized_array_from_hash(data, "tag", "tags").flatten,
480
480
  })
481
481
  end
482
482
 
@@ -20,7 +20,7 @@ module Jekyll
20
20
  def to_h
21
21
  @to_h ||= {
22
22
  "version" => version,
23
- "environment" => environment
23
+ "environment" => environment,
24
24
  }
25
25
  end
26
26
 
@@ -2,7 +2,7 @@ module Jekyll
2
2
  class EntryFilter
3
3
  attr_reader :site
4
4
  SPECIAL_LEADING_CHARACTERS = [
5
- ".", "_", "#", "~"
5
+ ".", "_", "#", "~",
6
6
  ].freeze
7
7
 
8
8
  def initialize(site, base_directory = nil)
@@ -30,8 +30,7 @@ module Jekyll
30
30
  @data
31
31
  end
32
32
 
33
- def trigger_hooks(*)
34
- end
33
+ def trigger_hooks(*); end
35
34
 
36
35
  # 'Path' of the excerpt.
37
36
  #
@@ -48,7 +48,7 @@ In order to use Jekyll as currently configured, you'll need to install this gem.
48
48
 
49
49
  The full error message from Ruby is: '#{e.message}'
50
50
 
51
- If you run into trouble, you can find helpful resources at http://jekyllrb.com/help/!
51
+ If you run into trouble, you can find helpful resources at https://jekyllrb.com/help/!
52
52
  MSG
53
53
  raise Jekyll::Errors::MissingDependencyException, name
54
54
  end
@@ -1,4 +1,4 @@
1
- require "uri"
1
+ require "addressable/uri"
2
2
  require "json"
3
3
  require "date"
4
4
  require "liquid"
@@ -8,6 +8,8 @@ require_all "jekyll/filters"
8
8
  module Jekyll
9
9
  module Filters
10
10
  include URLFilters
11
+ include GroupingFilters
12
+
11
13
  # Convert a Markdown string into HTML output.
12
14
  #
13
15
  # input - The Markdown String to convert.
@@ -150,7 +152,7 @@ module Jekyll
150
152
  #
151
153
  # Returns the escaped String.
152
154
  def uri_escape(input)
153
- URI.escape(input)
155
+ Addressable::URI.encode(input)
154
156
  end
155
157
 
156
158
  # Replace any whitespace in the input string with a single space
@@ -175,6 +177,7 @@ module Jekyll
175
177
  # word "and" for the last one.
176
178
  #
177
179
  # array - The Array of Strings to join.
180
+ # connector - Word used to connect the last 2 items in the array
178
181
  #
179
182
  # Examples
180
183
  #
@@ -182,8 +185,7 @@ module Jekyll
182
185
  # # => "apples, oranges, and grapes"
183
186
  #
184
187
  # Returns the formatted String.
185
- def array_to_sentence_string(array)
186
- connector = "and"
188
+ def array_to_sentence_string(array, connector = "and")
187
189
  case array.length
188
190
  when 0
189
191
  ""
@@ -205,29 +207,6 @@ module Jekyll
205
207
  as_liquid(input).to_json
206
208
  end
207
209
 
208
- # Group an array of items by a property
209
- #
210
- # input - the inputted Enumerable
211
- # property - the property
212
- #
213
- # Returns an array of Hashes, each looking something like this:
214
- # {"name" => "larry"
215
- # "items" => [...] } # all the items where `property` == "larry"
216
- def group_by(input, property)
217
- if groupable?(input)
218
- input.group_by { |item| item_property(item, property).to_s }
219
- .each_with_object([]) do |item, array|
220
- array << {
221
- "name" => item.first,
222
- "items" => item.last,
223
- "size" => item.last.size
224
- }
225
- end
226
- else
227
- input
228
- end
229
- end
230
-
231
210
  # Filter an array of objects
232
211
  #
233
212
  # input - the object array
@@ -381,11 +360,6 @@ module Jekyll
381
360
  end.localtime
382
361
  end
383
362
 
384
- private
385
- def groupable?(element)
386
- element.respond_to?(:group_by)
387
- end
388
-
389
363
  private
390
364
  def item_property(item, property)
391
365
  if item.respond_to?(:to_liquid)
@@ -436,6 +410,7 @@ module Jekyll
436
410
 
437
411
  condition
438
412
  end
413
+
439
414
  end
440
415
  end
441
416
 
@@ -0,0 +1,63 @@
1
+ module Jekyll
2
+ module Filters
3
+ module GroupingFilters
4
+ # Group an array of items by a property
5
+ #
6
+ # input - the inputted Enumerable
7
+ # property - the property
8
+ #
9
+ # Returns an array of Hashes, each looking something like this:
10
+ # {"name" => "larry"
11
+ # "items" => [...] } # all the items where `property` == "larry"
12
+ def group_by(input, property)
13
+ if groupable?(input)
14
+ groups = input.group_by { |item| item_property(item, property).to_s }
15
+ grouped_array(groups)
16
+ else
17
+ input
18
+ end
19
+ end
20
+
21
+ # Group an array of items by an expression
22
+ #
23
+ # input - the object array
24
+ # variable - the variable to assign each item to in the expression
25
+ # expression -a Liquid comparison expression passed in as a string
26
+ #
27
+ # Returns the filtered array of objects
28
+ def group_by_exp(input, variable, expression)
29
+ return input unless groupable?(input)
30
+
31
+ parsed_expr = parse_expression(expression)
32
+ @context.stack do
33
+ groups = input.group_by do |item|
34
+ @context[variable] = item
35
+ parsed_expr.render(@context)
36
+ end
37
+ grouped_array(groups)
38
+ end
39
+ end
40
+
41
+ private
42
+ def parse_expression(str)
43
+ Liquid::Variable.new(str, {})
44
+ end
45
+
46
+ private
47
+ def groupable?(element)
48
+ element.respond_to?(:group_by)
49
+ end
50
+
51
+ private
52
+ def grouped_array(groups)
53
+ groups.each_with_object([]) do |item, array|
54
+ array << {
55
+ "name" => item.first,
56
+ "items" => item.last,
57
+ "size" => item.last.size,
58
+ }
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
@@ -6,7 +6,7 @@ module Jekyll
6
6
  PRIORITY_MAP = {
7
7
  :low => 10,
8
8
  :normal => 20,
9
- :high => 30
9
+ :high => 30,
10
10
  }.freeze
11
11
 
12
12
  # initial empty hooks
@@ -17,26 +17,26 @@ module Jekyll
17
17
  :post_read => [],
18
18
  :pre_render => [],
19
19
  :post_render => [],
20
- :post_write => []
20
+ :post_write => [],
21
21
  },
22
22
  :pages => {
23
23
  :post_init => [],
24
24
  :pre_render => [],
25
25
  :post_render => [],
26
- :post_write => []
26
+ :post_write => [],
27
27
  },
28
28
  :posts => {
29
29
  :post_init => [],
30
30
  :pre_render => [],
31
31
  :post_render => [],
32
- :post_write => []
32
+ :post_write => [],
33
33
  },
34
34
  :documents => {
35
35
  :post_init => [],
36
36
  :pre_render => [],
37
37
  :post_render => [],
38
- :post_write => []
39
- }
38
+ :post_write => [],
39
+ },
40
40
  }
41
41
 
42
42
  # map of all hooks and their priorities
@@ -64,7 +64,7 @@ module Jekyll
64
64
  :post_init => [],
65
65
  :pre_render => [],
66
66
  :post_render => [],
67
- :post_write => []
67
+ :post_write => [],
68
68
  }
69
69
 
70
70
  unless @registry[owner][event]
@@ -6,7 +6,7 @@ module Jekyll
6
6
  :debug => ::Logger::DEBUG,
7
7
  :info => ::Logger::INFO,
8
8
  :warn => ::Logger::WARN,
9
- :error => ::Logger::ERROR
9
+ :error => ::Logger::ERROR,
10
10
  }.freeze
11
11
 
12
12
  # Public: Create a new instance of a log writer
@@ -58,7 +58,7 @@ module Jekyll
58
58
 
59
59
  # The generated directory into which the page will be placed
60
60
  # upon generation. This is derived from the permalink or, if
61
- # permalink is absent, we be '/'
61
+ # permalink is absent, will be '/'
62
62
  #
63
63
  # Returns the String destination directory.
64
64
  def dir
@@ -98,7 +98,7 @@ module Jekyll
98
98
  @url ||= URL.new({
99
99
  :template => template,
100
100
  :placeholders => url_placeholders,
101
- :permalink => permalink
101
+ :permalink => permalink,
102
102
  }).to_s
103
103
  end
104
104
 
@@ -108,7 +108,7 @@ module Jekyll
108
108
  {
109
109
  :path => @dir,
110
110
  :basename => basename,
111
- :output_ext => output_ext
111
+ :output_ext => output_ext,
112
112
  }
113
113
  end
114
114
 
@@ -5,7 +5,7 @@ module Jekyll
5
5
  :highest => 100,
6
6
  :lowest => -100,
7
7
  :normal => 0,
8
- :high => 10
8
+ :high => 10,
9
9
  }.freeze
10
10
 
11
11
  #
@@ -71,7 +71,7 @@ module Jekyll
71
71
  #
72
72
  # Returns nothing.
73
73
  def retrieve_dirs(_base, dir, dot_dirs)
74
- dot_dirs.map do |file|
74
+ dot_dirs.each do |file|
75
75
  dir_path = site.in_source_dir(dir, file)
76
76
  rel_path = File.join(dir, file)
77
77
  unless @site.dest.sub(%r!/$!, "") == dir_path
@@ -7,20 +7,20 @@ module Jekyll
7
7
  @entry_filter = EntryFilter.new(site)
8
8
  end
9
9
 
10
- # Read all the files in <source>/<dir>/_drafts and create a new Draft
11
- # object with each one.
10
+ # Read all the files in <dir> and adds them to @content
12
11
  #
13
12
  # dir - The String relative path of the directory to read.
14
13
  #
15
- # Returns nothing.
14
+ # Returns @content, a Hash of the .yaml, .yml,
15
+ # .json, and .csv files in the base directory
16
16
  def read(dir)
17
17
  base = site.in_source_dir(dir)
18
18
  read_data_to(base, @content)
19
19
  @content
20
20
  end
21
21
 
22
- # Read and parse all yaml files under <dir> and add them to the
23
- # <data> variable.
22
+ # Read and parse all .yaml, .yml, .json, and .csv
23
+ # files under <dir> and add them to the <data> variable.
24
24
  #
25
25
  # dir - The string absolute path of the directory to read.
26
26
  # data - The variable to which data will be added.
@@ -54,7 +54,7 @@ module Jekyll
54
54
  when ".csv"
55
55
  CSV.read(path, {
56
56
  :headers => true,
57
- :encoding => site.config["encoding"]
57
+ :encoding => site.config["encoding"],
58
58
  }).map(&:to_hash)
59
59
  else
60
60
  SafeYAML.load_file(path)
@@ -57,7 +57,7 @@ module Jekyll
57
57
  path = @site.in_source_dir(File.join(dir, magic_dir, entry))
58
58
  Document.new(path, {
59
59
  :site => @site,
60
- :collection => @site.posts
60
+ :collection => @site.posts,
61
61
  })
62
62
  end.reject(&:nil?)
63
63
  end
@@ -40,7 +40,7 @@ module Jekyll
40
40
 
41
41
  metadata[path] = {
42
42
  "mtime" => File.mtime(path),
43
- "deps" => []
43
+ "deps" => [],
44
44
  }
45
45
  cache[path] = true
46
46
  end
@@ -26,15 +26,15 @@ module Jekyll
26
26
  def build_index
27
27
  self.class.lsi ||= begin
28
28
  lsi = ClassifierReborn::LSI.new(:auto_rebuild => false)
29
- display("Populating LSI...")
29
+ Jekyll.logger.info("Populating LSI...")
30
30
 
31
31
  site.posts.docs.each do |x|
32
32
  lsi.add_item(x)
33
33
  end
34
34
 
35
- display("Rebuilding index...")
35
+ Jekyll.logger.info("Rebuilding index...")
36
36
  lsi.build_index
37
- display("")
37
+ Jekyll.logger.info("")
38
38
  lsi
39
39
  end
40
40
  end
@@ -46,11 +46,5 @@ module Jekyll
46
46
  def most_recent_posts
47
47
  @most_recent_posts ||= (site.posts.docs.reverse - [post]).first(10)
48
48
  end
49
-
50
- def display(output)
51
- $stdout.print("\n")
52
- $stdout.print(Jekyll.logger.formatted_topic(output))
53
- $stdout.flush
54
- end
55
49
  end
56
50
  end
@@ -302,7 +302,7 @@ module Jekyll
302
302
  Jekyll.logger.abort_with "Since v3.0, permalinks for pages" \
303
303
  " in subfolders must be relative to the" \
304
304
  " site source directory, not the parent" \
305
- " directory. Check http://jekyllrb.com/docs/upgrading/"\
305
+ " directory. Check https://jekyllrb.com/docs/upgrading/"\
306
306
  " for more info."
307
307
  end
308
308
  end
@@ -435,7 +435,7 @@ module Jekyll
435
435
  private
436
436
  def configure_include_paths
437
437
  @includes_load_paths = Array(in_source_dir(config["includes_dir"].to_s))
438
- @includes_load_paths << theme.includes_path if self.theme
438
+ @includes_load_paths << theme.includes_path if theme && theme.includes_path
439
439
  end
440
440
 
441
441
  private
@@ -101,7 +101,7 @@ module Jekyll
101
101
  "name" => name,
102
102
  "extname" => extname,
103
103
  "modified_time" => modified_time,
104
- "path" => File.join("", relative_path)
104
+ "path" => File.join("", relative_path),
105
105
  }
106
106
  end
107
107
 
@@ -112,7 +112,7 @@ module Jekyll
112
112
  @collection.relative_directory.size..relative_path.size],
113
113
  :output_ext => "",
114
114
  :name => "",
115
- :title => ""
115
+ :title => "",
116
116
  }
117
117
  end
118
118
 
@@ -125,7 +125,7 @@ module Jekyll
125
125
  else
126
126
  ::Jekyll::URL.new({
127
127
  :template => @collection.url_template,
128
- :placeholders => placeholders
128
+ :placeholders => placeholders,
129
129
  })
130
130
  end.to_s.gsub(%r!/$!, "")
131
131
  end
@@ -54,7 +54,7 @@ eos
54
54
  [:hl_lines, opts.fetch(:hl_lines, nil)],
55
55
  [:linenos, opts.fetch(:linenos, nil)],
56
56
  [:encoding, opts.fetch(:encoding, "utf-8")],
57
- [:cssclass, opts.fetch(:cssclass, nil)]
57
+ [:cssclass, opts.fetch(:cssclass, nil)],
58
58
  ].reject { |f| f.last.nil? }]
59
59
  else
60
60
  opts
@@ -125,7 +125,7 @@ eos
125
125
  def add_code_tag(code)
126
126
  code_attributes = [
127
127
  "class=\"language-#{@lang.to_s.tr("+", "-")}\"",
128
- "data-lang=\"#{@lang}\""
128
+ "data-lang=\"#{@lang}\"",
129
129
  ].join(" ")
130
130
  "<figure class=\"highlight\"><pre><code #{code_attributes}>"\
131
131
  "#{code.chomp}</code></pre></figure>"
@@ -112,8 +112,8 @@ eos
112
112
  def locate_include_file(context, file, safe)
113
113
  includes_dirs = tag_includes_dirs(context)
114
114
  includes_dirs.each do |dir|
115
- path = File.join(dir, file)
116
- return path if valid_include_file?(path, dir, safe)
115
+ path = File.join(dir.to_s, file.to_s)
116
+ return path if valid_include_file?(path, dir.to_s, safe)
117
117
  end
118
118
  raise IOError, "Could not locate the included file '#{file}' in any of "\
119
119
  "#{includes_dirs}. Ensure it exists in one of those directories and, "\
@@ -155,15 +155,19 @@ eos
155
155
  if cached_partial.key?(path)
156
156
  cached_partial[path]
157
157
  else
158
- cached_partial[path] = context.registers[:site]
158
+ unparsed_file = context.registers[:site]
159
159
  .liquid_renderer
160
160
  .file(path)
161
- .parse(read_file(path, context))
161
+ begin
162
+ cached_partial[path] = unparsed_file.parse(read_file(path, context))
163
+ rescue Liquid::SyntaxError => ex
164
+ raise IncludeTagError.new(ex.message, path)
165
+ end
162
166
  end
163
167
  end
164
168
 
165
169
  def valid_include_file?(path, dir, safe)
166
- !(outside_site_source?(path, dir, safe) || !File.exist?(path))
170
+ !outside_site_source?(path, dir, safe) && File.file?(path)
167
171
  end
168
172
 
169
173
  def outside_site_source?(path, dir, safe)
@@ -14,8 +14,9 @@ module Jekyll
14
14
  "'#{name}' does not contain valid date and/or title."
15
15
  end
16
16
 
17
- @name_regex = %r!^_posts/#{path}#{date}-#{slug}\.[^.]+|
18
- ^#{path}_posts/?#{date}-#{slug}\.[^.]+!x
17
+ escaped_slug = Regexp.escape(slug)
18
+ @name_regex = %r!^_posts/#{path}#{date}-#{escaped_slug}\.[^.]+|
19
+ ^#{path}_posts/?#{date}-#{escaped_slug}\.[^.]+!x
19
20
  end
20
21
 
21
22
  def post_date
@@ -28,7 +28,7 @@ class Jekyll::ThemeBuilder
28
28
  def template_file(filename)
29
29
  [
30
30
  root.join("theme_template", "#{filename}.erb"),
31
- root.join("theme_template", filename.to_s)
31
+ root.join("theme_template", filename.to_s),
32
32
  ].find(&:exist?)
33
33
  end
34
34
 
@@ -1,4 +1,4 @@
1
- require "uri"
1
+ require "addressable/uri"
2
2
 
3
3
  # Public: Methods that generate a URL for a resource such as a Post or a Page.
4
4
  #
@@ -145,7 +145,8 @@ module Jekyll
145
145
  # pct-encoded = "%" HEXDIG HEXDIG
146
146
  # sub-delims = "!" / "$" / "&" / "'" / "(" / ")"
147
147
  # / "*" / "+" / "," / ";" / "="
148
- URI.escape(path, %r{[^a-zA-Z\d\-._~!$&'()*+,;=:@\/]}).encode("utf-8")
148
+ path = Addressable::URI.encode(path)
149
+ path.encode("utf-8").sub("#", "%23")
149
150
  end
150
151
 
151
152
  # Unescapes a URL path segment
@@ -159,7 +160,7 @@ module Jekyll
159
160
  #
160
161
  # Returns the unescaped path.
161
162
  def self.unescape_path(path)
162
- URI.unescape(path.encode("utf-8"))
163
+ Addressable::URI.unencode(path.encode("utf-8"))
163
164
  end
164
165
  end
165
166
  end
@@ -2,8 +2,10 @@
2
2
  module Jekyll
3
3
  module Utils
4
4
  extend self
5
- autoload :Platforms, "jekyll/utils/platforms"
6
5
  autoload :Ansi, "jekyll/utils/ansi"
6
+ autoload :Exec, "jekyll/utils/exec"
7
+ autoload :Platforms, "jekyll/utils/platforms"
8
+ autoload :WinTZ, "jekyll/utils/win_tz"
7
9
 
8
10
  # Constants for use in #slugify
9
11
  SLUGIFY_MODES = %w(raw default pretty ascii).freeze
@@ -17,7 +17,7 @@ module Jekyll
17
17
  :yellow => 33,
18
18
  :white => 37,
19
19
  :blue => 34,
20
- :cyan => 36
20
+ :cyan => 36,
21
21
  }.freeze
22
22
 
23
23
  # Strip ANSI from the current string. It also strips cursor stuff,
@@ -0,0 +1,25 @@
1
+ require "open3"
2
+
3
+ module Jekyll
4
+ module Utils
5
+ module Exec
6
+ extend self
7
+
8
+ # Runs a program in a sub-shell.
9
+ #
10
+ # *args - a list of strings containing the program name and arguments
11
+ #
12
+ # Returns a Process::Status and a String of output in an array in
13
+ # that order.
14
+ def run(*args)
15
+ stdin, stdout, stderr, process = Open3.popen3(*args)
16
+ out = stdout.read.strip
17
+ err = stderr.read.strip
18
+
19
+ [stdin, stdout, stderr].each(&:close)
20
+ [process.value, out + err]
21
+ end
22
+
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,73 @@
1
+ module Jekyll
2
+ module Utils
3
+ module WinTZ
4
+ extend self
5
+
6
+ # Public: Calculate the Timezone for Windows when the config file has a defined
7
+ # 'timezone' key.
8
+ #
9
+ # timezone - the IANA Time Zone specified in "_config.yml"
10
+ #
11
+ # Returns a string that ultimately re-defines ENV["TZ"] in Windows
12
+ def calculate(timezone)
13
+ External.require_with_graceful_fail("tzinfo")
14
+ tz = TZInfo::Timezone.get(timezone)
15
+ difference = Time.now.to_i - tz.now.to_i
16
+ #
17
+ # POSIX style definition reverses the offset sign.
18
+ # e.g. Eastern Standard Time (EST) that is 5Hrs. to the 'west' of Prime Meridian
19
+ # is denoted as:
20
+ # EST+5 (or) EST+05:00
21
+ # Reference: http://www.gnu.org/software/libc/manual/html_node/TZ-Variable.html
22
+ sign = difference < 0 ? "-" : "+"
23
+ offset = sign == "-" ? "+" : "-" unless difference.zero?
24
+ #
25
+ # convert the difference (in seconds) to hours, as a rational number, and perform
26
+ # a modulo operation on it.
27
+ modulo = modulo_of(rational_hour(difference))
28
+ #
29
+ # Format the hour as a two-digit number.
30
+ # Establish the minutes based on modulo expression.
31
+ hh = format("%02d", absolute_hour(difference).ceil)
32
+ mm = modulo.zero? ? "00" : "30"
33
+
34
+ Jekyll.logger.debug "Timezone:", "#{timezone} #{offset}#{hh}:#{mm}"
35
+ #
36
+ # Note: The 3-letter-word below doesn't have a particular significance.
37
+ "WTZ#{sign}#{hh}:#{mm}"
38
+ end
39
+
40
+ private
41
+
42
+ # Private: Convert given seconds to an hour as a rational number.
43
+ #
44
+ # seconds - supplied as an integer, it is converted to a rational number.
45
+ # 3600 - no. of seconds in an hour.
46
+ #
47
+ # Returns a rational number.
48
+ def rational_hour(seconds)
49
+ seconds.to_r/3600
50
+ end
51
+
52
+ # Private: Convert given seconds to an hour as an absolute number.
53
+ #
54
+ # seconds - supplied as an integer, it is converted to its absolute.
55
+ # 3600 - no. of seconds in an hour.
56
+ #
57
+ # Returns an integer.
58
+ def absolute_hour(seconds)
59
+ seconds.abs/3600
60
+ end
61
+
62
+ # Private: Perform a modulo operation on a given fraction.
63
+ #
64
+ # fraction - supplied as a rational number, its numerator is divided
65
+ # by its denominator and the remainder returned.
66
+ #
67
+ # Returns an integer.
68
+ def modulo_of(fraction)
69
+ fraction.numerator % fraction.denominator
70
+ end
71
+ end
72
+ end
73
+ end
@@ -1,3 +1,3 @@
1
1
  module Jekyll
2
- VERSION = "3.3.1".freeze
2
+ VERSION = "3.4.0".freeze
3
3
  end
@@ -20,6 +20,6 @@ print_hi('Tom')
20
20
 
21
21
  Check out the [Jekyll docs][jekyll-docs] for more info on how to get the most out of Jekyll. File all bugs/feature requests at [Jekyll’s GitHub repo][jekyll-gh]. If you have questions, you can ask them on [Jekyll Talk][jekyll-talk].
22
22
 
23
- [jekyll-docs]: http://jekyllrb.com/docs/home
23
+ [jekyll-docs]: https://jekyllrb.com/docs/home
24
24
  [jekyll-gh]: https://github.com/jekyll/jekyll
25
25
  [jekyll-talk]: https://talk.jekyllrb.com/
@@ -4,7 +4,7 @@ title: About
4
4
  permalink: /about/
5
5
  ---
6
6
 
7
- This is the base Jekyll theme. You can find out more info about customizing your Jekyll theme, as well as basic Jekyll usage documentation at [jekyllrb.com](http://jekyllrb.com/)
7
+ This is the base Jekyll theme. You can find out more info about customizing your Jekyll theme, as well as basic Jekyll usage documentation at [jekyllrb.com](https://jekyllrb.com/)
8
8
 
9
9
  You can find the source code for the Jekyll new theme at:
10
10
  {% include icon-github.html username="jekyll" %} /
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2016 <%= user_name %>
3
+ Copyright (c) <%= Time.now.year %> <%= user_name %>
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
@@ -6,7 +6,7 @@ TODO: Delete this and the text above, and describe your gem
6
6
 
7
7
  ## Installation
8
8
 
9
- Add this line to your Jekyll site's Gemfile:
9
+ Add this line to your Jekyll site's `Gemfile`:
10
10
 
11
11
  ```ruby
12
12
  gem <%= theme_name.inspect %>
@@ -44,5 +44,5 @@ When your theme is released, only the files in `_layouts`, `_includes`, and `_sa
44
44
 
45
45
  ## License
46
46
 
47
- The theme is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
47
+ The theme is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
48
48
 
metadata CHANGED
@@ -1,155 +1,155 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jekyll
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.3.1
4
+ version: 3.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tom Preston-Werner
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-11-14 00:00:00.000000000 Z
11
+ date: 2017-01-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: liquid
14
+ name: addressable
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '3.0'
19
+ version: '2.4'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '3.0'
26
+ version: '2.4'
27
27
  - !ruby/object:Gem::Dependency
28
- name: kramdown
28
+ name: colorator
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '1.3'
33
+ version: '1.0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '1.3'
40
+ version: '1.0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: mercenary
42
+ name: jekyll-sass-converter
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 0.3.3
47
+ version: '1.0'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 0.3.3
54
+ version: '1.0'
55
55
  - !ruby/object:Gem::Dependency
56
- name: safe_yaml
56
+ name: jekyll-watch
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '1.0'
61
+ version: '1.1'
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '1.0'
68
+ version: '1.1'
69
69
  - !ruby/object:Gem::Dependency
70
- name: colorator
70
+ name: kramdown
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '1.0'
75
+ version: '1.3'
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '1.0'
82
+ version: '1.3'
83
83
  - !ruby/object:Gem::Dependency
84
- name: rouge
84
+ name: liquid
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: '1.7'
89
+ version: '3.0'
90
90
  type: :runtime
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: '1.7'
96
+ version: '3.0'
97
97
  - !ruby/object:Gem::Dependency
98
- name: jekyll-sass-converter
98
+ name: mercenary
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: '1.0'
103
+ version: 0.3.3
104
104
  type: :runtime
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: '1.0'
110
+ version: 0.3.3
111
111
  - !ruby/object:Gem::Dependency
112
- name: jekyll-watch
112
+ name: pathutil
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
115
  - - "~>"
116
116
  - !ruby/object:Gem::Version
117
- version: '1.1'
117
+ version: '0.9'
118
118
  type: :runtime
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
122
  - - "~>"
123
123
  - !ruby/object:Gem::Version
124
- version: '1.1'
124
+ version: '0.9'
125
125
  - !ruby/object:Gem::Dependency
126
- name: pathutil
126
+ name: rouge
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
129
  - - "~>"
130
130
  - !ruby/object:Gem::Version
131
- version: '0.9'
131
+ version: '1.7'
132
132
  type: :runtime
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
136
  - - "~>"
137
137
  - !ruby/object:Gem::Version
138
- version: '0.9'
138
+ version: '1.7'
139
139
  - !ruby/object:Gem::Dependency
140
- name: addressable
140
+ name: safe_yaml
141
141
  requirement: !ruby/object:Gem::Requirement
142
142
  requirements:
143
143
  - - "~>"
144
144
  - !ruby/object:Gem::Version
145
- version: '2.4'
145
+ version: '1.0'
146
146
  type: :runtime
147
147
  prerelease: false
148
148
  version_requirements: !ruby/object:Gem::Requirement
149
149
  requirements:
150
150
  - - "~>"
151
151
  - !ruby/object:Gem::Version
152
- version: '2.4'
152
+ version: '1.0'
153
153
  description: Jekyll is a simple, blog aware, static site generator.
154
154
  email: tom@mojombo.com
155
155
  executables:
@@ -199,6 +199,7 @@ files:
199
199
  - lib/jekyll/excerpt.rb
200
200
  - lib/jekyll/external.rb
201
201
  - lib/jekyll/filters.rb
202
+ - lib/jekyll/filters/grouping_filters.rb
202
203
  - lib/jekyll/filters/url_filters.rb
203
204
  - lib/jekyll/frontmatter_defaults.rb
204
205
  - lib/jekyll/generator.rb
@@ -237,7 +238,9 @@ files:
237
238
  - lib/jekyll/url.rb
238
239
  - lib/jekyll/utils.rb
239
240
  - lib/jekyll/utils/ansi.rb
241
+ - lib/jekyll/utils/exec.rb
240
242
  - lib/jekyll/utils/platforms.rb
243
+ - lib/jekyll/utils/win_tz.rb
241
244
  - lib/jekyll/version.rb
242
245
  - lib/site_template/.gitignore
243
246
  - lib/site_template/_config.yml
@@ -278,7 +281,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
278
281
  version: '0'
279
282
  requirements: []
280
283
  rubyforge_project:
281
- rubygems_version: 2.5.1
284
+ rubygems_version: 2.6.10
282
285
  signing_key:
283
286
  specification_version: 2
284
287
  summary: A simple, blog aware, static site generator.