Compare commits

..

55 Commits

Author SHA1 Message Date
Ashwin Maroli
9c2c01bb7a Release 💎 v4.3.0 2022-10-20 21:32:59 +05:30
jekyllbot
a81cd42768 Update history to reflect merge of #9157 [ci skip] 2022-10-20 08:57:37 -07:00
Ashwin Maroli
b32293cf67 Release post for v4.3.0 (#9157)
Merge pull request 9157
2022-10-20 08:57:35 -07:00
Ashwin Maroli
e27605e380 Clean up HEAD section in History document 2022-10-20 18:58:29 +05:30
Giuseppe Bertone
520326406c Document xz dependency on macOS (#9098)
Signed-off-by: Giuseppe Bertone <giuseppe.bertone@swirldslabs.com>
2022-10-20 15:52:08 +05:30
Kaben
f030e55f70 Fix URL to Liquid documentation (#9158) 2022-10-20 15:45:40 +05:30
Ashwin Maroli
6d3dc74c7d Bump RuboCop to v1.37.x 2022-10-20 14:47:52 +05:30
jekyllbot
35e08eb9db Update history to reflect merge of #9132 [ci skip] 2022-10-16 07:37:06 -07:00
なつき
03f7ddc801 Support jekyll-sass-converter 3.x (#9132)
Merge pull request 9132
2022-10-16 07:37:05 -07:00
jekyllbot
3554b73b7f Update history to reflect merge of #9141 [ci skip] 2022-10-16 04:48:26 -07:00
Youssef Boulkaid
6903f0b0f4 Fix false positive conflicts for static files in a collection (#9141)
Merge pull request 9141
2022-10-16 04:48:24 -07:00
jekyllbot
bb851e235d Update history to reflect merge of #9151 [ci skip] 2022-10-06 23:04:42 -07:00
Kaben
5d5d975672 Update posts.md (#9151)
Merge pull request 9151
2022-10-06 23:04:40 -07:00
jekyllbot
fe45439b6c Update history to reflect merge of #9142 [ci skip] 2022-10-02 03:16:54 -07:00
Youssef Boulkaid
823c8f94d2 Relax RDoc version dependency (#9142)
Merge pull request 9142
2022-10-02 03:16:53 -07:00
jekyllbot
2cc51e6aba Update history to reflect merge of #8771 [ci skip] 2022-09-29 05:46:26 -07:00
Ashwin Maroli
160a6816af Incrementally rebuild when a data file is changed (#8771)
Merge pull request 8771
2022-09-29 05:46:24 -07:00
jekyllbot
d45fb96477 Update history to reflect merge of #9136 [ci skip] 2022-09-29 03:37:44 -07:00
Youssef Boulkaid
daca7e53a1 Disable pending cops when running rubocop (#9136)
Merge pull request 9136
2022-09-29 03:37:42 -07:00
jekyllbot
e05a25a668 Update history to reflect merge of #9135 [ci skip] 2022-09-29 00:16:34 -07:00
Youssef Boulkaid
7a70a3ae5e Unlock Psych dependency (#9135)
Merge pull request 9135
2022-09-29 00:16:32 -07:00
jekyllbot
1baded9acd Update history to reflect merge of #9134 [ci skip] 2022-09-28 03:54:48 -07:00
Ashwin Maroli
1a3d85a8a5 Relax version constraint to allow Rouge 4.x (#9134)
Merge pull request 9134
2022-09-28 03:54:46 -07:00
Ashwin Maroli
b632afd2db Add version badge to documentation header 2022-09-25 20:42:58 +05:30
Ashwin Maroli
d09c5105d7 Document keys of the theme drop
Follow-up to #9129
2022-09-25 20:23:04 +05:30
jekyllbot
6633fd2335 Update history to reflect merge of #9129 [ci skip] 2022-09-24 06:54:57 -07:00
Ashwin Maroli
b8cf7cf96d Introduce theme drop to expose theme details (#9129)
Merge pull request 9129
2022-09-24 06:54:56 -07:00
jekyllbot
5b64b27b2c Update history to reflect merge of #9111 [ci skip] 2022-09-23 10:27:23 -07:00
Josh Soref
d1e392f301 Use check-spelling/check-spelling@v0.0.20 (#9111)
Merge pull request 9111
2022-09-23 10:27:21 -07:00
jekyllbot
7d9b6403c0 Update history to reflect merge of #9125 [ci skip] 2022-09-21 10:25:51 -07:00
Ashwin Maroli
911e249d72 Bump RuboCop to 1.36.x (#9125)
Merge pull request 9125
2022-09-21 10:25:50 -07:00
jekyllbot
d2c7c43c3f Update history to reflect merge of #9093 [ci skip] 2022-08-01 07:21:36 -07:00
Nemo
7a698d4d14 Bump rubocop to 1.32 (#9093)
Merge pull request 9093
2022-08-01 07:21:34 -07:00
jekyllbot
a03e972378 Update history to reflect merge of #9086 [ci skip] 2022-07-13 16:45:38 -07:00
Andrii Abramov
18e5e5223b Update ruby version for macos guide (#9086)
Merge pull request 9086
2022-07-13 16:45:36 -07:00
jekyllbot
3d23171d22 Update history to reflect merge of #9064 [ci skip] 2022-06-20 20:35:43 -07:00
Andreas Deininger
a0c6b4c595 Improve links (http -> https) (#9064)
Merge pull request 9064
2022-06-20 20:35:42 -07:00
jekyllbot
66dd820648 Update history to reflect merge of #9049 [ci skip] 2022-06-20 12:19:38 -07:00
Kirstin Heidler
25369429a7 Windows: describe which option to choose (#9049)
Merge pull request 9049
2022-06-20 12:19:37 -07:00
Ashwin Maroli
8896e125ef Bump RuboCop to v1.30.x 2022-05-26 15:11:58 +05:30
jekyllbot
4537ccac41 Update history to reflect merge of #9057 [ci skip] 2022-05-16 06:51:32 -07:00
Takuya N
674bcfb37e Remove Ionic Framework site from showcase (#9057)
Merge pull request 9057
2022-05-16 06:51:30 -07:00
Ashwin Maroli
0f5f5ba8d1 Bump RuboCop to v1.29.x
Closes #9053
2022-05-09 11:30:27 +05:30
Ashwin Maroli
796ae15c31 Fix alignment of home page section-units on mobile 2022-05-05 16:46:09 +05:30
Ashwin Maroli
d70ffd2a20 Fix news-archive list renders on small-devices
Resolves #8839
2022-05-05 12:49:26 +05:30
jekyllbot
2c0e51330b Update history to reflect merge of #9045 [ci skip] 2022-04-28 05:14:23 -07:00
Andrew Gutekanst
ac93d22df1 Remove git.io shortlinks from repo (#9045)
Merge pull request 9045
2022-04-28 05:14:22 -07:00
jekyllbot
124ce72be8 Update history to reflect merge of #9039 [ci skip] 2022-04-27 23:57:35 -07:00
Ashwin Maroli
6077ed6a01 Remove misleading total row from --profile table (#9039)
Merge pull request 9039
2022-04-27 23:57:33 -07:00
Ashwin Maroli
7c28eb5f7e Bump RuboCop to v1.28.x 2022-04-21 20:20:49 +05:30
jekyllbot
c254533c3b Update history to reflect merge of #8995 [ci skip] 2022-04-08 07:22:30 -07:00
Emily Grace Seville
64dbf46a3b Add clarity to docs on permalinks placeholders and builtins (#8995)
Merge pull request 8995
2022-04-08 07:22:29 -07:00
Ashwin Maroli
1cde234d41 Bump RuboCop to v1.27.x 2022-04-08 18:59:55 +05:30
jekyllbot
b02b070d86 Update history to reflect merge of #8988 [ci skip] 2022-04-08 02:13:22 -07:00
Ashwin Maroli
3b3f845846 Ensure theme config is a Jekyll::Configuration object (#8988)
Merge pull request 8988
2022-04-08 02:13:21 -07:00
83 changed files with 1011 additions and 280 deletions

View File

@@ -0,0 +1,2 @@
statictastic
Statictastic

View File

@@ -2,7 +2,7 @@
This issue is reserved for people who never contributed to Open Source before. We know that the process of creating a pull request is the biggest barrier for new contributors. This issue is for you 💝
[About First Timers Only](http://www.firsttimersonly.com/).
[About First Timers Only](https://www.firsttimersonly.com/).
### 🤔 What you will need to know.

View File

@@ -26,9 +26,6 @@ jobs:
ruby_version: "3.1"
- label: JRuby 9.3.4.0
ruby_version: "jruby-9.3.4.0"
- label: Liquid 4
ruby_version: 3.1
liquid_version: "~> 4.0"
steps:
- name: Checkout Repository
uses: actions/checkout@v3
@@ -37,8 +34,6 @@ jobs:
with:
ruby-version: ${{ matrix.ruby_version }}
bundler-cache: true
env:
LIQUID_VERSION: ${{ matrix.liquid_version }}
- name: Run Minitest based tests
run: bash script/test
- name: Run Cucumber based tests

View File

@@ -12,11 +12,28 @@ on:
- "*-stable"
jobs:
build:
spelling:
name: Spell Check
runs-on: "ubuntu-latest"
permissions:
contents: read
pull-requests: read
actions: read
outputs:
followup: ${{ steps.spelling.outputs.followup }}
runs-on: ubuntu-latest
if: "contains(github.event_name, 'pull_request') || github.event_name == 'push'"
concurrency:
group: spelling-${{ github.event.pull_request.number || github.ref }}
# note: If you use only_check_changed_files, you do not want cancel-in-progress
cancel-in-progress: true
steps:
- name: Checkout Repository
uses: actions/checkout@v3
- name: Check Spellings
uses: check-spelling/check-spelling@v0.0.19
- name: check-spelling
id: spelling
uses: check-spelling/check-spelling@v0.0.20
with:
# This workflow runs in response to both `push` and `pull_request`, if there's an open `pull_request` in the same repository for a given branch, there's no reason to spend resources checking both the `push` and the `pull_request`, so this flag tells the action while running for the `push` to find the `pull_request` and stop working early:
suppress_push_for_open_pull_request: 1
# The action will manage checking out the repository itself instead of requiring the workflow to use `actions/checkout...`:
checkout: true
# If running without `: write`, posting a comment won't work, and for security `: write` permissions are left to a distinct (optional) job, here we skip trying to post a comment:
post_comment: 0

View File

@@ -25,8 +25,11 @@ AllCops:
- vendor/**/*
- tmp/**/*
Gemspec/DateAssignment:
Gemspec/DeprecatedAttributeAssignment:
Enabled: true
Gemspec/RequireMFA:
Enabled: false
Layout/BeginEndAlignment:
Enabled: true
Layout/EmptyComment:
@@ -43,6 +46,12 @@ Layout/HashAlignment:
EnforcedHashRocketStyle: table
Layout/IndentationWidth:
Severity: error
Layout/LineContinuationLeadingSpace:
Enabled: true
Layout/LineContinuationSpacing:
Enabled: true
Layout/LineEndStringConcatenationIndentation:
Enabled: true
Layout/LineLength:
Exclude:
- !ruby/regexp /features\/.*.rb/
@@ -66,12 +75,18 @@ Layout/SpaceInsideHashLiteralBraces:
Lint/AmbiguousAssignment:
Enabled: true
Lint/AmbiguousOperatorPrecedence:
Enabled: true
Lint/AmbiguousRange:
Enabled: true
Lint/BinaryOperatorWithIdenticalOperands:
Enabled: true
Lint/ConstantDefinitionInBlock:
Enabled: true
Exclude:
- test/**/*.rb
Lint/ConstantOverwrittenInRescue:
Enabled: true
Lint/DeprecatedConstants:
Enabled: true
Lint/DeprecatedOpenSSLConstant:
@@ -123,6 +138,10 @@ Lint/RedundantDirGlobSort:
Enabled: true
Lint/RedundantSafeNavigation:
Enabled: true
Lint/RequireRangeParentheses:
Enabled: true
Lint/RequireRelativeSelfPath:
Enabled: true
Lint/SelfAssignment:
Enabled: true
Lint/StructNewOverride:
@@ -187,6 +206,8 @@ Metrics/ParameterLists:
Metrics/PerceivedComplexity:
Max: 13
Minitest/AssertEmptyLiteral:
Enabled: false
Minitest/AssertInDelta:
Enabled: true
Minitest/AssertionInLifecycleHook:
@@ -199,6 +220,8 @@ Minitest/AssertPathExists:
Enabled: true
Minitest/AssertSilent:
Enabled: true
Minitest/AssertWithExpectedArgument:
Enabled: true
Minitest/LiteralAsActualArgument:
Enabled: true
Minitest/TestMethodName:
@@ -211,10 +234,10 @@ Minitest/RefuteKindOf:
Enabled: true
Minitest/RefutePathExists:
Enabled: true
Minitest/UnreachableAssertion:
Enabled: true
Minitest/UnspecifiedException:
Enabled: true
Minitest/AssertEmptyLiteral:
Enabled: false
Naming/FileName:
Enabled: false
@@ -242,10 +265,16 @@ Performance/CollectionLiteralInLoop:
Enabled: true
Performance/ConstantRegexp:
Enabled: true
Performance/MapCompact:
Enabled: true
Performance/MethodObjectAsBlock:
Enabled: true
Performance/RedundantEqualityComparisonBlock:
Enabled: false
Performance/RedundantSortBlock:
Enabled: true
Performance/RedundantSplitRegexpArgument:
Enabled: true
Performance/RedundantStringChars:
Enabled: true
Performance/ReverseFirst:
@@ -254,6 +283,8 @@ Performance/SortReverse:
Enabled: false
Performance/Squeeze:
Enabled: true
Performance/StringIdentifierArgument:
Enabled: true
Performance/StringInclude:
Enabled: true
Exclude:
@@ -261,6 +292,10 @@ Performance/StringInclude:
Performance/Sum:
Enabled: true
Security/CompoundHash:
Enabled: true
Security/IoMethods:
Enabled: true
Security/MarshalLoad:
Exclude:
- !ruby/regexp /test\/.*.rb$/
@@ -303,12 +338,20 @@ Style/Documentation:
Enabled: false
Style/DoubleNegation:
Enabled: false
Style/EmptyHeredoc:
Enabled: true
Style/EndlessMethod:
Enabled: true
Style/ExplicitBlockArgument:
Enabled: false
Style/ExponentialNotation:
Enabled: true
Style/EnvHome:
Enabled: true
Style/FetchEnvVar:
Enabled: false
Style/FileRead:
Enabled: false
Style/FormatStringToken:
Exclude:
- lib/jekyll/utils/ansi.rb
@@ -316,6 +359,8 @@ Style/FormatStringToken:
- lib/jekyll/profiler.rb
Style/FrozenStringLiteralComment:
EnforcedStyle: always
Style/FileWrite:
Enabled: true
Style/GlobalStdStream:
Enabled: true
Style/GuardClause:
@@ -341,6 +386,12 @@ Style/IfWithBooleanLiteralBranches:
Enabled: true
Style/KeywordParametersOrder:
Enabled: true
Style/MagicCommentFormat:
Enabled: true
Style/MapCompactWithConditionalBlock:
Enabled: true
Style/MapToHash:
Enabled: true
Style/MixinUsage:
Exclude:
- test/helper.rb
@@ -350,10 +401,14 @@ Style/MultilineTernaryOperator:
Severity: error
Style/NegatedIfElseCondition:
Enabled: true
Style/NestedFileDirname:
Enabled: true
Style/NilLambda:
Enabled: true
Style/OptionalBooleanParameter:
Enabled: true
Exclude:
- lib/jekyll/log_adapter.rb
Style/PercentLiteralDelimiters:
PreferredDelimiters:
"%Q": "{}"
@@ -363,6 +418,8 @@ Style/PercentLiteralDelimiters:
"%s": ()
"%w": ()
"%x": ()
Style/QuotedSymbols:
Enabled: true
Style/RedundantArgument:
Enabled: true
Style/RedundantAssignment:
@@ -371,12 +428,18 @@ Style/RedundantFetchBlock:
Enabled: false
Style/RedundantFileExtensionInRequire:
Enabled: true
Style/RedundantInitialize:
Enabled: true
Exclude:
- lib/jekyll/plugin.rb
Style/RedundantRegexpCharacterClass:
Enabled: true
Style/RedundantRegexpEscape:
Enabled: true
Style/RedundantSelfAssignment:
Enabled: true
Style/RedundantSelfAssignmentBranch:
Enabled: true
Style/RegexpLiteral:
EnforcedStyle: percent_r
Style/RescueModifier:

View File

@@ -5,10 +5,6 @@ gemspec :name => "jekyll"
gem "rake", "~> 13.0"
if ENV["LIQUID_VERSION"] && ENV["LIQUID_VERSION"] != ""
gem "liquid", ENV["LIQUID_VERSION"]
end
group :development do
gem "launchy", "~> 2.3"
gem "pry"
@@ -27,7 +23,7 @@ group :test do
gem "nokogiri", "~> 1.7"
gem "rspec"
gem "rspec-mocks"
gem "rubocop", "~> 1.26.0"
gem "rubocop", "~> 1.37.0"
gem "rubocop-minitest"
gem "rubocop-performance"
gem "rubocop-rake"
@@ -79,7 +75,7 @@ group :jekyll_optional_dependencies do
gem "kramdown-syntax-coderay"
gem "matrix"
gem "mime-types", "~> 3.0"
gem "rdoc", "~> 6.3.0"
gem "rdoc", "~> 6.0"
gem "tomlrb"
platforms :ruby, :mswin, :mingw, :x64_mingw do

View File

@@ -1,6 +1,72 @@
## HEAD
## 4.3.0 / 2022-10-20
### Minor Enhancements
* Add webrick as a dependency (#8524)
* Regenerate supported mime types (#8542)
* Update include tag to be more permissive (#8618)
* Optimize `Jekyll::Utils.parse_date` (#8425)
* Update rubocop from 1.12 to 1.18 and min ruby from 2.4 to 2.5 (#8741)
* Always hide cache-dir contents from Git (#8798)
* Remove the warning about auto-regeneration on Windows (#8821)
* Propagate _data folder from theme (#8815)
* Support both tzinfo v1 and v2 alongwith non-half hour offsets. (#8880)
* Run vendor-mimes to update mime.types (#8940)
* Expose collection static files via `site.static_files` (#8961)
* Expose `basename` from `document.rb` as `name` to Liquid templates (#8761)
* Allow Configurable Converters on CSV (#8858)
* Introduce `theme` drop to expose theme-gem details (#9129)
* Relax version constraint to allow Rouge 4.x (#9134)
* Incrementally rebuild when a data file is changed (#8771)
* Support jekyll-sass-converter 3.x (#9132)
### Bug Fixes
* fix: pin rubocop to 1.12 due to error with ruby 2.4 (#8651)
* Load Jekyll plugins from BUNDLE_GEMFILE location (#8585)
* fix(security): CVE-2021-28834 (#8680)
* Inject livereload script using `location.protocol` instead of `http:` (#8718)
* Respect collections_dir config within include tag (#8756)
* Fix regression in Convertible module from v4.2.0 (#8786)
* Revert #7253: &#34;Don&#39;t reset site.url to localhost:4000 by default&#34; (#8620)
* Improve readability of CI logs (#8877)
* Fix deprecation message for missing doc method (#8960)
* Fix response header for content served via `jekyll serve` (#8965)
* Trigger livereload in sites without pages (#8337)
* Only enable BOM encoding option on UTF encodings (#8363)
* Ensure theme config is a `Jekyll::Configuration` object (#8988)
* Remove misleading totals row from `--profile` table (#9039)
* Unlock Psych dependency (#9135)
* Fix false positive conflicts for static files in a collection (#9141)
### Development Fixes
* style: enable new cops (#8538)
* Allow dependabot to keep github actions up-to-date (#8540)
* Update actions/cache requirement to v2.1.3 (#8543)
* Pin rubocop version (#8564)
* style: add rubocop 1.9 cops (#8567)
* Cross Version Testing Locally and Faster CI (#8610)
* Use official Ruby setup GH action (#8614)
* Spell check action for markdown documentation (#8675)
* Update expect to cover docs/_posts (#8677)
* Bump check-spelling/check-spelling from 0.0.18 to 0.0.19 (#8740)
* Enable Rubocop accessor grouping, fix existing offenses (#8293)
* Tags:Highlight: Decomposed HTMLLegacy formatter (#8623)
* Relax Rubocop Dependency (#8831)
* Add a workflow to build gems consistently (#8830)
* Fix random test failures in TestExcerpt #to_liquid (#8884)
* Lock gem `psych` to `v3.x` (#8918)
* Fix typo in Bug Report template (#8951)
* Check symlink outside site_source without Pathutil (#9015)
* Stop testing with Rubies older than 2.7 on non-Windows (#8955)
* Bump actions/checkout from 2 to 3 (#8986)
* Remove git.io shortlinks from repo (#9045)
* Bump rubocop to 1.32 (#9093)
* Bump RuboCop to `1.36.x` (#9125)
* Use check-spelling/check-spelling@v0.0.20 (#9111)
* Disable pending cops when running rubocop (#9136)
* Relax RDoc version dependency (#9142)
### Documentation
@@ -65,59 +131,13 @@
* Simplify macOS installation docs (#8993)
* Improve document about Github Actions section (#8853)
* Update permalinks.md (#9017)
### Bug Fixes
* Add webrick as a dependency (#8524)
* fix: pin rubocop to 1.12 due to error with ruby 2.4 (#8651)
* Load Jekyll plugins from BUNDLE_GEMFILE location (#8585)
* fix(security): CVE-2021-28834 (#8680)
* Inject livereload script using `location.protocol` instead of `http:` (#8718)
* Respect collections_dir config within include tag (#8756)
* Fix regression in Convertible module from v4.2.0 (#8786)
* Revert #7253: &#34;Don&#39;t reset site.url to localhost:4000 by default&#34; (#8620)
* Improve readability of CI logs (#8877)
* Fix deprecation message for missing doc method (#8960)
* Fix response header for content served via `jekyll serve` (#8965)
* Trigger livereload in sites without pages (#8337)
* Only enable BOM encoding option on UTF encodings (#8363)
### Development Fixes
* style: enable new cops (#8538)
* Allow dependabot to keep github actions up-to-date (#8540)
* Update actions/cache requirement to v2.1.3 (#8543)
* Pin rubocop version (#8564)
* style: add rubocop 1.9 cops (#8567)
* Cross Version Testing Locally and Faster CI (#8610)
* Use official Ruby setup GH action (#8614)
* Spell check action for markdown documentation (#8675)
* Update expect to cover docs/_posts (#8677)
* Enable Rubocop accessor grouping, fix existing offenses (#8293)
* Tags:Highlight: Decomposed HTMLLegacy formatter (#8623)
* Relax Rubocop Dependency (#8831)
* Add a workflow to build gems consistently (#8830)
* Fix random test failures in TestExcerpt #to_liquid (#8884)
* Lock gem `psych` to `v3.x` (#8918)
* Fix typo in Bug Report template (#8951)
* Check symlink outside site_source without Pathutil (#9015)
* Stop testing with Rubies older than 2.7 on non-Windows (#8955)
* Bump actions/checkout from 2 to 3 (#8986)
### Minor Enhancements
* Regenerate supported mime types (#8542)
* Update include tag to be more permissive (#8618)
* Optimize `Jekyll::Utils.parse_date` (#8425)
* Update rubocop from 1.12 to 1.18 and min ruby from 2.4 to 2.5 (#8741)
* Always hide cache-dir contents from Git (#8798)
* Remove the warning about auto-regeneration on Windows (#8821)
* Propagate _data folder from theme (#8815)
* Support both tzinfo v1 and v2 alongwith non-half hour offsets. (#8880)
* Run vendor-mimes to update mime.types (#8940)
* Expose collection static files via `site.static_files` (#8961)
* Expose `basename` from `document.rb` as `name` to Liquid templates (#8761)
* Allow Configurable Converters on CSV (#8858)
* Add clarity to docs on permalinks placeholders and builtins (#8995)
* Remove Ionic Framework site from showcase (#9057)
* Windows: describe which option to choose (#9049)
* Improve links (http -&gt; https) (#9064)
* Update ruby version for macos guide (#9086)
* Update posts.md (#9151)
* Release post for v4.3.0 (#9157)
### Site Enhancements

View File

@@ -28,7 +28,7 @@ See: [https://jekyllrb.com/philosophy](https://jekyllrb.com/philosophy)
## Diving In
* [Migrate](http://import.jekyllrb.com/docs/home/) from your previous system
* [Migrate](https://import.jekyllrb.com/docs/home/) from your previous system
* Learn how [Front Matter](https://jekyllrb.com/docs/front-matter/) works
* Put information on your site with [Variables](https://jekyllrb.com/docs/variables/)
* Customize the [Permalinks](https://jekyllrb.com/docs/permalinks/) your posts are generated with

View File

@@ -1,5 +1,5 @@
---
version: 4.2.2
version: 4.3.0
name: Jekyll • Simple, blog-aware, static sites
description: Transform your plain text into static websites and blogs
url: https://jekyllrb.com

View File

@@ -16,6 +16,10 @@ global:
description: >-
Layout specific information + the <a href="/docs/front-matter/">front matter</a>.
Custom variables set via front matter in layouts will be available here.
- name: theme
description: >-
Theme-gem specific information as defined in the theme's gemspec. Useful for rendering
information in the theme demo's "About" page, for example. See below for details.
- name: content
description: >-
In layout files, the rendered content of the Post or Page being wrapped.
@@ -150,6 +154,20 @@ page:
The previous post relative to the position of the current post in <code>site.posts</code>.
Returns <code>nil</code> for the first entry.
theme:
- name: theme.root
description: Absolute path to the theme-gem.
- name: theme.authors
description: Comma separated string composed of the authors of the theme-gem.
- name: theme.description
description: Description or summary of the theme-gem as specified in the theme gemspec.
- name: theme.version
description: The version string of current theme.
- name: theme.dependencies
description: List of runtime dependencies of the theme.
- name: theme.metadata
description: A mapping of key-value pairs as defined in the theme gemspec.
paginator:
- name: paginator.page
description: The number of the current page

View File

@@ -1,3 +1,3 @@
min_version: 2.5.0
current_version: 3.1.1
current_version_output: ruby 3.1.1p18 (2022-02-18 revision 53f5fc4236)
current_version: 3.1.2
current_version_output: ruby 3.1.2p20 (2022-04-12 revision 4491bb740a)

View File

@@ -1,5 +1,5 @@
- name: Tom Preston Werner Blog
url: http://tom.preston-werner.com/
url: https://tom.preston-werner.com/
image: tom-preston-werner.png
categories:
- personal
@@ -26,7 +26,7 @@
- marketing-site
- name: Vesterheim Norwegian-American Museum
url: http://vesterheim.org/
url: https://vesterheim.org/
image: vesterheim.png
categories:
- marketing-site
@@ -139,7 +139,7 @@
- marketing-site
- name: Rehan Butt
url: http://rehanbutt.com/
url: https://rehanbutt.com/
image: rehn.png
categories:
- personal
@@ -178,19 +178,19 @@
- other
- name: Digital Democracy
url: http://www.digital-democracy.org/
url: https://www.digital-democracy.org/
image: digital-democracy.png
categories:
- other
- name: HTML Reference
url: http://htmlreference.io/
url: https://htmlreference.io/
image: htmlreference.png
categories:
- documentation
- name: CSS Reference
url: http://cssreference.io/
url: https://cssreference.io/
image: cssreference.png
categories:
- documentation
@@ -272,7 +272,7 @@
- documentation
- name: Yeoman
url: http://yeoman.io/
url: https://yeoman.io/
image: yeoman.png
categories:
- open-source
@@ -292,13 +292,6 @@
- software
- marketing-site
- name: Ionic Framework
url: https://ionicframework.com/
image: ionic-framework.png
categories:
- software
- marketing-site
- name: Spotify for Developers
url: https://developer.spotify.com
image: spotify-developers.png
@@ -315,7 +308,7 @@
- marketing-site
- name: Ruby on Rails
url: http://rubyonrails.org/
url: https://rubyonrails.org/
image: ruby-on-rails.png
categories:
- marketing-site

View File

@@ -57,4 +57,4 @@ This entire guide is open-source. Go ahead and [edit it][jekyll-docs-ci-buddy] i
[jekyll-docs-ci-buddy]: https://github.com/jekyll/jekyll/edit/master/docs/_docs/continuous-integration/buddyworks.md
[jekyll-help]: https://jekyllrb.com/help/
[buddy-forum]: http://forum.buddy.works/
[buddy-forum]: https://forum.buddy.works/

View File

@@ -7,7 +7,7 @@ In addition to the [built-in variables]({{'/docs/variables/' | relative_url }})
you can specify your own custom data that can be accessed via the [Liquid
templating system](https://github.com/Shopify/liquid/wiki/Liquid-for-Designers).
Jekyll supports loading data from [YAML](http://yaml.org/), [JSON](http://www.json.org/), [CSV](https://en.wikipedia.org/wiki/Comma-separated_values), and [TSV](https://en.wikipedia.org/wiki/Tab-separated_values) files located in the `_data` directory.
Jekyll supports loading data from [YAML](https://yaml.org), [JSON](https://www.json.org/json-en.html), [CSV](https://en.wikipedia.org/wiki/Comma-separated_values), and [TSV](https://en.wikipedia.org/wiki/Tab-separated_values) files located in the `_data` directory.
Note that CSV and TSV files *must* contain a header row.
This powerful feature allows you to avoid repetition in your templates and to

View File

@@ -35,9 +35,9 @@ The [Jekyll hosting tutorial](https://www.keycdn.com/support/jekyll-hosting) pro
## Kickster
Use [Kickster](http://kickster.nielsenramon.com/) for automated deploys to GitHub Pages when using unsupported plugins on GitHub Pages.
Use [Kickster](https://kickster.nielsenramon.com/) for automated deploys to GitHub Pages when using unsupported plugins on GitHub Pages.
Kickster provides a basic Jekyll project setup packed with web best practises and useful optimization tools increasing your overall project quality. Kickster ships with automated and worry-free deployment scripts for GitHub Pages.
Kickster provides a basic Jekyll project setup packed with web best practices and useful optimization tools increasing your overall project quality. Kickster ships with automated and worry-free deployment scripts for GitHub Pages.
Install the Kickster gem and you are good to go. More documentation can here found [here](https://github.com/nielsenramon/kickster#kickster). If you do not want to use the gem or start a new project you can just copy paste the deployment scripts for [Travis CI](https://github.com/nielsenramon/kickster/tree/master/snippets/travis) or [Circle CI](https://github.com/nielsenramon/kickster#automated-deployment-with-circle-ci).

View File

@@ -4,6 +4,158 @@ permalink: "/docs/history/"
note: This file is autogenerated. Edit /History.markdown instead.
---
## 4.3.0 / 2022-10-20
{: #v4-3-0}
### Minor Enhancements
{: #minor-enhancements-v4-3-0}
- Add webrick as a dependency ([#8524]({{ site.repository }}/issues/8524))
- Regenerate supported mime types ([#8542]({{ site.repository }}/issues/8542))
- Update include tag to be more permissive ([#8618]({{ site.repository }}/issues/8618))
- Optimize `Jekyll::Utils.parse_date` ([#8425]({{ site.repository }}/issues/8425))
- Update rubocop from 1.12 to 1.18 and min ruby from 2.4 to 2.5 ([#8741]({{ site.repository }}/issues/8741))
- Always hide cache-dir contents from Git ([#8798]({{ site.repository }}/issues/8798))
- Remove the warning about auto-regeneration on Windows ([#8821]({{ site.repository }}/issues/8821))
- Propagate _data folder from theme ([#8815]({{ site.repository }}/issues/8815))
- Support both tzinfo v1 and v2 alongwith non-half hour offsets. ([#8880]({{ site.repository }}/issues/8880))
- Run vendor-mimes to update mime.types ([#8940]({{ site.repository }}/issues/8940))
- Expose collection static files via `site.static_files` ([#8961]({{ site.repository }}/issues/8961))
- Expose `basename` from `document.rb` as `name` to Liquid templates ([#8761]({{ site.repository }}/issues/8761))
- Allow Configurable Converters on CSV ([#8858]({{ site.repository }}/issues/8858))
- Introduce `theme` drop to expose theme-gem details ([#9129]({{ site.repository }}/issues/9129))
- Relax version constraint to allow Rouge 4.x ([#9134]({{ site.repository }}/issues/9134))
- Incrementally rebuild when a data file is changed ([#8771]({{ site.repository }}/issues/8771))
- Support jekyll-sass-converter 3.x ([#9132]({{ site.repository }}/issues/9132))
### Bug Fixes
{: #bug-fixes-v4-3-0}
- fix: pin rubocop to 1.12 due to error with ruby 2.4 ([#8651]({{ site.repository }}/issues/8651))
- Load Jekyll plugins from BUNDLE_GEMFILE location ([#8585]({{ site.repository }}/issues/8585))
- fix(security): CVE-2021-28834 ([#8680]({{ site.repository }}/issues/8680))
- Inject livereload script using `location.protocol` instead of `http:` ([#8718]({{ site.repository }}/issues/8718))
- Respect collections_dir config within include tag ([#8756]({{ site.repository }}/issues/8756))
- Fix regression in Convertible module from v4.2.0 ([#8786]({{ site.repository }}/issues/8786))
- Revert [#7253]({{ site.repository }}/issues/7253): &#34;Don&#39;t reset site.url to localhost:4000 by default&#34; ([#8620]({{ site.repository }}/issues/8620))
- Improve readability of CI logs ([#8877]({{ site.repository }}/issues/8877))
- Fix deprecation message for missing doc method ([#8960]({{ site.repository }}/issues/8960))
- Fix response header for content served via `jekyll serve` ([#8965]({{ site.repository }}/issues/8965))
- Trigger livereload in sites without pages ([#8337]({{ site.repository }}/issues/8337))
- Only enable BOM encoding option on UTF encodings ([#8363]({{ site.repository }}/issues/8363))
- Ensure theme config is a `Jekyll::Configuration` object ([#8988]({{ site.repository }}/issues/8988))
- Remove misleading totals row from `--profile` table ([#9039]({{ site.repository }}/issues/9039))
- Unlock Psych dependency ([#9135]({{ site.repository }}/issues/9135))
- Fix false positive conflicts for static files in a collection ([#9141]({{ site.repository }}/issues/9141))
### Development Fixes
{: #development-fixes-v4-3-0}
- style: enable new cops ([#8538]({{ site.repository }}/issues/8538))
- Allow dependabot to keep github actions up-to-date ([#8540]({{ site.repository }}/issues/8540))
- Update actions/cache requirement to v2.1.3 ([#8543]({{ site.repository }}/issues/8543))
- Pin rubocop version ([#8564]({{ site.repository }}/issues/8564))
- style: add rubocop 1.9 cops ([#8567]({{ site.repository }}/issues/8567))
- Cross Version Testing Locally and Faster CI ([#8610]({{ site.repository }}/issues/8610))
- Use official Ruby setup GH action ([#8614]({{ site.repository }}/issues/8614))
- Spell check action for markdown documentation ([#8675]({{ site.repository }}/issues/8675))
- Update expect to cover docs/_posts ([#8677]({{ site.repository }}/issues/8677))
- Bump check-spelling/check-spelling from 0.0.18 to 0.0.19 ([#8740]({{ site.repository }}/issues/8740))
- Enable Rubocop accessor grouping, fix existing offenses ([#8293]({{ site.repository }}/issues/8293))
- Tags:Highlight: Decomposed HTMLLegacy formatter ([#8623]({{ site.repository }}/issues/8623))
- Relax Rubocop Dependency ([#8831]({{ site.repository }}/issues/8831))
- Add a workflow to build gems consistently ([#8830]({{ site.repository }}/issues/8830))
- Fix random test failures in TestExcerpt #to_liquid ([#8884]({{ site.repository }}/issues/8884))
- Lock gem `psych` to `v3.x` ([#8918]({{ site.repository }}/issues/8918))
- Fix typo in Bug Report template ([#8951]({{ site.repository }}/issues/8951))
- Check symlink outside site_source without Pathutil ([#9015]({{ site.repository }}/issues/9015))
- Stop testing with Rubies older than 2.7 on non-Windows ([#8955]({{ site.repository }}/issues/8955))
- Bump actions/checkout from 2 to 3 ([#8986]({{ site.repository }}/issues/8986))
- Remove git.io shortlinks from repo ([#9045]({{ site.repository }}/issues/9045))
- Bump rubocop to 1.32 ([#9093]({{ site.repository }}/issues/9093))
- Bump RuboCop to `1.36.x` ([#9125]({{ site.repository }}/issues/9125))
- Use check-spelling/check-spelling@v0.0.20 ([#9111]({{ site.repository }}/issues/9111))
- Disable pending cops when running rubocop ([#9136]({{ site.repository }}/issues/9136))
- Relax RDoc version dependency ([#9142]({{ site.repository }}/issues/9142))
### Documentation
- typo - do instead of don&#39;t ([#8518]({{ site.repository }}/issues/8518))
- Document support for TSV files consistently ([#8488]({{ site.repository }}/issues/8488))
- Add a disclaimer to tutorials involving Ruby code ([#8525]({{ site.repository }}/issues/8525))
- Improve documentation on developing generators ([#8527]({{ site.repository }}/issues/8527))
- Fixes typo in layouts_dir documentation ([#8532]({{ site.repository }}/issues/8532))
- Fix i.e. typos in collections.md ([#8529]({{ site.repository }}/issues/8529))
- Remove GitHub Pages content which is in GitHub docs ([#8533]({{ site.repository }}/issues/8533))
- Step By Step Instructions Review ([#8399]({{ site.repository }}/issues/8399))
- Fix typo in migrating from 3.0 to 4.0 page ([#8572]({{ site.repository }}/issues/8572))
- Fix for important missing step in macOS Installation Docs: Add the Homebrew gems directory to the PATH ([#8496]({{ site.repository }}/issues/8496))
- Use latest Jekyll-action configuration ([#8579]({{ site.repository }}/issues/8579))
- docs: troubleshoot macOS with ARM64 architecture ([#8560]({{ site.repository }}/issues/8560))
- docs: add overview of .jekyll-cache dir ([#8648]({{ site.repository }}/issues/8648))
- docs: clarify where .jekyll-metadata comes from ([#8646]({{ site.repository }}/issues/8646))
- Razorops cicd added ([#8656]({{ site.repository }}/issues/8656))
- Specify default port and host for serve commands in docs ([#8624]({{ site.repository }}/issues/8624))
- Update third-party.md ([#8652]({{ site.repository }}/issues/8652))
- Add documentation for Sass configuration options ([#8587]({{ site.repository }}/issues/8587))
- Add formcarry to forms section ([#8471]({{ site.repository }}/issues/8471))
- Add step to set SDKROOT ([#8478]({{ site.repository }}/issues/8478))
- Improve the &#34;Markdown Options&#34; Docs ([#8681]({{ site.repository }}/issues/8681))
- Add &#39;webrick&#39; warning note to &#34;Quickstart&#34; Docs ([#8727]({{ site.repository }}/issues/8727))
- Update windows.md ([#8701]({{ site.repository }}/issues/8701))
- IRC networks - Libera, Freenode ([#8706]({{ site.repository }}/issues/8706))
- Improve GitHub Flavored Markdown Docs ([#8684]({{ site.repository }}/issues/8684))
- Fixing URL in MacOS install for rbenv-doctor ([#8693]({{ site.repository }}/issues/8693))
- Fix adjective in `troubleshooting.md` document ([#8777]({{ site.repository }}/issues/8777))
- Goodbye Frank. We&#39;ll miss you. 💔 ([#8807]({{ site.repository }}/issues/8807))
- Update index.html: Grammar fix. ([#8803]({{ site.repository }}/issues/8803))
- Prefer Libera. Remove Freenode. ([#8811]({{ site.repository }}/issues/8811))
- Update feature_request.md ([#8797]({{ site.repository }}/issues/8797))
- Remove AWS Amplify from the showcase ([#8812]({{ site.repository }}/issues/8812))
- Move Frank to Emeritus Core Team Members ([#8813]({{ site.repository }}/issues/8813))
- Release post for v4.2.1 ([#8818]({{ site.repository }}/issues/8818))
- Update CircleCI example ([#8829]({{ site.repository }}/issues/8829))
- Fix typo ([#8835]({{ site.repository }}/issues/8835))
- Added docs for running locally ([#8852]({{ site.repository }}/issues/8852))
- Linting README.markdown ([#8900]({{ site.repository }}/issues/8900))
- Remove text on GITHUB_TOKEN which is now built-in ([#8907]({{ site.repository }}/issues/8907))
- Add Security Policy document ([#8823]({{ site.repository }}/issues/8823))
- Manage repository meta documents consistently ([#8908]({{ site.repository }}/issues/8908))
- docs: add Layer0 deployment guide ([#8915]({{ site.repository }}/issues/8915))
- docs: Update REAMDE generated by `jekyll new-theme` ([#8919]({{ site.repository }}/issues/8919))
- Update resources.md ([#8925]({{ site.repository }}/issues/8925))
- Rewrite documentation on installing plugins ([#8921]({{ site.repository }}/issues/8921))
- Improve maintainers guide on releasing a new version ([#8928]({{ site.repository }}/issues/8928))
- Fix link for &#34;CloudSh&#34; ([#8934]({{ site.repository }}/issues/8934))
- Recommend using `actions/cache` in GitHub Actions documentation ([#8948]({{ site.repository }}/issues/8948))
- Remove references to EOL hakiri.io service ([#8946]({{ site.repository }}/issues/8946))
- Release post for v4.2.2 ([#8982]({{ site.repository }}/issues/8982))
- Document releasing off `*-stable` branches ([#8984]({{ site.repository }}/issues/8984))
- Update document by fix yaml syntax error ([#8991]({{ site.repository }}/issues/8991))
- Enhance option&#39;s case for Jekyll configuration ([#8992]({{ site.repository }}/issues/8992))
- Fix typo in `_docs/deployment/manual.md` ([#8997]({{ site.repository }}/issues/8997))
- Add quiet/verbose options ([#8996]({{ site.repository }}/issues/8996))
- Update README.markdown re IRC Pointer ([#9005]({{ site.repository }}/issues/9005))
- Remove Aerobatic ([#9007]({{ site.repository }}/issues/9007))
- Add Jekyll 3.9.2 release post to &#39;master&#39; branch ([#9013]({{ site.repository }}/issues/9013))
- Simplify macOS installation docs ([#8993]({{ site.repository }}/issues/8993))
- Improve document about Github Actions section ([#8853]({{ site.repository }}/issues/8853))
- Update permalinks.md ([#9017]({{ site.repository }}/issues/9017))
- Add clarity to docs on permalinks placeholders and builtins ([#8995]({{ site.repository }}/issues/8995))
- Remove Ionic Framework site from showcase ([#9057]({{ site.repository }}/issues/9057))
- Windows: describe which option to choose ([#9049]({{ site.repository }}/issues/9049))
- Improve links (http -&gt; https) ([#9064]({{ site.repository }}/issues/9064))
- Update ruby version for macos guide ([#9086]({{ site.repository }}/issues/9086))
- Update posts.md ([#9151]({{ site.repository }}/issues/9151))
- Release post for v4.3.0 ([#9157]({{ site.repository }}/issues/9157))
### Site Enhancements
{: #site-enhancements-v4-3-0}
- Improvements to CSS ([#7834]({{ site.repository }}/issues/7834))
- Slightly update lang `sh` code-block styling ([#8857]({{ site.repository }}/issues/8857))
## 4.2.2 / 2022-03-03
{: #v4-2-2}

View File

@@ -85,7 +85,7 @@ For example, suppose you have a special image syntax with complex formatting, an
```html
<figure>
<a href="http://jekyllrb.com">
<a href="https://jekyllrb.com">
<img src="logo.png" style="max-width: 200px;"
alt="Jekyll logo" />
</a>

View File

@@ -48,7 +48,7 @@ Jekyll on your Mac, or if you run into any issues, read that guide.
Install `chruby` and `ruby-install` with Homebrew:
```sh
brew install chruby ruby-install
brew install chruby ruby-install xz
```
Install the latest stable version of Ruby:
@@ -63,7 +63,7 @@ automatically use `chruby`:
```sh
echo "source $(brew --prefix)/opt/chruby/share/chruby/chruby.sh" >> ~/.zshrc
echo "source $(brew --prefix)/opt/chruby/share/chruby/auto.sh" >> ~/.zshrc
echo "chruby ruby-{{ site.data.ruby.current_version }}" >> ~/.zshrc
echo "chruby ruby-{{ site.data.ruby.current_version }}" >> ~/.zshrc # run 'chruby' to see actual version
```
If you're using Bash, replace `.zshrc` with `.bash_profile`. If you're not sure,

View File

@@ -23,7 +23,8 @@ We only cover RubyInstaller-2.4 and newer here. Older versions need to
Use default options for installation.
2. Run the `ridk install` step on the last stage of the installation wizard. This is needed for installing gems with native
extensions. You can find additional information regarding this in the
[RubyInstaller Documentation](https://github.com/oneclick/rubyinstaller2#using-the-installer-on-a-target-system)
[RubyInstaller Documentation](https://github.com/oneclick/rubyinstaller2#using-the-installer-on-a-target-system).
From the options choose `MSYS2 and MINGW development tool chain`.
3. Open a new command prompt window from the start menu, so that changes to the `PATH` environment variable becomes effective.
Install Jekyll and Bundler using `gem install jekyll bundler`
4. Check if Jekyll has been installed properly: `jekyll -v`

View File

@@ -278,6 +278,14 @@ Here's the full list of placeholders available:
</p>
</td>
</tr>
<tr>
<td>
<p><code>:output_ext</code></p>
</td>
<td>
<p>Extension of the output file. (Included by default and usually unnecessary.)</p>
</td>
</tr>
</tbody>
</table>
</div>
@@ -325,7 +333,10 @@ For posts, Jekyll also provides the following built-in styles for convenience:
<small>{% include docs_version_badge.html version="4.0" %}</small>
</td>
<td>
<p><code>/:categories/:year/W:week/:short_day/:title:output_ext</code></p>
<p>
<code>/:categories/:year/W:week/:short_day/:title:output_ext</code><br/>
<small>(<code>W</code> will be prefixed to the value of <code>:week</code>)</small>
</p>
</td>
</tr>
<tr>

View File

@@ -96,7 +96,7 @@ Linking to a PDF for readers to download:
## Displaying an index of posts
Creating an index of posts on another page should be easy thanks to
[Liquid](https://docs.shopify.com/themes/liquid/basics) and its tags. Heres a
[Liquid](https://shopify.github.io/liquid/) and its tags. Heres a
simple example of how to create a list of links to your blog posts:
{% raw %}
@@ -168,7 +168,7 @@ Categories of a post work similar to the tags above:
*The similarity between categories and tags however, ends there.*
Unlike tags, categories for posts can also be defined by a post's file path.
Any directory above `_post` will be read-in as a category. For example,
Any directory above `_posts` will be read-in as a category. For example,
if a post is at path `movies/horror/_posts/2019-05-21-bride-of-chucky.markdown`,
then `movies` and `horror` are automatically registered as categories for that
post.

View File

@@ -394,4 +394,4 @@ Themes are published via [RubyGems.org](https://rubygems.org). You will need a R
gem push jekyll-theme-awesome-*.gem
```
4. To release a new version of your theme, update the version number in the gemspec file, ( `jekyll-theme-awesome.gemspec` in this example ), and then repeat Steps 1 - 3 above. We recommend that you follow [Semantic Versioning](http://semver.org/) while bumping your theme-version.
4. To release a new version of your theme, update the version number in the gemspec file, ( `jekyll-theme-awesome.gemspec` in this example ), and then repeat Steps 1 - 3 above. We recommend that you follow [Semantic Versioning](https://semver.org) while bumping your theme-version.

View File

@@ -34,6 +34,11 @@ The following is a reference of the available data.
</p>
</div>
## Theme Variables {%- include docs_version_badge.html version="4.3.0" -%}
{: #theme-variables }
{% include docs_variables_table.html scope=site.data.jekyll_variables.theme %}
## Paginator
{% include docs_variables_table.html scope=site.data.jekyll_variables.paginator %}

View File

@@ -0,0 +1,88 @@
---
title: 'Jekyll 4.3.0 Released'
date: 2022-10-20 10:20:22 -0500
author: ashmaroli
version: 4.3.0
category: release
---
Hello Jekyllers!
The Jekyll team is happy to announce the release of `v4.3.0` shipping with some nice improvements and bug-fixes.
## Improvements
### Dependencies
- Gem `webrick` is now a listed dependency. You no longer have to add the gem to your Gemfile when using Jekyll with
Ruby 3.0 or newer.
- You may now use Rouge v4 or continue using Rouge v3.x by explicitly mentioning the version in your Gemfile.
- Support for gem `tzinfo` v2 and non-half-hour offsets have been added.
- You will be able to use v3 of `jekyll-sass-converter` when it ships.
### Builds
- Added support for bundling and loading data files from within a theme-gem similar to existing theme-gem contents.
- Changes to data files at source will now be respected during incremental builds.
- `site.static_files` now include static files within a collection.
- You may now configure converters for CSV data.
- `.jekyll-cache` or its equivalent custom cache directory will be automatically ignored by Git.
- Vendor the current latest mime-types dataset for use with local development server.
{% raw %}
### Liquid Templates
- `basename` attribute of documents are now exposed to Liquid as `name`, for example `{{ page.name }}`. Excerpts delegate
to associated document attribute.
- Top-level variable `{{ theme }}` introduced to expose gemspec details of theme-gem. (Valid only when using theme-gem)
{% endraw %}
## Bug-fixes
Some noteworthy bug-fixes include:
- Respect `BUNDLE_GEMFILE` when loading Jekyll plugins via Bundler.
- Prevent loading versions older than kramdown-2.3.1 as a security measure.
- Trigger livereloading even if the site has *no pages*.
- Ensure the expected class of theme config is returned following a merger.
- Enable BOM encoding only if configured encoding is 'UTF-8'.
- Respect server protocol while injecting livereload script.
- The table output for `--profile` stops printing incorrect "TOTALS" row.
[The full list of changes](/docs/history/#v4-3-0) may be perused if interested.
As always, we are grateful to the many contributors that helped improve the project codebase and documentation:
<small>Ashwin Maroli, Frank Taillandier, Matt Rogers, Parker Moore, Kelvin M. Klann, Josh Soref, Youssef Boulkaid,
Emily Grace Seville, Robert Martin, jaybe@jekyll, Ben Keith, Jonathan Darrer, Kaben, Mike Kasberg, Moncef Belyamani,
Phil Ross, Sesh Sadasivam, Adam Bell, Alaz Tetik, Alex Malaszkiewicz, Alex Saveau, Andreas Deininger, Andrew Davis,
Andrew Gutekanst, Andrii Abramov, Aram Akhavan, Atlas Cove, Attaphong Rattanaveerachanon, Ben Whetton, Chris Keefe,
Clayton Smith, Craig H Maynard, Curious Cat, Daniel Haim, Daniel Kehoe, Daryl Hepting, David Bruant, David Zhang,
Edson Jiménez, Eric Cousineau, Gary, Giuseppe Bertone, Ikko Ashimine, JJ, JT, Jeff Wilcox, Jeffrey Veen,
Jesse van der Pluijm, John Losito, Kantanat-Stamp, Kirstin Heidler, Korbs, Laurence Andrews, Liam Bigelow, Maik Riechert,
Meet Gor, Meg Gutshall, Michael Gerzabek, MichaelCordingley, Miguel Brandão, Nahin Khan, Nemo, Nicholas Paxford,
Nick Coish, Otto Urpelainen, Parikshit87, Phil Kirlin, Qasim Qureshi, Ricardo N Feliciano, Rishi Raj Jain, SNVMK,
SaintMalik, Sampath Sukesh Ravolaparthi, Shannon Kularathna, Shyam Mohan K, Takuya N, Tejas Bubane, Toshimaru, Tyler887,
Vinhas Kevin, alena-ko, fauno, lm, lucafrance, nusu, shorty, なつき</small>
---
### Announcement
I would like to inform you that following this release, Jekyll will start developing towards a v5.0 milestone that will
**definitely contain breaking changes**. I have set up a [tentative roadmap at the GitHub repository][roadmap] to give everyone
a glimpse of the PROBABLE OUTCOME. Towards that end, we will no longer accept documentation fixes on `master`. The `4.3-stable`
branch will be used to build and deploy the site for https://jekyllrb.com.
Jekyll 3.x series is now under security-maintenance phase. Only security patches will be released when necessary.
Jekyll 4.x series will continue receiving bug-fixes and security-patches only. Depending on the state of progress towards v5.0,
there will be *at least* one minor version release serving as a transitionary version containing deprecations and bridge code
to ease the eventual upgrade to v5.0.
[roadmap]: {{ site.repository }}/issues/9156
---
That is all for now.
Happy Jekyllin'!!

View File

@@ -679,7 +679,8 @@ article h2:first-child { margin-top: 0; }
.news article + article {
margin-top: -6px;
padding: 15px 40px;
padding-top: 15px;
padding-bottom: 15px;
border-top: 1px solid #555;
border-radius: 0;
@include box-shadow(0 -1px 0 #2f2f2f);
@@ -687,24 +688,6 @@ article h2:first-child { margin-top: 0; }
h2.post-title {
margin-bottom: 0.45em;
}
.post-category {
margin-right: 20px;
padding-left: 0;
width: 150px;
box-sizing: border-box;
.label {
float: right;
}
}
.cell-left, .cell-right {
display: inline-block;
}
.cell-left {
max-width: 180px;
}
.cell-right {
width: calc(100% - 130px);
}
.post-date { margin-left: 0 }
}

View File

@@ -1 +1 @@
4.2.2
4.3.0

View File

@@ -11,7 +11,7 @@ permalink: /
</div>
</div>
</section>
<section class="features">
<section class="features center-on-mobiles">
<div class="grid">
<div class="unit one-third">
<h2>Simple</h2>
@@ -30,7 +30,7 @@ permalink: /
<p>
Permalinks, categories, pages, posts, and custom layouts are all first-class citizens here.
</p>
<a href="http://import.jekyllrb.com">Migrate your blog &rarr;</a>
<a href="https://import.jekyllrb.com">Migrate your blog &rarr;</a>
</div>
<div class="clear"></div>
</div>

View File

@@ -4,7 +4,7 @@ title: JekyllConf
permalink: /jekyllconf/
---
[JekyllConf](http://jekyllconf.com) is a free, online conference for all things Jekyll hosted by [CloudCannon](http://cloudcannon.com). Each year members of the Jekyll community speak about interesting use cases, tricks they've learned, or meta Jekyll topics.
[JekyllConf](https://jekyllconf.com) is a free, online conference for all things Jekyll hosted by [CloudCannon](https://cloudcannon.com). Each year members of the Jekyll community speak about interesting use cases, tricks they've learned, or meta Jekyll topics.
## Featured

View File

@@ -91,7 +91,7 @@ Use a SaaS service as a backend for functionality on your Jekyll site
> "Jekyll is everything that I ever wanted in a blogging engine. Really. It isn't perfect, but what's excellent about it is that if there's something wrong, I know exactly how it works and how to fix it. It runs on the your machine only, and is essentially an added"build" step between you and the browser. I coded this entire site in TextMate using standard HTML5 and CSS3, and then at the end I added just a few little variables to the markup. Presto-chango, my site is built and I am at peace with the world."
- A way to [extend Jekyll](https://github.com/rfelix/jekyll_ext) without forking and modifying the Jekyll gem codebase and some [portable Jekyll extensions](https://github.com/rfelix/jekyll_ext/wiki/Extensions) that can be reused and shared.
- [Using your Rails layouts in Jekyll](http://numbers.brighterplanet.com/2010/08/09/sharing-rails-views-with-jekyll)
- [Using your Rails layouts in Jekyll](https://numbers.brighterplanet.com/2010/08/09/sharing-rails-views-with-jekyll)
## Forks

View File

@@ -67,6 +67,59 @@ Feature: Incremental rebuild
And the _site directory should exist
And I should see "Basic Site with include tag: Regenerated by Jekyll" in "_site/index.html"
Scenario: Rebuild when a data file is changed
Given I have a _data directory
And I have a "_data/colors.yml" file that contains "[red, green, blue]"
And I have a _data/members/core directory
And I have a "_data/members/core/emeritus.yml" file with content:
"""
- name: John Doe
role: Admin
"""
And I have an _includes directory
And I have an "_includes/about.html" file with content:
"""
<ul>
{% for entry in site.data.members.core.emeritus %}
<li title="{{ entry.name }} -- {{ entry.role }}">{{ entry.name }}</li>
{% endfor %}
</ul>
"""
And I have a _layouts directory
And I have a page layout that contains "{{ content }}\n\n{% include about.html %}"
And I have a home layout that contains "{{ content }}\n\nGenerated by Jekyll"
And I have a "_layouts/post.html" page with layout "page" that contains "{{ content }}"
And I have a "_layouts/static.html" page with layout "home" that contains "{{ content }}"
And I have an "index.html" page with layout "home" that contains "{{ site.data.colors | join: '_' }}"
And I have an "about.html" page with layout "page" that contains "About Us"
And I have a configuration file with "collections_dir" set to "collections"
And I have a collections/_posts directory
And I have the following post within the "collections" directory:
| title | date | layout | content |
| Table | 2009-03-26 | post | Post with data dependency |
| Wargames | 2009-03-27 | static | Post without data dependency |
When I run jekyll build -IV
Then I should get a zero exit status
And the _site directory should exist
And I should see "red_green_blue" in "_site/index.html"
And I should see "John Doe -- Admin" in "_site/about.html"
And I should see "Rendering: index.html" in the build output
And I should see "Rendering: _posts/2009-03-27-wargames.markdown" in the build output
When I wait 1 second
Then I have a "_data/members/core/emeritus.yml" file with content:
"""
- name: Jane Doe
role: Admin
"""
When I run jekyll build -IV
Then I should get a zero exit status
And the _site directory should exist
And I should see "red_green_blue" in "_site/index.html"
And I should see "Jane Doe -- Admin" in "_site/about.html"
And I should see "Rendering: _posts/2009-03-26-table.markdown" in the build output
But I should not see "Rendering: index.html" in the build output
And I should not see "Rendering: _posts/2009-03-27-wargames.markdown" in the build output
Scenario: Rebuild when a dependency of document in custom collection_dir is changed
Given I have a _includes directory
And I have a configuration file with "collections_dir" set to "collections"

View File

@@ -163,7 +163,7 @@ Given(%r!^I have a configuration file with "(.*)" set to "(.*)"$!) do |key, valu
else
{}
end
config[key] = YAML.load(value)
config[key] = SafeYAML.load(value)
Jekyll.set_timezone(value) if key == "timezone"
File.write("_config.yml", YAML.dump(config))
end

View File

@@ -36,19 +36,14 @@ Gem::Specification.new do |s|
s.add_runtime_dependency("colorator", "~> 1.0")
s.add_runtime_dependency("em-websocket", "~> 0.5")
s.add_runtime_dependency("i18n", "~> 1.0")
s.add_runtime_dependency("jekyll-sass-converter", "~> 2.0")
s.add_runtime_dependency("jekyll-sass-converter", ">= 2.0", "< 4.0")
s.add_runtime_dependency("jekyll-watch", "~> 2.0")
s.add_runtime_dependency("kramdown", "~> 2.3", ">= 2.3.1")
s.add_runtime_dependency("kramdown-parser-gfm", "~> 1.0")
s.add_runtime_dependency("liquid", ">= 4.0", "< 6.0")
s.add_runtime_dependency("liquid", "~> 4.0")
s.add_runtime_dependency("mercenary", ">= 0.3.6", "< 0.5")
s.add_runtime_dependency("pathutil", "~> 0.9")
# Ruby 3.1.0 shipped with `psych-4.0.3` which caused some of our Cucumber-based tests to fail.
# TODO: Remove lock once we implement a way to use Psych 4 without breaking anything.
s.add_runtime_dependency("psych", "~> 3.3")
s.add_runtime_dependency("rouge", "~> 3.0")
s.add_runtime_dependency("rouge", ">= 3.0", "< 5.0")
s.add_runtime_dependency("safe_yaml", "~> 1.0")
s.add_runtime_dependency("terminal-table", ">= 1.8", "< 4.0")
s.add_runtime_dependency("webrick", "~> 1.7")

View File

@@ -45,6 +45,8 @@ module Jekyll
autoload :Collection, "jekyll/collection"
autoload :Configuration, "jekyll/configuration"
autoload :Convertible, "jekyll/convertible"
autoload :DataEntry, "jekyll/data_entry"
autoload :DataHash, "jekyll/data_hash"
autoload :Deprecator, "jekyll/deprecator"
autoload :Document, "jekyll/document"
autoload :EntryFilter, "jekyll/entry_filter"

View File

@@ -30,8 +30,8 @@ module Jekyll
site = Jekyll::Site.new(options)
if options.fetch("skip_initial_build", false)
Jekyll.logger.warn "Build Warning:", "Skipping the initial build." \
" This may result in an out-of-date site."
Jekyll.logger.warn "Build Warning:",
"Skipping the initial build. This may result in an out-of-date site."
else
build(site, options)
end

View File

@@ -7,8 +7,7 @@ module Jekyll
def init_with_program(prog)
prog.command(:clean) do |c|
c.syntax "clean [subcommand]"
c.description "Clean the site " \
"(removes site output and metadata file) without building."
c.description "Clean the site (removes site output and metadata file) without building."
add_build_options(c)

View File

@@ -53,14 +53,14 @@ module Jekyll
"Detected '_posts' directory outside custom `collections_dir`!"
Jekyll.logger.warn "",
"Please move '#{posts_at_root}' into the custom directory at " \
"'#{site.in_source_dir(site.config["collections_dir"])}'"
"'#{site.in_source_dir(site.config["collections_dir"])}'"
false
end
def deprecated_relative_permalinks(site)
if site.config["relative_permalinks"]
Jekyll::Deprecator.deprecation_message "Your site still uses relative permalinks," \
" which was removed in Jekyll v3.0.0."
Jekyll::Deprecator.deprecation_message "Your site still uses relative permalinks, " \
"which was removed in Jekyll v3.0.0."
true
end
end
@@ -105,9 +105,9 @@ module Jekyll
next unless real_urls.uniq.size > 1
urls_only_differ_by_case = true
Jekyll.logger.warn "Warning:", "The following URLs only differ" \
" by case. On a case-insensitive file system one of the URLs" \
" will be overwritten by the other: #{real_urls.join(", ")}"
Jekyll.logger.warn "Warning:", "The following URLs only differ by case. On a " \
"case-insensitive file system one of the URLs will be " \
"overwritten by the other: #{real_urls.join(", ")}"
end
urls_only_differ_by_case
end
@@ -148,8 +148,8 @@ module Jekyll
def url_exists?(url)
return true unless url.nil? || url.empty?
Jekyll.logger.warn "Warning:", "You didn't set an URL in the config file, "\
"you may encounter problems with some plugins."
Jekyll.logger.warn "Warning:", "You didn't set an URL in the config file, you may " \
"encounter problems with some plugins."
false
end
@@ -157,18 +157,18 @@ module Jekyll
Addressable::URI.parse(url)
true
# Addressable::URI#parse only raises a TypeError
# https://git.io/vFfbx
# https://github.com/sporkmonger/addressable/blob/0a0e96acb17225f9b1c9cab0bad332b448934c9a/lib/addressable/uri.rb#L103
rescue TypeError
Jekyll.logger.warn "Warning:", "The site URL does not seem to be valid, "\
"check the value of `url` in your config file."
Jekyll.logger.warn "Warning:", "The site URL does not seem to be valid, " \
"check the value of `url` in your config file."
false
end
def url_absolute(url)
return true if url.is_a?(String) && Addressable::URI.parse(url).absolute?
Jekyll.logger.warn "Warning:", "Your site URL does not seem to be absolute, "\
"check the value of `url` in your config file."
Jekyll.logger.warn "Warning:", "Your site URL does not seem to be absolute, " \
"check the value of `url` in your config file."
false
end
end

View File

@@ -28,8 +28,8 @@ module Jekyll
FileUtils.mkdir_p new_blog_path
if preserve_source_location?(new_blog_path, options)
Jekyll.logger.error "Conflict:", "#{new_blog_path} exists and is not empty."
Jekyll.logger.abort_with "", "Ensure #{new_blog_path} is empty or else " \
"try again with `--force` to proceed and overwrite any files."
Jekyll.logger.abort_with "", "Ensure #{new_blog_path} is empty or else try again " \
"with `--force` to proceed and overwrite any files."
end
if options["blank"]
@@ -108,13 +108,9 @@ module Jekyll
def create_site(new_blog_path)
create_sample_files new_blog_path
File.open(File.expand_path(initialized_post_name, new_blog_path), "w") do |f|
f.write(scaffold_post_content)
end
File.write(File.expand_path(initialized_post_name, new_blog_path), scaffold_post_content)
File.open(File.expand_path("Gemfile", new_blog_path), "w") do |f|
f.write(gemfile_contents)
end
File.write(File.expand_path("Gemfile", new_blog_path), gemfile_contents)
end
def preserve_source_location?(path, options)

View File

@@ -10,8 +10,7 @@ module Jekyll
prog.command(:"new-theme") do |c|
c.syntax "new-theme NAME"
c.description "Creates a new Jekyll theme scaffold"
c.option "code_of_conduct", \
"-c", "--code-of-conduct", \
c.option "code_of_conduct", "-c", "--code-of-conduct",
"Include a Code of Conduct. (defaults to false)"
c.action do |args, opts|
@@ -30,8 +29,8 @@ module Jekyll
Jekyll.logger.abort_with "Conflict:", "#{theme.path} already exists." if theme.path.exist?
theme.create!
Jekyll.logger.info "Your new Jekyll theme, #{theme.name.cyan}," \
" is ready for you in #{theme.path.to_s.cyan}!"
Jekyll.logger.info "Your new Jekyll theme, #{theme.name.cyan}, " \
"is ready for you in #{theme.path.to_s.cyan}!"
Jekyll.logger.info "For help getting started, read #{theme.path}/README.md."
end
end

View File

@@ -21,11 +21,11 @@ module Jekyll
"ssl_key" => ["--ssl-key [KEY]", "X.509 (SSL) Private Key."],
"port" => ["-P", "--port [PORT]", "Port to listen on"],
"show_dir_listing" => ["--show-dir-listing",
"Show a directory listing instead of loading" \
" your index file.",],
"Show a directory listing instead of loading " \
"your index file.",],
"skip_initial_build" => ["skip_initial_build", "--skip-initial-build",
"Skips the initial site build which occurs before" \
" the server is started.",],
"Skips the initial site build which occurs before " \
"the server is started.",],
"livereload" => ["-l", "--livereload",
"Use LiveReload to automatically refresh browsers",],
"livereload_ignore" => ["--livereload-ignore ignore GLOB1[,GLOB2[,...]]",
@@ -113,8 +113,8 @@ module Jekyll
def validate_options(opts)
if opts["livereload"]
if opts["detach"]
Jekyll.logger.warn "Warning:", "--detach and --livereload are mutually exclusive." \
" Choosing --livereload"
Jekyll.logger.warn "Warning:", "--detach and --livereload are mutually exclusive. " \
"Choosing --livereload"
opts["detach"] = false
end
if opts["ssl_cert"] || opts["ssl_key"]
@@ -132,9 +132,9 @@ module Jekyll
livereload_max_delay
livereload_ignore
livereload_port).any? { |o| opts[o] }
Jekyll.logger.abort_with "--livereload-min-delay, "\
"--livereload-max-delay, --livereload-ignore, and "\
"--livereload-port require the --livereload option."
Jekyll.logger.abort_with "--livereload-min-delay, --livereload-max-delay, " \
"--livereload-ignore, and --livereload-port require " \
"the --livereload option."
end
end
@@ -174,7 +174,8 @@ module Jekyll
# Do a base pre-setup of WEBRick so that everything is in place
# when we get ready to party, checking for an setting up an error page
# and making sure our destination exists.
#
# rubocop:disable Security/IoMethods
def setup(destination)
require_relative "serve/servlet"
@@ -188,6 +189,7 @@ module Jekyll
end
end
end
# rubocop:enable Security/IoMethods
def webrick_opts(opts)
opts = {
@@ -263,8 +265,7 @@ module Jekyll
return system "xdg-open", address if Utils::Platforms.linux?
return system "open", address if Utils::Platforms.osx?
Jekyll.logger.error "Refusing to launch browser; " \
"Platform launcher unknown."
Jekyll.logger.error "Refusing to launch browser. Platform launcher unknown."
end
# Keep in our area with a thread or detach the server as requested
@@ -277,9 +278,8 @@ module Jekyll
end
Process.detach(pid)
Jekyll.logger.info "Server detached with pid '#{pid}'.", \
"Run `pkill -f jekyll' or `kill -9 #{pid}'" \
" to stop the server."
Jekyll.logger.info "Server detached with pid '#{pid}'.",
"Run `pkill -f jekyll' or `kill -9 #{pid}' to stop the server."
else
t = Thread.new { server.start }
trap("INT") { server.shutdown }

View File

@@ -110,7 +110,7 @@ module Jekyll
def log_error(error)
Jekyll.logger.error "LiveReload experienced an error. " \
"Run with --trace for more information."
"Run with --trace for more information."
raise error
end
end

View File

@@ -128,7 +128,7 @@ module Jekyll
class Servlet < WEBrick::HTTPServlet::FileHandler
DEFAULTS = {
"Cache-Control" => "private, max-age=0, proxy-revalidate, " \
"no-store, no-cache, must-revalidate",
"no-store, no-cache, must-revalidate",
}.freeze
def initialize(server, root, callbacks)

View File

@@ -304,8 +304,8 @@ module Jekyll
return if config["plugins"].is_a?(Array)
Jekyll.logger.error "'plugins' should be set as an array of gem-names, but was: " \
"#{config["plugins"].inspect}. Use 'plugins_dir' instead to set the directory " \
"for your non-gemified Ruby plugins."
"#{config["plugins"].inspect}. Use 'plugins_dir' instead to set " \
"the directory for your non-gemified Ruby plugins."
raise Jekyll::Errors::InvalidConfigurationError,
"'plugins' should be set as an array, but was: #{config["plugins"].inspect}."
end

View File

@@ -1,4 +1,4 @@
# Frozen-string-literal: true
# frozen_string_literal: true
module Kramdown
# A Kramdown::Document subclass meant to optimize memory usage from initializing

83
lib/jekyll/data_entry.rb Normal file
View File

@@ -0,0 +1,83 @@
# frozen_string_literal: true
module Jekyll
class DataEntry
attr_accessor :context
attr_reader :data
# Create a Jekyll wrapper for given parsed data object.
#
# site - The current Jekyll::Site instance.
# abs_path - Absolute path to the data source file.
# parsed_data - Parsed representation of data source file contents.
#
# Returns nothing.
def initialize(site, abs_path, parsed_data)
@site = site
@path = abs_path
@data = parsed_data
end
# Liquid representation of current instance is the parsed data object.
#
# Mark as a dependency for regeneration here since every renderable object primarily uses the
# parsed data object while the parent resource is being rendered by Liquid. Accessing the data
# object directly via Ruby interface `#[]()` is outside the scope of regeneration.
#
# FIXME: Marking as dependency on every call is non-ideal. Optimize at later day.
#
# Returns the parsed data object.
def to_liquid
add_regenerator_dependencies if incremental_build?
@data
end
# -- Overrides to maintain backwards compatibility --
# Any missing method will be forwarded to the underlying data object stored in the instance
# variable `@data`.
def method_missing(method, *args, &block)
@data.respond_to?(method) ? @data.send(method, *args, &block) : super
end
def respond_to_missing?(method, *)
@data.respond_to?(method) || super
end
def <=>(other)
data <=> (other.is_a?(self.class) ? other.data : other)
end
def ==(other)
data == (other.is_a?(self.class) ? other.data : other)
end
# Explicitly defined to bypass re-routing from `method_missing` hook for greater performance.
#
# Returns string representation of parsed data object.
def inspect
@data.inspect
end
private
def incremental_build?
@incremental = @site.config["incremental"] if @incremental.nil?
@incremental
end
def add_regenerator_dependencies
page = context.registers[:page]
return unless page&.key?("path")
absolute_path = \
if page["collection"]
@site.in_source_dir(@site.config["collections_dir"], page["path"])
else
@site.in_source_dir(page["path"])
end
@site.regenerator.add_dependency(absolute_path, @path)
end
end
end

61
lib/jekyll/data_hash.rb Normal file
View File

@@ -0,0 +1,61 @@
# frozen_string_literal: true
module Jekyll
# A class that behaves very similar to Ruby's `Hash` class yet different in how it is handled by
# Liquid. This class emulates Hash by delegation instead of inheritance to minimize overridden
# methods especially since some Hash methods returns another Hash instance instead of the
# subclass instance.
class DataHash
#
# Delegate given (zero-arity) method(s) to the Hash object stored in instance variable
# `@registry`.
# NOTE: Avoiding the use of `Forwardable` module's `def_delegators` for preventing unnecessary
# creation of interim objects on multiple calls.
def self.delegate_to_registry(*symbols)
symbols.each { |sym| define_method(sym) { @registry.send(sym) } }
end
private_class_method :delegate_to_registry
# -- core instance methods --
attr_accessor :context
def initialize
@registry = {}
end
def [](key)
@registry[key].tap do |value|
value.context = context if value.respond_to?(:context=)
end
end
# `Hash#to_liquid` returns the Hash instance itself.
# Mimic that behavior by returning `self` instead of returning the `@registry` variable value.
def to_liquid
self
end
# -- supplementary instance methods to emulate Hash --
delegate_to_registry :freeze, :inspect
def merge(other, &block)
merged_registry = @registry.merge(other, &block)
dup.tap { |d| d.instance_variable_set(:@registry, merged_registry) }
end
def merge!(other, &block)
@registry.merge!(other, &block)
self
end
def method_missing(method, *args, &block)
@registry.send(method, *args, &block)
end
def respond_to_missing?(method, *)
@registry.respond_to?(method)
end
end
end

View File

@@ -7,7 +7,6 @@ module Jekyll
mutable false
delegate_method_as :site_data, :data
delegate_methods :time, :pages, :static_files, :tags, :categories
private delegate_method_as :config, :fallback_data
@@ -24,6 +23,12 @@ module Jekyll
(key != "posts" && @obj.collections.key?(key)) || super
end
def data
@obj.site_data.tap do |value|
value.context = @context if value.respond_to?(:context=)
end
end
def posts
@site_posts ||= @obj.posts.docs.sort { |a, b| b <=> a }
end

View File

@@ -0,0 +1,36 @@
# frozen_string_literal: true
module Jekyll
module Drops
class ThemeDrop < Drop
delegate_methods :root
delegate_method_as :runtime_dependencies, :dependencies
def authors
@authors ||= gemspec.authors.join(", ")
end
def version
@version ||= gemspec.version.to_s
end
def description
@description ||= gemspec.description || gemspec.summary
end
def metadata
@metadata ||= gemspec.metadata
end
private
def gemspec
@gemspec ||= @obj.send(:gemspec)
end
def fallback_data
@fallback_data ||= {}
end
end
end
end

View File

@@ -16,6 +16,10 @@ module Jekyll
@site_drop ||= SiteDrop.new(@obj)
end
def theme
@theme_drop ||= ThemeDrop.new(@obj.theme) if @obj.theme
end
private
def fallback_data

View File

@@ -190,8 +190,8 @@ module Jekyll
def print_build_warning
Jekyll.logger.warn "Warning:", "Excerpt modified in #{doc.relative_path}!"
Jekyll.logger.warn "", "Found a Liquid block containing the excerpt separator" \
" #{doc.excerpt_separator.inspect}. "
Jekyll.logger.warn "", "Found a Liquid block containing the excerpt separator " \
"#{doc.excerpt_separator.inspect}."
Jekyll.logger.warn "", "The block has been modified with the appropriate closing tag."
Jekyll.logger.warn "", "Feel free to define a custom excerpt or excerpt_separator in the"
Jekyll.logger.warn "", "document's Front Matter if the generated excerpt is unsatisfactory."

View File

@@ -311,7 +311,7 @@ module Jekyll
order = + 1
else
raise ArgumentError, "Invalid nils order: " \
"'#{nils}' is not a valid nils order. It must be 'first' or 'last'."
"'#{nils}' is not a valid nils order. It must be 'first' or 'last'."
end
sort_input(input, property, order)
@@ -398,17 +398,11 @@ module Jekyll
# `where` filter helper
#
def compare_property_vs_target(property, target)
# Liquid v4 handles 'empty' and 'blank' keywords separately from v5.
# Delete when we remove Liquid v5 support.
if Liquid::VERSION.start_with?("4.") && target.is_a?(Liquid::Expression::MethodLiteral)
target = target.to_s
return true if property == target || Array(property).join == target
end
case target
when NilClass
return true if property.nil?
when "", Liquid::Expression::MethodLiteral # empty/blank hashes and arrays will match this
when Liquid::Expression::MethodLiteral # `empty` or `blank`
target = target.to_s
return true if property == target || Array(property).join == target
else
target = target.to_s
@@ -484,7 +478,7 @@ module Jekyll
end
# ----------- The following set of code was *adapted* from Liquid::If
# ----------- ref: https://git.io/vp6K6
# ----------- ref: https://github.com/Shopify/liquid/blob/ffb0ace30315bbcf3548a0383fab531452060ae8/lib/liquid/tags/if.rb#L84-L107
# Parse a string to a Liquid Condition
def parse_condition(exp)

View File

@@ -78,8 +78,8 @@ module Jekyll
}
unless @registry[owner][event]
raise NotAvailable, "Invalid hook. #{owner} supports only the " \
"following hooks #{@registry[owner].keys.inspect}"
raise NotAvailable, "Invalid hook. #{owner} supports only the following hooks " \
"#{@registry[owner].keys.inspect}"
end
raise Uncallable, "Hooks must respond to :call" unless block.respond_to? :call

View File

@@ -113,9 +113,10 @@ module Jekyll
pagination_included = (site.config["plugins"] || []).include?("jekyll-paginate") ||
defined?(Jekyll::Paginate)
if site.config["paginate"] && !pagination_included
Jekyll::Deprecator.deprecation_message "You appear to have pagination " \
"turned on, but you haven't included the `jekyll-paginate` gem. " \
"Ensure you have `plugins: [jekyll-paginate]` in your configuration file."
Jekyll::Deprecator.deprecation_message <<~MSG
You appear to have pagination turned on, but you haven't included the `jekyll-paginate`
gem. Ensure you have `plugins: [jekyll-paginate]` in your configuration file.
MSG
end
end
end

View File

@@ -14,15 +14,12 @@ module Jekyll
rows = table_rows.dup
header = rows.shift
footer = rows.pop
output = +"\n"
table = Terminal::Table.new do |t|
t << header
t << :separator
rows.each { |row| t << row }
t << :separator
t << footer
t.style = TERMINAL_TABLE_STYLES
t.align_column(0, :left)
end

View File

@@ -6,7 +6,7 @@ module Jekyll
def initialize(site, in_source_dir: nil)
@site = site
@content = {}
@content = DataHash.new
@entry_filter = EntryFilter.new(site)
@in_source_dir = in_source_dir || @site.method(:in_source_dir)
@source_dir = @in_source_dir.call("/")
@@ -24,6 +24,8 @@ module Jekyll
@content
end
# rubocop:disable Metrics/AbcSize
# Read and parse all .yaml, .yml, .json, .csv and .tsv
# files under <dir> and add them to the <data> variable.
#
@@ -43,13 +45,14 @@ module Jekyll
next if @entry_filter.symlink?(path)
if File.directory?(path)
read_data_to(path, data[sanitize_filename(entry)] = {})
read_data_to(path, data[sanitize_filename(entry)] = DataHash.new)
else
key = sanitize_filename(File.basename(entry, ".*"))
data[key] = read_data_file(path)
data[key] = DataEntry.new(site, path, read_data_file(path))
end
end
end
# rubocop:enable Metrics/AbcSize
# Determines how to read a data file.
#

View File

@@ -105,7 +105,7 @@ module Jekyll
converter.convert output
rescue StandardError => e
Jekyll.logger.error "Conversion error:",
"#{converter.class} encountered an error while "\
"#{converter.class} encountered an error while " \
"converting '#{document.relative_path}':"
Jekyll.logger.error("", e.to_s)
raise e
@@ -179,7 +179,7 @@ module Jekyll
return unless invalid_layout?(layout)
Jekyll.logger.warn "Build Warning:", "Layout '#{document.data["layout"]}' requested " \
"in #{document.relative_path} does not exist."
"in #{document.relative_path} does not exist."
end
# Render layout content into document.output

View File

@@ -328,11 +328,11 @@ module Jekyll
# Returns
def relative_permalinks_are_deprecated
if config["relative_permalinks"]
Jekyll.logger.abort_with "Since v3.0, permalinks for pages" \
" in subfolders must be relative to the" \
" site source directory, not the parent" \
" directory. Check https://jekyllrb.com/docs/upgrading/"\
" for more info."
Jekyll.logger.abort_with "Since v3.0, permalinks for pages " \
"in subfolders must be relative to the " \
"site source directory, not the parent " \
"directory. Check https://jekyllrb.com/docs/upgrading/ " \
"for more info."
end
end
@@ -360,9 +360,13 @@ module Jekyll
end
def each_site_file
seen_files = []
%w(pages static_files_to_write docs_to_write).each do |type|
send(type).each do |item|
next if seen_files.include?(item)
yield item
seen_files << item
end
end
end
@@ -476,7 +480,11 @@ module Jekyll
theme_config.delete_if { |key, _| Configuration::DEFAULTS.key?(key) }
# Override theme_config with existing config and return the result.
# Additionally ensure we return a `Jekyll::Configuration` instance instead of a Hash.
Utils.deep_merge_hashes(theme_config, config)
.each_with_object(Jekyll::Configuration.new) do |(key, value), conf|
conf[key] = value
end
end
# Limits the current posts; removes the posts which exceed the limit_posts
@@ -532,8 +540,8 @@ module Jekyll
if config["theme"].is_a?(String)
Jekyll::Theme.new(config["theme"])
else
Jekyll.logger.warn "Theme:", "value of 'theme' in config should be " \
"String to use gem-based themes, but got #{config["theme"].class}"
Jekyll.logger.warn "Theme:", "value of 'theme' in config should be String to use " \
"gem-based themes, but got #{config["theme"].class}"
nil
end
end

View File

@@ -104,8 +104,8 @@ module Jekyll
"class=\"language-#{@lang.to_s.tr("+", "-")}\"",
"data-lang=\"#{@lang}\"",
].join(" ")
"<figure class=\"highlight\"><pre><code #{code_attributes}>"\
"#{code.chomp}</code></pre></figure>"
"<figure class=\"highlight\"><pre><code #{code_attributes}>" \
"#{code.chomp}</code></pre></figure>"
end
end
end

View File

@@ -179,8 +179,8 @@ module Jekyll
private
def could_not_locate_message(file, includes_dirs, safe)
message = "Could not locate the included file '#{file}' in any of "\
"#{includes_dirs}. Ensure it exists in one of those directories and"
message = "Could not locate the included file '#{file}' in any of #{includes_dirs}. " \
"Ensure it exists in one of those directories and"
message + if safe
" is not a symlink as those are not allowed in safe mode."
else

View File

@@ -86,11 +86,11 @@ module Jekyll
site.posts.docs.each do |document|
next unless @post.deprecated_equality document
Jekyll::Deprecator.deprecation_message "A call to "\
"'{% post_url #{@post.name} %}' did not match " \
"a post using the new matching method of checking name " \
"(path-date-slug) equality. Please make sure that you " \
"change this tag to match the post's name exactly."
Jekyll::Deprecator.deprecation_message(
"A call to '{% post_url #{@post.name} %}' did not match a post using the new " \
"matching method of checking name (path-date-slug) equality. Please make sure " \
"that you change this tag to match the post's name exactly."
)
return relative_url(document)
end

View File

@@ -18,8 +18,8 @@ module Jekyll
# Otherwise, Jekyll.sanitized path with prepend the unresolved root
@root ||= File.realpath(gemspec.full_gem_path)
rescue Errno::ENOENT, Errno::EACCES, Errno::ELOOP
raise "Path #{gemspec.full_gem_path} does not exist, is not accessible "\
"or includes a symbolic link loop"
raise "Path #{gemspec.full_gem_path} does not exist, is not accessible or includes " \
"a symbolic link loop"
end
# The name of theme directory

View File

@@ -100,7 +100,7 @@ module Jekyll
winner = pool.find { |key| @placeholders.key?(key) }
if winner.nil?
raise NoMethodError,
"The URL template doesn't have #{pool.join(" or ")} keys. "\
"The URL template doesn't have #{pool.join(" or ")} keys. " \
"Check your permalink template!"
end

View File

@@ -47,7 +47,14 @@ module Jekyll
end
def mergable?(value)
value.is_a?(Hash) || value.is_a?(Drops::Drop)
case value
when Hash, Drops::Drop, DataHash
true
when DataEntry
mergable?(value.data)
else
false
end
end
def duplicable?(obj)

View File

@@ -1,4 +1,4 @@
# Frozen-string-literal: true
# frozen_string_literal: true
module Jekyll
module Utils

View File

@@ -25,7 +25,7 @@ module Jekyll
# e.g. Eastern Standard Time (EST) that is 5Hrs. to the 'west' of Prime Meridian
# is denoted as:
# EST+5 (or) EST+05:00
# Reference: http://www.gnu.org/software/libc/manual/html_node/TZ-Variable.html
# Reference: https://www.gnu.org/software/libc/manual/html_node/TZ-Variable.html
sign = offset.positive? ? "-" : "+"
rational_hours = offset.abs.to_r / 3600

View File

@@ -1,5 +1,5 @@
# frozen_string_literal: true
module Jekyll
VERSION = "4.2.2"
VERSION = "4.3.0"
end

View File

@@ -1,6 +1,6 @@
#!/bin/bash
echo "RuboCop $(bundle exec rubocop --version)"
bundle exec rubocop -D $@
bundle exec rubocop -D --disable-pending-cops $@
success=$?
if ((success != 0)); then
echo -e "\nTry running \`script/fmt -a\` to automatically fix errors"

View File

@@ -105,8 +105,7 @@ class JekyllUnitTest < Minitest::Test
end
def mocks_expect(*args)
RSpec::Mocks::ExampleMethods::ExpectHost.instance_method(:expect)\
.bind(self).call(*args)
RSpec::Mocks::ExampleMethods::ExpectHost.instance_method(:expect).bind(self).call(*args)
end
def before_setup
@@ -166,7 +165,7 @@ class JekyllUnitTest < Minitest::Test
def directory_with_contents(path)
FileUtils.rm_rf(path)
FileUtils.mkdir(path)
File.open("#{path}/index.html", "w") { |f| f.write("I was previously generated.") }
File.write("#{path}/index.html", "I was previously generated.")
end
def with_env(key, value)

View File

@@ -0,0 +1 @@
true

View File

@@ -0,0 +1,4 @@
- java
- ruby
- rust
- golang

View File

@@ -5,8 +5,8 @@
Jekyll is a simple, blog-aware, static site generator. It takes a template
directory containing raw text files in various formats, runs it through
[Markdown](http://daringfireball.net/projects/markdown/) (or
[Textile](http://redcloth.org/textile)) and
[Markdown](https://daringfireball.net/projects/markdown/) (or
[Textile](https://www.promptworks.com/textile)) and
[Liquid](https://help.shopify.com/themes/liquid/basics)
converters, and spits out a complete, ready-to-publish static website suitable
for serving with your favorite web server. Jekyll also happens to be the engine

View File

@@ -5,5 +5,5 @@ approx_time: 30 mins
---
Jekyll converts Markdown documents to HTML by default. Don't know what's Markdown?
Read this [documentation](http://daringfireball.net/projects/markdown/)
Read this [documentation](https://daringfireball.net/projects/markdown/)
While you're at it, might as well learn about [Kramdown](https://kramdown.gettalong.org/)

View File

@@ -75,9 +75,7 @@ class TestCommandsServe < JekyllUnitTest
</html>
HTML
File.open(File.join(@destination, "hello.html"), "w") do |f|
f.write(simple_page)
end
File.write(File.join(@destination, "hello.html"), simple_page)
allow(Jekyll::Site).to receive(:new).and_return(site)
end

34
test/test_data_entry.rb Normal file
View File

@@ -0,0 +1,34 @@
# frozen_string_literal: true
require "helper"
class TestDataEntry < JekyllUnitTest
context "Data Entry" do
setup do
site = fixture_site
site.read
@data_hash = site.site_data
end
should "expose underlying data object es Liquid representation" do
subject = @data_hash["languages"]
assert_equal Jekyll::DataEntry, subject.class
assert_equal subject.data, subject.to_liquid
end
should "respond to `#[](key)` when expected to but raise Exception otherwise" do
greeting = @data_hash["greetings"]
assert greeting["foo"]
boolean = @data_hash["boolean"] # the value is a Boolean.
assert_raises(NoMethodError) { boolean["foo"] }
end
should "compare with another instance of same class using underlying data" do
assert_equal(
[%w(java ruby), %w(java ruby rust golang)],
[@data_hash["languages_plus"], @data_hash["languages"]].sort
)
end
end
end

57
test/test_data_hash.rb Normal file
View File

@@ -0,0 +1,57 @@
# frozen_string_literal: true
require "helper"
class TestDataHash < JekyllUnitTest
context "Data Hash" do
setup do
@site = fixture_site
@site.read
end
should "only mimic a ::Hash instance" do
subject = @site.site_data
assert_equal Jekyll::DataHash, subject.class
refute subject.is_a?(Hash)
copy = subject.dup
assert copy["greetings"]["foo"]
assert_includes copy.dig("greetings", "foo"), "Hello!"
copy["greetings"] = "Hola!"
assert_equal "Hola!", copy["greetings"]
refute copy["greetings"]["foo"]
frozen_data_hash = Jekyll::DataHash.new.freeze
assert_raises(FrozenError) { frozen_data_hash["lorem"] = "ipsum" }
end
should "be mergable" do
alpha = Jekyll::DataHash.new
beta = Jekyll::DataHash.new
assert_equal "{}", alpha.inspect
sample_data = { "foo" => "bar" }
assert_equal sample_data["foo"], alpha.merge(sample_data)["foo"]
assert_equal alpha.class, alpha.merge(sample_data).class
assert_empty alpha
beta.merge!(sample_data)
assert_equal sample_data["foo"], alpha.merge(beta)["foo"]
assert_equal alpha.class, alpha.merge(beta).class
assert_empty alpha
beta.merge!(@site.site_data)
assert_equal alpha.class, beta.class
assert_includes beta.dig("greetings", "foo"), "Hello!"
assert_empty alpha
assert_equal sample_data["foo"], Jekyll::Utils.deep_merge_hashes(alpha, sample_data)["foo"]
assert_includes(
Jekyll::Utils.deep_merge_hashes(alpha, beta).dig("greetings", "foo"),
"Hello!"
)
end
end
end

View File

@@ -22,6 +22,7 @@ class TestDoctorCommand < JekyllUnitTest
assert_equal "", output
end
# rubocop:disable Layout/LineLength
should "return warning for pages only differing by case" do
@site = Site.new(Jekyll.configuration(
"source" => File.join(source_dir, "/_urls_differ_by_case_invalid"),
@@ -32,9 +33,10 @@ class TestDoctorCommand < JekyllUnitTest
ret = Jekyll::Commands::Doctor.urls_only_differ_by_case(@site)
assert ret
end
assert_includes output, "Warning: The following URLs only differ by case. "\
"On a case-insensitive file system one of the URLs will be overwritten by the "\
"other: #{dest_dir}/about/index.html, #{dest_dir}/About/index.html"
assert_includes output, "Warning: The following URLs only differ by case. On a case-" \
"insensitive file system one of the URLs will be overwritten by the " \
"other: #{dest_dir}/about/index.html, #{dest_dir}/About/index.html"
end
# rubocop:enable Layout/LineLength
end
end

View File

@@ -111,8 +111,7 @@ class TestExcerpt < JekyllUnitTest
context "#content" do
context "before render" do
should "be the first paragraph of the page" do
expected = "First paragraph with [link ref][link].\n\n[link]: "\
"https://jekyllrb.com/"
expected = "First paragraph with [link ref][link].\n\n[link]: https://jekyllrb.com/"
assert_equal expected, @excerpt.content
end
@@ -129,7 +128,7 @@ class TestExcerpt < JekyllUnitTest
end
should "be the first paragraph of the page" do
expected = "<p>First paragraph with <a href=\"https://jekyllrb.com/\">link "\
expected = "<p>First paragraph with <a href=\"https://jekyllrb.com/\">link " \
"ref</a>.</p>\n\n"
assert_equal expected, @extracted_excerpt.output
end
@@ -146,7 +145,7 @@ class TestExcerpt < JekyllUnitTest
end
should "contain all refs at the bottom of the page" do
(0..3).each do |i|
4.times do |i|
assert_match "[link_#{i}]: www.example.com/#{i}", @excerpt.content
end
end
@@ -159,7 +158,7 @@ class TestExcerpt < JekyllUnitTest
@rendered_post = @post.dup
do_render(@rendered_post)
output = @rendered_post.data["excerpt"].output
(0..3).each do |i|
4.times do |i|
assert_includes output, "<a href=\"www.example.com/#{i}\">"
end
end

View File

@@ -918,13 +918,13 @@ class TestFilters < JekyllUnitTest
# `{{ hash | where: 'tags', empty }}`
assert_equal(
[{ "tags" => {} }, { "tags" => "" }, { "tags" => nil }, { "tags" => [] }],
@filter.where(hash, "tags", Liquid::Condition.parse_expression(nil, "empty"))
@filter.where(hash, "tags", Liquid::Expression::LITERALS["empty"])
)
# `{{ `hash | where: 'tags', blank }}`
assert_equal(
[{ "tags" => {} }, { "tags" => "" }, { "tags" => nil }, { "tags" => [] }],
@filter.where(hash, "tags", Liquid::Condition.parse_expression(nil, "blank"))
@filter.where(hash, "tags", Liquid::Expression::LITERALS["blank"])
)
end
@@ -1151,13 +1151,13 @@ class TestFilters < JekyllUnitTest
# `{{ hash | find: 'tags', empty }}`
assert_equal(
{ "tags" => {} },
@filter.find(hash, "tags", Liquid::Condition.parse_expression(nil, "empty"))
@filter.find(hash, "tags", Liquid::Expression::LITERALS["empty"])
)
# `{{ `hash | find: 'tags', blank }}`
assert_equal(
{ "tags" => {} },
@filter.find(hash, "tags", Liquid::Condition.parse_expression(nil, "blank"))
@filter.find(hash, "tags", Liquid::Expression::LITERALS["blank"])
)
end

View File

@@ -164,8 +164,8 @@ class TestPageWithoutAFile < JekyllUnitTest
refute_path_exists(dest_dir("virtual-about", "index.html"))
end
should "be processed and written to destination when passed as "\
"an entry in 'site.pages' array" do
should "be processed and written to destination when passed as an entry in " \
"'site.pages' array" do
@page.content = "{{ site.title }}"
@page.data["permalink"] = "/virtual-about/"

View File

@@ -174,9 +174,7 @@ class TestRegenerator < JekyllUnitTest
metadata_file = source_dir(".jekyll-metadata")
@regenerator = Regenerator.new(@site)
File.open(metadata_file, "w") do |f|
f.write(@regenerator.metadata.to_yaml)
end
File.write(metadata_file, @regenerator.metadata.to_yaml)
@regenerator = Regenerator.new(@site)
assert_equal File.mtime(@path), @regenerator.metadata[@path]["mtime"]

View File

@@ -97,6 +97,12 @@ class TestSite < JekyllUnitTest
)
end
should "load config file from theme-gem as Jekyll::Configuration instance" do
site = fixture_site("theme" => "test-theme")
assert_instance_of Jekyll::Configuration, site.config
assert_equal "Hello World", site.config["title"]
end
context "with a custom cache_dir configuration" do
should "have the custom cache_dir hidden from Git" do
site = fixture_site("cache_dir" => "../../custom-cache-dir")
@@ -615,8 +621,8 @@ class TestSite < JekyllUnitTest
site = fixture_site("theme" => {})
assert_nil site.theme
end
expected_msg = "Theme: value of 'theme' in config should be String " \
"to use gem-based themes, but got Hash\n"
expected_msg = "Theme: value of 'theme' in config should be String to use " \
"gem-based themes, but got Hash\n"
assert_includes output, expected_msg
end
@@ -743,5 +749,14 @@ class TestSite < JekyllUnitTest
assert_includes site.static_files.map(&:relative_path), "_methods/extensionless_static_file"
end
should "not be revisited in `Site#each_site_file`" do
site = fixture_site("collections" => { "methods" => { "output" => true } })
site.read
visited_files = []
site.each_site_file { |file| visited_files << file }
assert_equal visited_files.count, visited_files.uniq.count
end
end
end

View File

@@ -42,8 +42,12 @@ class TestTags < JekyllUnitTest
end
def highlight_block_with_opts(options_string)
template = Liquid::Template.parse("{% highlight #{options_string} %}test{% endhighlight %}")
template.root.nodelist.first
Jekyll::Tags::HighlightBlock.parse(
"highlight",
options_string,
Liquid::Tokenizer.new("test{% endhighlight %}\n"),
Liquid::ParseContext.new
)
end
context "language name" do
@@ -446,10 +450,10 @@ class TestTags < JekyllUnitTest
end
should "throw a deprecation warning" do
deprecation_warning = " Deprecation: A call to "\
"'{% post_url 2008-11-21-nested %}' did not match a post using the new matching "\
"method of checking name (path-date-slug) equality. Please make sure that you "\
"change this tag to match the post's name exactly."
deprecation_warning = " Deprecation: A call to '{% post_url 2008-11-21-nested %}' " \
"did not match a post using the new matching method of checking " \
"name (path-date-slug) equality. Please make sure that you change " \
"this tag to match the post's name exactly."
assert_includes Jekyll.logger.messages, deprecation_warning
end
end
@@ -689,7 +693,7 @@ class TestTags < JekyllUnitTest
context "include tag with parameters" do
context "with symlink'd include" do
should "not allow symlink includes" do
File.open("tmp/pages-test", "w") { |file| file.write("SYMLINK TEST") }
File.write("tmp/pages-test", "SYMLINK TEST")
assert_raises IOError do
content = <<~CONTENT
---
@@ -1138,7 +1142,7 @@ class TestTags < JekyllUnitTest
context "with symlink'd include" do
should "not allow symlink includes" do
File.open("tmp/pages-test", "w") { |file| file.write("SYMLINK TEST") }
File.write("tmp/pages-test", "SYMLINK TEST")
assert_raises IOError do
content = <<~CONTENT
---
@@ -1177,7 +1181,7 @@ class TestTags < JekyllUnitTest
"safe" => true)
end
assert_match(
"Ensure it exists in one of those directories and is not a symlink "\
"Ensure it exists in one of those directories and is not a symlink " \
"as those are not allowed in safe mode.",
ex.message
)

View File

@@ -14,15 +14,14 @@ class TestThemeAssetsReader < JekyllUnitTest
def assert_file_with_relative_path(haystack, relative_path)
assert haystack.any? { |f|
f.relative_path == relative_path
}, "Site should read in the #{relative_path} file, " \
"but it was not found in #{haystack.inspect}"
}, "Site should read in the #{relative_path} file, but it was not found in #{haystack.inspect}"
end
def refute_file_with_relative_path(haystack, relative_path)
refute haystack.any? { |f|
f.relative_path == relative_path
}, "Site should not have read in the #{relative_path} file, " \
"but it was found in #{haystack.inspect}"
}, "Site should not have read in the #{relative_path} file, but it was found in " \
"#{haystack.inspect}"
end
context "with a valid theme" do
@@ -82,7 +81,7 @@ class TestThemeAssetsReader < JekyllUnitTest
begin
tmp_dir = Dir.mktmpdir("jekyll-theme-test")
File.open(File.join(tmp_dir, "test.txt"), "wb") { |f| f.write "content" }
File.binwrite(File.join(tmp_dir, "test.txt"), "content")
theme_dir = File.join(__dir__, "fixtures", "test-theme-symlink")
File.symlink(tmp_dir, File.join(theme_dir, "assets"))

34
test/test_theme_drop.rb Normal file
View File

@@ -0,0 +1,34 @@
# frozen_string_literal: true
require "helper"
class TestThemeDrop < JekyllUnitTest
should "be initialized only for gem-based themes" do
assert_nil fixture_site.to_liquid.theme
end
context "a theme drop" do
setup do
@drop = fixture_site("theme" => "test-theme").to_liquid.theme
end
should "respond to `key?`" do
assert_respond_to @drop, :key?
end
should "export relevant data to Liquid templates" do
expected = {
"authors" => "Jekyll",
"dependencies" => [],
"description" => "This is a theme used to test Jekyll",
"metadata" => {},
"root" => theme_dir,
"version" => "0.1.0",
}
expected.each_key do |key|
assert @drop.key?(key)
assert_equal expected[key], @drop[key]
end
end
end
end