jekyll_plugin_template 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.rubocop.yml +35 -0
- data/CHANGELOG.md +6 -0
- data/LICENSE.txt +121 -0
- data/PLUGIN_README.md +178 -0
- data/README.md +105 -0
- data/Rakefile +7 -0
- data/jekyll_plugin_template.gemspec +46 -0
- data/lib/category_combiner.rb +21 -0
- data/lib/category_index_generator.rb +39 -0
- data/lib/dumpers.rb +174 -0
- data/lib/jekyll_block_tag_plugin.rb +113 -0
- data/lib/jekyll_filter_template.rb +41 -0
- data/lib/jekyll_hook_examples.rb +72 -0
- data/lib/jekyll_hooks.rb +242 -0
- data/lib/jekyll_plugin_template/version.rb +5 -0
- data/lib/jekyll_plugin_template.rb +22 -0
- data/lib/jekyll_tag_plugin.rb +113 -0
- data/spec/jekyll_plugin_template_spec.rb +26 -0
- data/spec/nokogiri_test.rb +24 -0
- data/spec/run_this_first_data/lib/old_name/old_name.rb +5 -0
- data/spec/run_this_first_data/lib/old_name/version.rb +5 -0
- data/spec/run_this_first_data/lib/old_name.rb +5 -0
- data/spec/run_this_first_data/old_name.gemspec +9 -0
- data/spec/run_this_first_helper.rb +21 -0
- data/spec/run_this_first_spec.rb +40 -0
- data/spec/spec_helper.rb +19 -0
- data/spec/status_persistence.txt +5 -0
- metadata +203 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 589cb215e8458e084b40967bd4b4360c457bb65a3fd01c9830af52a17d5c3bab
|
4
|
+
data.tar.gz: 323ea35b37a006144ccb10227bff0f49a048a098670f79ee51dda4df4787fb4b
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 3d0850c46f853f9925e99e92f423e1918303f4ae253b5f45bad8711e614d3cfc76824b7f369d0d6b7a82282440647fd1a9c6d4d5ac66b3605f56ca2d4f62cf41
|
7
|
+
data.tar.gz: 59fdefd6d4baff1526db8065f2691b01c86a0d889d3aaed5f81ff75adb2ea83da5982b23198fa90a3e167815ff8285d8879841078ebac374ae673cc30f8fba37
|
data/.rubocop.yml
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
# require: rubocop-jekyll
|
2
|
+
# inherit_gem:
|
3
|
+
# rubocop-jekyll: .rubocop.yml
|
4
|
+
|
5
|
+
AllCops:
|
6
|
+
Exclude:
|
7
|
+
- vendor/**/*
|
8
|
+
- Gemfile*
|
9
|
+
- '*.gemspec' # This does nothing. Why?
|
10
|
+
NewCops: enable
|
11
|
+
TargetRubyVersion: 2.6
|
12
|
+
|
13
|
+
# Gemspec/RequireMFA:
|
14
|
+
# Enabled: false
|
15
|
+
|
16
|
+
# Jekyll/NoPutsAllowed:
|
17
|
+
# Enabled: false
|
18
|
+
|
19
|
+
Layout/HashAlignment:
|
20
|
+
EnforcedHashRocketStyle: table
|
21
|
+
|
22
|
+
Layout/LineLength:
|
23
|
+
Max: 150
|
24
|
+
|
25
|
+
Metrics/BlockLength:
|
26
|
+
Max: 50
|
27
|
+
|
28
|
+
Metrics/MethodLength:
|
29
|
+
Max: 40
|
30
|
+
|
31
|
+
Metrics/ModuleLength:
|
32
|
+
Enabled: false
|
33
|
+
|
34
|
+
Style/StringLiterals:
|
35
|
+
Enabled: false
|
data/CHANGELOG.md
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,121 @@
|
|
1
|
+
Creative Commons Legal Code
|
2
|
+
|
3
|
+
CC0 1.0 Universal
|
4
|
+
|
5
|
+
CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE
|
6
|
+
LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN
|
7
|
+
ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS
|
8
|
+
INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES
|
9
|
+
REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS
|
10
|
+
PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM
|
11
|
+
THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED
|
12
|
+
HEREUNDER.
|
13
|
+
|
14
|
+
Statement of Purpose
|
15
|
+
|
16
|
+
The laws of most jurisdictions throughout the world automatically confer
|
17
|
+
exclusive Copyright and Related Rights (defined below) upon the creator
|
18
|
+
and subsequent owner(s) (each and all, an "owner") of an original work of
|
19
|
+
authorship and/or a database (each, a "Work").
|
20
|
+
|
21
|
+
Certain owners wish to permanently relinquish those rights to a Work for
|
22
|
+
the purpose of contributing to a commons of creative, cultural and
|
23
|
+
scientific works ("Commons") that the public can reliably and without fear
|
24
|
+
of later claims of infringement build upon, modify, incorporate in other
|
25
|
+
works, reuse and redistribute as freely as possible in any form whatsoever
|
26
|
+
and for any purposes, including without limitation commercial purposes.
|
27
|
+
These owners may contribute to the Commons to promote the ideal of a free
|
28
|
+
culture and the further production of creative, cultural and scientific
|
29
|
+
works, or to gain reputation or greater distribution for their Work in
|
30
|
+
part through the use and efforts of others.
|
31
|
+
|
32
|
+
For these and/or other purposes and motivations, and without any
|
33
|
+
expectation of additional consideration or compensation, the person
|
34
|
+
associating CC0 with a Work (the "Affirmer"), to the extent that he or she
|
35
|
+
is an owner of Copyright and Related Rights in the Work, voluntarily
|
36
|
+
elects to apply CC0 to the Work and publicly distribute the Work under its
|
37
|
+
terms, with knowledge of his or her Copyright and Related Rights in the
|
38
|
+
Work and the meaning and intended legal effect of CC0 on those rights.
|
39
|
+
|
40
|
+
1. Copyright and Related Rights. A Work made available under CC0 may be
|
41
|
+
protected by copyright and related or neighboring rights ("Copyright and
|
42
|
+
Related Rights"). Copyright and Related Rights include, but are not
|
43
|
+
limited to, the following:
|
44
|
+
|
45
|
+
i. the right to reproduce, adapt, distribute, perform, display,
|
46
|
+
communicate, and translate a Work;
|
47
|
+
ii. moral rights retained by the original author(s) and/or performer(s);
|
48
|
+
iii. publicity and privacy rights pertaining to a person's image or
|
49
|
+
likeness depicted in a Work;
|
50
|
+
iv. rights protecting against unfair competition in regards to a Work,
|
51
|
+
subject to the limitations in paragraph 4(a), below;
|
52
|
+
v. rights protecting the extraction, dissemination, use and reuse of data
|
53
|
+
in a Work;
|
54
|
+
vi. database rights (such as those arising under Directive 96/9/EC of the
|
55
|
+
European Parliament and of the Council of 11 March 1996 on the legal
|
56
|
+
protection of databases, and under any national implementation
|
57
|
+
thereof, including any amended or successor version of such
|
58
|
+
directive); and
|
59
|
+
vii. other similar, equivalent or corresponding rights throughout the
|
60
|
+
world based on applicable law or treaty, and any national
|
61
|
+
implementations thereof.
|
62
|
+
|
63
|
+
2. Waiver. To the greatest extent permitted by, but not in contravention
|
64
|
+
of, applicable law, Affirmer hereby overtly, fully, permanently,
|
65
|
+
irrevocably and unconditionally waives, abandons, and surrenders all of
|
66
|
+
Affirmer's Copyright and Related Rights and associated claims and causes
|
67
|
+
of action, whether now known or unknown (including existing as well as
|
68
|
+
future claims and causes of action), in the Work (i) in all territories
|
69
|
+
worldwide, (ii) for the maximum duration provided by applicable law or
|
70
|
+
treaty (including future time extensions), (iii) in any current or future
|
71
|
+
medium and for any number of copies, and (iv) for any purpose whatsoever,
|
72
|
+
including without limitation commercial, advertising or promotional
|
73
|
+
purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each
|
74
|
+
member of the public at large and to the detriment of Affirmer's heirs and
|
75
|
+
successors, fully intending that such Waiver shall not be subject to
|
76
|
+
revocation, rescission, cancellation, termination, or any other legal or
|
77
|
+
equitable action to disrupt the quiet enjoyment of the Work by the public
|
78
|
+
as contemplated by Affirmer's express Statement of Purpose.
|
79
|
+
|
80
|
+
3. Public License Fallback. Should any part of the Waiver for any reason
|
81
|
+
be judged legally invalid or ineffective under applicable law, then the
|
82
|
+
Waiver shall be preserved to the maximum extent permitted taking into
|
83
|
+
account Affirmer's express Statement of Purpose. In addition, to the
|
84
|
+
extent the Waiver is so judged Affirmer hereby grants to each affected
|
85
|
+
person a royalty-free, non transferable, non sublicensable, non exclusive,
|
86
|
+
irrevocable and unconditional license to exercise Affirmer's Copyright and
|
87
|
+
Related Rights in the Work (i) in all territories worldwide, (ii) for the
|
88
|
+
maximum duration provided by applicable law or treaty (including future
|
89
|
+
time extensions), (iii) in any current or future medium and for any number
|
90
|
+
of copies, and (iv) for any purpose whatsoever, including without
|
91
|
+
limitation commercial, advertising or promotional purposes (the
|
92
|
+
"License"). The License shall be deemed effective as of the date CC0 was
|
93
|
+
applied by Affirmer to the Work. Should any part of the License for any
|
94
|
+
reason be judged legally invalid or ineffective under applicable law, such
|
95
|
+
partial invalidity or ineffectiveness shall not invalidate the remainder
|
96
|
+
of the License, and in such case Affirmer hereby affirms that he or she
|
97
|
+
will not (i) exercise any of his or her remaining Copyright and Related
|
98
|
+
Rights in the Work or (ii) assert any associated claims and causes of
|
99
|
+
action with respect to the Work, in either case contrary to Affirmer's
|
100
|
+
express Statement of Purpose.
|
101
|
+
|
102
|
+
4. Limitations and Disclaimers.
|
103
|
+
|
104
|
+
a. No trademark or patent rights held by Affirmer are waived, abandoned,
|
105
|
+
surrendered, licensed or otherwise affected by this document.
|
106
|
+
b. Affirmer offers the Work as-is and makes no representations or
|
107
|
+
warranties of any kind concerning the Work, express, implied,
|
108
|
+
statutory or otherwise, including without limitation warranties of
|
109
|
+
title, merchantability, fitness for a particular purpose, non
|
110
|
+
infringement, or the absence of latent or other defects, accuracy, or
|
111
|
+
the present or absence of errors, whether or not discoverable, all to
|
112
|
+
the greatest extent permissible under applicable law.
|
113
|
+
c. Affirmer disclaims responsibility for clearing rights of other persons
|
114
|
+
that may apply to the Work or any use thereof, including without
|
115
|
+
limitation any person's Copyright and Related Rights in the Work.
|
116
|
+
Further, Affirmer disclaims responsibility for obtaining any necessary
|
117
|
+
consents, permissions or other rights required for any use of the
|
118
|
+
Work.
|
119
|
+
d. Affirmer understands and acknowledges that Creative Commons is not a
|
120
|
+
party to this document and has no duty or obligation with respect to
|
121
|
+
this CC0 or use of the Work.
|
data/PLUGIN_README.md
ADDED
@@ -0,0 +1,178 @@
|
|
1
|
+
`jekyll_plugin_template`
|
2
|
+
[![Gem Version](https://badge.fury.io/rb/jekyll_plugin_template.svg)](https://badge.fury.io/rb/jekyll_plugin_template)
|
3
|
+
===========
|
4
|
+
|
5
|
+
`jekyll_plugin_template` is a Jekyll plugin that provides a new Liquid tag called `new_tag_name` and a new tag block called `new_tag_block_name`.
|
6
|
+
The plugin is packaged as a Ruby gem.
|
7
|
+
|
8
|
+
* A `new_tag_block_name` block tag that can do magic with its eyes closed.
|
9
|
+
```
|
10
|
+
{% new_tag_name [arguments] %}
|
11
|
+
Contents of new_tag_block_name
|
12
|
+
{% endnew_tag_name %}
|
13
|
+
```
|
14
|
+
* A `new_tag_name` tag that can turn on a dime and leave 15 cents change.
|
15
|
+
```
|
16
|
+
{% new_tag_name Contents of new_tag_name tag%}
|
17
|
+
```
|
18
|
+
|
19
|
+
|
20
|
+
## Demo
|
21
|
+
The `demo` directory contains a small Jekyll website pre-configured for instant gratification.
|
22
|
+
Run the demo by typing:
|
23
|
+
```shell
|
24
|
+
$ bin/attach demo
|
25
|
+
```
|
26
|
+
|
27
|
+
The `bin/attach` script builds the plugin locally and installs it locally,
|
28
|
+
then launches the demo Jekyll website under control of the Ruby Fast Debugger.
|
29
|
+
|
30
|
+
As described in [Debugging Jekyll Plugins with an IDE](https://www.mslinn.com/blog/2022/02/21/jekyll-debugging.html),
|
31
|
+
attach to the process using `ruby-debug-ide` by selecting the **Run / Debug** configuration called **Attach rdebug-ide**.
|
32
|
+
|
33
|
+
![Demo screen shot](demo.png)
|
34
|
+
|
35
|
+
### Control Log Verbosity
|
36
|
+
`demo/_config.yml` contains a block of YAML that looks something like:
|
37
|
+
```yaml
|
38
|
+
plugin_loggers:
|
39
|
+
PluginMetaLogger: info
|
40
|
+
CleanHook: info
|
41
|
+
DocumentHooks: info
|
42
|
+
MyBlock: info
|
43
|
+
PageHooks: info
|
44
|
+
PostHooks: info
|
45
|
+
SiteHooks: warn
|
46
|
+
```
|
47
|
+
The above sets the verbosity for each of the loggers.
|
48
|
+
Possible values are: `debug`, `info`, `warn` and `error`.
|
49
|
+
|
50
|
+
|
51
|
+
## Debugging
|
52
|
+
Run `bin/attach` and pass it the directory name of a Jekyll website that has a suitable script called `_bin/debug`.
|
53
|
+
The `demo` subdirectory fits this description.
|
54
|
+
```script
|
55
|
+
$ bin/attach demo
|
56
|
+
Successfully uninstalled jekyll_plugin_template-0.1.2
|
57
|
+
jekyll_plugin_template 0.1.2 built to pkg/jekyll_plugin_template-0.1.2.gem.
|
58
|
+
jekyll_plugin_template (0.1.2) installed.
|
59
|
+
Fast Debugger (ruby-debug-ide 0.7.3, debase 0.2.4.1, file filtering is supported) listens on 0.0.0.0:1234
|
60
|
+
```
|
61
|
+
Now attach to the debugger process.
|
62
|
+
This git repo includes a Visual Studio Code launcher for this purpose labeled `Attach rdebug-ide`.
|
63
|
+
|
64
|
+
|
65
|
+
## Additional Information
|
66
|
+
More information is available on Mike Slinn's web site about
|
67
|
+
[Jekyll plugins](https://www.mslinn.com/blog/index.html#Jekyll).
|
68
|
+
|
69
|
+
|
70
|
+
## Installation
|
71
|
+
This has already been done for the demo; these instructions are for incorporating the plugin(s) into other Jekyll websites.
|
72
|
+
Add this line to your application's Gemfile:
|
73
|
+
|
74
|
+
```ruby
|
75
|
+
group :jekyll_plugins do
|
76
|
+
gem 'jekyll_plugin_template'
|
77
|
+
end
|
78
|
+
```
|
79
|
+
|
80
|
+
And then execute:
|
81
|
+
|
82
|
+
$ bundle install
|
83
|
+
|
84
|
+
Or install it yourself as:
|
85
|
+
|
86
|
+
$ gem install jekyll_plugin_template
|
87
|
+
|
88
|
+
|
89
|
+
## Usage
|
90
|
+
|
91
|
+
Given this markup in an HTML file:
|
92
|
+
|
93
|
+
```
|
94
|
+
{% block_tag_template param1="Today is a wonderful day!" %}
|
95
|
+
Hello, world!
|
96
|
+
{% endblock_tag_template %}
|
97
|
+
The rendered HTML from the block tag looks like this:
|
98
|
+
```
|
99
|
+
|
100
|
+
<p style="color: green; background-color: yellow; padding: 1em; border: solid thin grey;">Hello, world! Today is a wonderful day!</p>
|
101
|
+
|
102
|
+
Console output looks like this, when the plugin's log level is set to `debug`:
|
103
|
+
```
|
104
|
+
DEBUG MyBlock: tag_name = 'block_tag_template'
|
105
|
+
argument_string = 'param1="Today is a wonderful day!" '
|
106
|
+
@param1 = 'Today is a wonderful day!'
|
107
|
+
@param_x = ''
|
108
|
+
params =
|
109
|
+
param1 = Today is a wonderful day!
|
110
|
+
param2 =
|
111
|
+
param3 =
|
112
|
+
|
113
|
+
DEBUG MyBlock: mode=""
|
114
|
+
page.path="_posts/2022-03-28-jekyll-plugin-template-collection.html"
|
115
|
+
page.url="/blog/2022/03/28/jekyll-plugin-template-collection.html"
|
116
|
+
```
|
117
|
+
|
118
|
+
|
119
|
+
## Development
|
120
|
+
|
121
|
+
After checking out the repo, run `bin/setup` to install dependencies.
|
122
|
+
|
123
|
+
You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
124
|
+
|
125
|
+
|
126
|
+
### Build and Install Locally
|
127
|
+
To build and install this gem onto your local machine, run:
|
128
|
+
```shell
|
129
|
+
$ rake install:local
|
130
|
+
```
|
131
|
+
|
132
|
+
The following also does the same thing:
|
133
|
+
```shell
|
134
|
+
$ bundle exec rake install
|
135
|
+
jekyll_plugin_template 0.1.0 built to pkg/jekyll_plugin_template-0.1.0.gem.
|
136
|
+
jekyll_plugin_template (0.1.0) installed.
|
137
|
+
```
|
138
|
+
|
139
|
+
Examine the newly built gem:
|
140
|
+
```shell
|
141
|
+
$ gem info jekyll_plugin_template
|
142
|
+
|
143
|
+
*** LOCAL GEMS ***
|
144
|
+
|
145
|
+
jekyll_plugin_template (0.1.0)
|
146
|
+
Author: Firstname Lastname
|
147
|
+
Homepage:
|
148
|
+
https://github.com/username/jekyll_plugin_template
|
149
|
+
License: MIT
|
150
|
+
Installed at: /home/mslinn/.gems
|
151
|
+
|
152
|
+
Write a short summary; RubyGems requires one.
|
153
|
+
```
|
154
|
+
|
155
|
+
|
156
|
+
### Build and Push to RubyGems
|
157
|
+
To release a new version,
|
158
|
+
1. Update the version number in `version.rb`.
|
159
|
+
2. Commit all changes to git; if you don't the next step might fail with an unexplainable error message.
|
160
|
+
3. Run the following:
|
161
|
+
```shell
|
162
|
+
$ bundle exec rake release
|
163
|
+
```
|
164
|
+
The above creates a git tag for the version, commits the created tag,
|
165
|
+
and pushes the new `.gem` file to [RubyGems.org](https://rubygems.org).
|
166
|
+
|
167
|
+
|
168
|
+
## Contributing
|
169
|
+
|
170
|
+
1. Fork the project
|
171
|
+
2. Create a descriptively named feature branch
|
172
|
+
3. Add your feature
|
173
|
+
4. Submit a pull request
|
174
|
+
|
175
|
+
|
176
|
+
## License
|
177
|
+
|
178
|
+
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|
data/README.md
ADDED
@@ -0,0 +1,105 @@
|
|
1
|
+
# Jekyll Plugin Gem Customization
|
2
|
+
|
3
|
+
The [`bin/run_this_first`](bin/run_this_first) script customizes your new Jekyll plugin gem.
|
4
|
+
It does the following:
|
5
|
+
1) Renames the Jekyll template, including directories, files and contents.
|
6
|
+
2) Deletes itself, its tests and its test data.
|
7
|
+
3) Does not delete tests for the Jekyll plugin.
|
8
|
+
4) Deletes this README.md and renames [`PLUGIN_README.md`](PLUGIN_README.md) to `README.md`.
|
9
|
+
5) Initializes a new local git repository and optionally creates a public or private project on GitHub.
|
10
|
+
6) Provides scripts for building and testing your new Jekyll plugin gem locally.
|
11
|
+
7) Provides settings for Visual Studio Code, Rake, Rubocop and RSpec.
|
12
|
+
|
13
|
+
The customized gem is ready to be pushed to `RubyGems.org`, or any other Ruby gem repository, whenever your feel ready.
|
14
|
+
|
15
|
+
|
16
|
+
## About Developing Jekyll Plugins and Ruby Gems
|
17
|
+
* [Setting Up a Ruby Development Environment](https://www.mslinn.com/blog/2022/02/12/ruby-setup.html)
|
18
|
+
* [Working with Jekyll Plugins as Ruby Gems](https://www.mslinn.com/blog/2022/02/13/jekyll-gem.html)
|
19
|
+
* [Making a Jekyll Plugin as a Ruby Gem](https://www.mslinn.com/blog/2022/02/13/jekyll-gem2.html)
|
20
|
+
* [Debugging Jekyll Plugins with an IDE](https://www.mslinn.com/blog/2022/02/21/jekyll-debugging.html)
|
21
|
+
* [Installing Rubocop As a Development Dependency](https://www.mslinn.com/blog/2022/03/06/rubocop-install.html)
|
22
|
+
* [Jekyll Plugin Template Collection](https://www.mslinn.com/blog/2022/03/28/jekyll-plugin-template-collection.html)
|
23
|
+
|
24
|
+
|
25
|
+
## Usage
|
26
|
+
1) Clone this repo into a directory called `my_plugin`, or whatever you want to call your plugin.
|
27
|
+
```shell
|
28
|
+
$ git clone https://github.com/mslinn/jekyll_plugin_template.git my_plugin
|
29
|
+
```
|
30
|
+
Or, if you have forked the project, replace `mslinn` below with your GitHub user id:
|
31
|
+
```shell
|
32
|
+
$ git clone git@github.com:mslinn/jekyll_plugin_template.git my_plugin
|
33
|
+
```
|
34
|
+
2) Change directory to the new plugin project:
|
35
|
+
```shell
|
36
|
+
$ cd my_plugin
|
37
|
+
```
|
38
|
+
3) Run the customization script and answer the prompts.
|
39
|
+
```shell
|
40
|
+
$ bin/run_this_first
|
41
|
+
```
|
42
|
+
4) Open the project in Visual Studio Code and explore the project:
|
43
|
+
```shell
|
44
|
+
$ code .
|
45
|
+
```
|
46
|
+
5) Build the plugins provided with this template.
|
47
|
+
```shell
|
48
|
+
$ rake install:local
|
49
|
+
```
|
50
|
+
6) You can now use your new Jekyll plugins in a Jekyll website.
|
51
|
+
|
52
|
+
a) Add the following to your Jekyll website's `Gemfile`.
|
53
|
+
The installation script had you rename the plugin template from `jekyll_plugin_template` to a name of your choosing.
|
54
|
+
Use that name instead below:
|
55
|
+
```ruby
|
56
|
+
group :jekyll_plugins do
|
57
|
+
gem 'jekyll_plugin_template'
|
58
|
+
end
|
59
|
+
```
|
60
|
+
b) Add the following you your Jekyll website's `_config.yml` to set log levels for each type of plugin from the template.
|
61
|
+
Customize the log levels as desired:
|
62
|
+
```yaml
|
63
|
+
plugin_loggers:
|
64
|
+
CleanHook: info
|
65
|
+
DocumentHooks: warn
|
66
|
+
MyBlock: info
|
67
|
+
PageHooks: warn
|
68
|
+
PostHooks: warn
|
69
|
+
PluginMetaLogger: info
|
70
|
+
SiteHooks: info
|
71
|
+
```
|
72
|
+
7) Delete the portions of the template that you do not need.
|
73
|
+
8) [Debug the Jekyll plugin](https://www.mslinn.com/blog/2022/02/21/jekyll-debugging.html) if required.
|
74
|
+
8) [Publish the gem](https://www.mslinn.com/blog/2022/02/13/jekyll-gem2.html#publish) when ready:
|
75
|
+
```shell
|
76
|
+
$ bundle exec rake release
|
77
|
+
```
|
78
|
+
|
79
|
+
|
80
|
+
## For More Information
|
81
|
+
Please see the blog post about this {% href https://mslinn.com/blog/2022/03/28/jekyll-plugin-template-collection.html Jekyll plugin gem template %}.
|
82
|
+
|
83
|
+
|
84
|
+
## Hook Call Order
|
85
|
+
The Jekyll documentation does not indicate the exact order that each of the 45 hooks gets called.
|
86
|
+
However, the log output from this template makes that clear.
|
87
|
+
Following is elided output; I removed duplicate log entries.
|
88
|
+
All loggers were set to level `info`.
|
89
|
+
Output will vary, depending on the Jekyll site that is processed and the log levels you set.
|
90
|
+
`:post_init`, in particular, gets called many times.
|
91
|
+
```
|
92
|
+
INFO Module: Jekyll::Hooks.register(:site, :after_reset) invoked.
|
93
|
+
INFO Module: Jekyll::Hooks.register(:pages, :post_init) invoked.
|
94
|
+
INFO Module: Jekyll::Hooks.register(:documents, :post_init) invoked.
|
95
|
+
INFO Module: Jekyll::Hooks.register(:posts, :post_init) invoked.
|
96
|
+
INFO Module: Jekyll::Hooks.register(:site, :post_read) invoked.
|
97
|
+
INFO Module: Jekyll::Hooks.register(:pages, :post_init) invoked.
|
98
|
+
INFO Module: Jekyll::Hooks.register(:site, :pre_render) invoked.
|
99
|
+
INFO Module: Jekyll::Hooks.register(:pages, :pre_render) invoked.
|
100
|
+
INFO Module: Jekyll::Hooks.register(:pages, :post_convert) invoked.
|
101
|
+
INFO Module: Jekyll::Hooks.register(:pages, :post_render) invoked.
|
102
|
+
INFO Module: Jekyll::Hooks.register(:site, :post_render) invoked.
|
103
|
+
INFO Module: Jekyll::Hooks.register(:clean, :on_obsolete) invoked for [].
|
104
|
+
INFO Module: Jekyll::Hooks.register(:pages, :post_write) invoked.
|
105
|
+
```
|
data/Rakefile
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "lib/jekyll_plugin_template/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |spec|
|
6
|
+
github = "https://github.com/mslinn/jekyll_plugin_template"
|
7
|
+
|
8
|
+
spec.authors = ["Firstname Lastname"]
|
9
|
+
spec.bindir = "bin"
|
10
|
+
spec.description = <<~END_OF_DESC
|
11
|
+
Expand on what spec.summary says.
|
12
|
+
END_OF_DESC
|
13
|
+
spec.email = ["email@email.com"]
|
14
|
+
spec.executables = []
|
15
|
+
|
16
|
+
# Specify which files should be added to the gem when it is released.
|
17
|
+
spec.files = Dir[".rubocop.yml", "LICENSE.*", "Rakefile", "{lib,spec}/**/*", "*.gemspec", "*.md"]
|
18
|
+
|
19
|
+
spec.homepage = "https://www.mslinn.com/blog/2020/12/30/jekyll-plugin-template-collection.html"
|
20
|
+
spec.license = "CC0-1.0"
|
21
|
+
spec.metadata = {
|
22
|
+
"allowed_push_host" => "https://rubygems.org",
|
23
|
+
"bug_tracker_uri" => "#{github}/issues",
|
24
|
+
"changelog_uri" => "#{github}/CHANGELOG.md",
|
25
|
+
"homepage_uri" => spec.homepage,
|
26
|
+
"source_code_uri" => github,
|
27
|
+
}
|
28
|
+
spec.name = "jekyll_plugin_template"
|
29
|
+
spec.require_paths = ["lib"]
|
30
|
+
spec.required_ruby_version = ">= 2.6.0"
|
31
|
+
spec.summary = "Write a short summary; RubyGems requires one."
|
32
|
+
spec.version = JekyllPluginTemplateVersion::VERSION
|
33
|
+
|
34
|
+
spec.add_dependency "jekyll", ">= 3.5.0"
|
35
|
+
spec.add_dependency "jekyll_plugin_logger"
|
36
|
+
spec.add_dependency "key-value-parser"
|
37
|
+
spec.add_dependency "git"
|
38
|
+
spec.add_dependency "nokogiri"
|
39
|
+
spec.add_dependency "os"
|
40
|
+
spec.add_dependency "shellwords"
|
41
|
+
spec.add_dependency "talk_like_a_pirate", ">= 0.2.2"
|
42
|
+
spec.add_dependency "tty-prompt"
|
43
|
+
|
44
|
+
# spec.add_development_dependency "debase"
|
45
|
+
# spec.add_development_dependency "ruby-debug-ide"
|
46
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Testing...
|
4
|
+
module CategoryCombiner
|
5
|
+
# For each catagory, makes a combined page from the collection pages, saves into _site/combined/#{collection.label}.html.
|
6
|
+
def combine
|
7
|
+
proc do |site, _payload|
|
8
|
+
site.collections.each do |_name, collection|
|
9
|
+
collection_page = Jekyll::PageWithoutAFile.new(site, site.source, "combined", "#{collection.label}.html")
|
10
|
+
collection_page.output = collection.docs.map(&:content).join("\f")
|
11
|
+
site.pages << collection_page
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
module_function :combine
|
17
|
+
|
18
|
+
Jekyll::Hooks.register(:site, :post_render, &combine)
|
19
|
+
|
20
|
+
PluginMetaLogger.instance.logger.info { "Loaded CategoryCombiner v#{JekyllPluginTemplateVersion::VERSION} plugin." }
|
21
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Inspired by the badly broken example on https://jekyllrb.com/docs/plugins/generators/, and completely redone so it works.
|
4
|
+
module CategoryIndexGenerator
|
5
|
+
# Creates an index page for each catagory, plus a main index, all within a directory called _site/categories.
|
6
|
+
class CategoryGenerator < Jekyll::Generator
|
7
|
+
safe true
|
8
|
+
|
9
|
+
# Only generates content in development mode
|
10
|
+
# rubocop:disable Style/StringConcatenation, Metrics/AbcSize
|
11
|
+
def generate(site)
|
12
|
+
# This plugin is disabled unless _config.yml contains an entry for category_generator_enable and the value is not false
|
13
|
+
return if site.config['category_generator_enable']
|
14
|
+
|
15
|
+
return if site.config['env']['JEKYLL_ENV'] == "production"
|
16
|
+
|
17
|
+
index = Jekyll::PageWithoutAFile.new(site, site.source, 'categories', "index.html")
|
18
|
+
index.data['layout'] = "default"
|
19
|
+
index.data['title'] = "Post Categories"
|
20
|
+
index.content = "<p>"
|
21
|
+
|
22
|
+
site.categories.each do |category, posts|
|
23
|
+
new_page = Jekyll::PageWithoutAFile.new(site, site.source, 'categories', "#{category}.html")
|
24
|
+
new_page.data['layout'] = "default"
|
25
|
+
new_page.data['title'] = "Category #{category} Posts"
|
26
|
+
new_page.content = "<p>" + posts.map do |post|
|
27
|
+
"<a href='#{post.url}'>#{post.data['title']}</a><br>"
|
28
|
+
end.join("\n") + "</p>\n"
|
29
|
+
site.pages << new_page
|
30
|
+
index.content += "<a href='#{category}.html'>#{category}</a><br>\n"
|
31
|
+
end
|
32
|
+
index.content += "</p>"
|
33
|
+
site.pages << index
|
34
|
+
end
|
35
|
+
# rubocop:enable Style/StringConcatenation, Metrics/AbcSize
|
36
|
+
end
|
37
|
+
|
38
|
+
PluginMetaLogger.instance.logger.info { "Loaded CategoryGenerator v#{JekyllPluginTemplateVersion::VERSION} plugin." }
|
39
|
+
end
|