jekyll_draft 1.0.0 → 1.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +6 -4
- data/CHANGELOG.md +10 -0
- data/README.md +54 -9
- data/jekyll_draft.gemspec +21 -31
- data/lib/jekyll_draft/version.rb +1 -3
- data/lib/jekyll_draft.rb +50 -27
- data/spec/jekyll_draft_spec.rb +30 -7
- data/spec/spec_helper.rb +4 -7
- data/spec/status_persistence.txt +3 -4
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2024b9ea176d56e527de8b6adfcb10c5072f6ea93d3c9d661cf64859e6c69dbc
|
4
|
+
data.tar.gz: d4518a8a07e342bd9586628c4d66a796ae284d89bd4808f805f0f77614b53ea5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a5c3c44b58c2983dc6399822b0b223a387d06c3f624d0891748539569cf5abe72ab7ae1e109101c9fbeaae99002a3d8e02984e75af086940c866b2377997b282
|
7
|
+
data.tar.gz: bdef2fa61858f15620e7e54a43199ec434115a91147db7fe485b052f45c3a7cb0be1227e682da7bc6a8b1bdaef2f8d664f14b4f60dd73aaa9ec08ded17f918d0
|
data/.rubocop.yml
CHANGED
@@ -1,7 +1,3 @@
|
|
1
|
-
require: rubocop-jekyll
|
2
|
-
inherit_gem:
|
3
|
-
rubocop-jekyll: .rubocop.yml
|
4
|
-
|
5
1
|
AllCops:
|
6
2
|
Exclude:
|
7
3
|
- vendor/**/*
|
@@ -9,5 +5,11 @@ AllCops:
|
|
9
5
|
NewCops: enable
|
10
6
|
TargetRubyVersion: 2.6
|
11
7
|
|
8
|
+
Layout/HashAlignment:
|
9
|
+
Enabled: false
|
10
|
+
|
12
11
|
Layout/LineLength:
|
13
12
|
Max: 150
|
13
|
+
|
14
|
+
Style/FrozenStringLiteralComment:
|
15
|
+
Enabled: false
|
data/CHANGELOG.md
CHANGED
@@ -1,2 +1,12 @@
|
|
1
|
+
## 1.1.1 / 2023-02-16
|
2
|
+
* Avoids Jekyll generating the message `Deprecation: Document#draft is now a key in the #data hash.`
|
3
|
+
|
4
|
+
## 1.1.0 / 2023-02-05
|
5
|
+
* Works with CSS classes instead of generating CSS styling
|
6
|
+
* Improved how unpublished documents are recognized
|
7
|
+
|
8
|
+
## 1.0.1 / 2022-08-05
|
9
|
+
* Improved how drafts are recognized
|
10
|
+
|
1
11
|
## 1.0.0 / 2022-04-02
|
2
12
|
* Initial version
|
data/README.md
CHANGED
@@ -2,13 +2,24 @@ jekyll_draft
|
|
2
2
|
[![Gem Version](https://badge.fury.io/rb/jekyll_draft.svg)](https://badge.fury.io/rb/jekyll_draft)
|
3
3
|
===========
|
4
4
|
|
5
|
-
This is a Jekyll plugin that provides two Liquid filters
|
5
|
+
This is a Jekyll plugin that provides two Liquid filters: `is_draft` and `draft_html`.
|
6
6
|
|
7
|
-
More information is available on my
|
7
|
+
More information is available on my website about [my Jekyll plugins](https://www.mslinn.com/blog/2020/10/03/jekyll-plugins.html).
|
8
8
|
|
9
9
|
|
10
10
|
## Installation
|
11
11
|
|
12
|
+
Add the following to your CSS:
|
13
|
+
```css
|
14
|
+
.jekyll_draft {
|
15
|
+
background-color: #fefeab;
|
16
|
+
padding-bottom: 2px;
|
17
|
+
padding-left: 0.5em;
|
18
|
+
padding-right: 0.5em;
|
19
|
+
padding-top: 2px;
|
20
|
+
}
|
21
|
+
```
|
22
|
+
|
12
23
|
Add this line to your Jekyll website's `Gemfile`, within the `jekyll_plugins` group:
|
13
24
|
|
14
25
|
```ruby
|
@@ -21,21 +32,40 @@ And then execute:
|
|
21
32
|
|
22
33
|
$ bundle install
|
23
34
|
|
24
|
-
Or install it yourself as:
|
25
|
-
|
26
|
-
$ gem install jekyll_draft
|
27
|
-
|
28
35
|
|
29
36
|
## Usage
|
30
37
|
|
31
|
-
### is_draft
|
38
|
+
### `is_draft`
|
32
39
|
|
33
|
-
Filters a
|
34
|
-
Example: Extracts "blah/blah" from the path.
|
40
|
+
Filters a page according to the directory it resides in, and its front matter.
|
35
41
|
```
|
36
42
|
{{ page | is_draft }} => true
|
37
43
|
```
|
38
44
|
|
45
|
+
### `draft_html`
|
46
|
+
Filters a page according to the directory it resides in, and its front matter.
|
47
|
+
If the page is not a draft then the empty string is returned.
|
48
|
+
```
|
49
|
+
{{ page | draft_html }} => " <i class='bg_light_yellow' style='padding-left: 0.5em; padding-right: 0.5em;'>Draft</i>"
|
50
|
+
```
|
51
|
+
|
52
|
+
### Invoking From Another Jekyll Plugin
|
53
|
+
```ruby
|
54
|
+
require 'jekyll_draft'
|
55
|
+
|
56
|
+
p 'Found a draft' if Jekyll::Draft.is_draft post
|
57
|
+
|
58
|
+
draft = Jekyll::Draft.draft_html post
|
59
|
+
```
|
60
|
+
|
61
|
+
## Demo
|
62
|
+
The [`demo`](./demo) directory contains a demonstration website, which uses the plugin.
|
63
|
+
To run, type:
|
64
|
+
```console
|
65
|
+
$ demo/_bin/debug -r
|
66
|
+
```
|
67
|
+
Now point your web browser to http://localhost:4444
|
68
|
+
|
39
69
|
|
40
70
|
## Development
|
41
71
|
|
@@ -61,6 +91,21 @@ To release a new version,
|
|
61
91
|
The above creates a git tag for the version, commits the created tag,
|
62
92
|
and pushes the new `.gem` file to [RubyGems.org](https://rubygems.org).
|
63
93
|
|
94
|
+
### Debugging
|
95
|
+
Run `bin/attach` and pass the directory name of a Jekyll website that has a suitable script called `_bin/debug`.
|
96
|
+
The `demo` subdirectory fits this description.
|
97
|
+
```console
|
98
|
+
$ bin/attach demo
|
99
|
+
Successfully uninstalled jekyll_draft-0.1.0
|
100
|
+
jekyll_draft 0.1.0 built to pkg/jekyll_draft-0.1.0.gem.
|
101
|
+
jekyll_draft (0.1.0) installed.
|
102
|
+
Fast Debugger (ruby-debug-ide 0.7.3, debase 0.2.4.1, file filtering is supported) listens on 0.0.0.0:1234
|
103
|
+
```
|
104
|
+
Now attach to the debugger process.
|
105
|
+
This git repo includes a [Visual Studio Code launcher](./.vscode/launch.json) for this purpose labeled `Listen for rdebug-ide`.
|
106
|
+
|
107
|
+
Now point your web browser to http://localhost:4444
|
108
|
+
|
64
109
|
|
65
110
|
## Contributing
|
66
111
|
|
data/jekyll_draft.gemspec
CHANGED
@@ -1,46 +1,36 @@
|
|
1
|
-
|
1
|
+
require_relative 'lib/jekyll_draft/version'
|
2
2
|
|
3
|
-
|
3
|
+
Gem::Specification.new do |spec| # rubocop:disable Metrics/BlockLength
|
4
|
+
github = 'https://github.com/mslinn/jekyll_draft'
|
4
5
|
|
5
|
-
|
6
|
-
|
7
|
-
github = "https://github.com/mslinn/jekyll_draft"
|
8
|
-
|
9
|
-
spec.authors = ["Mike Slinn"]
|
10
|
-
spec.bindir = "exe"
|
6
|
+
spec.authors = ['Mike Slinn']
|
7
|
+
spec.bindir = 'exe'
|
11
8
|
spec.description = <<~END_OF_DESC
|
12
9
|
This Jekyll filter detects draft documents.
|
13
10
|
END_OF_DESC
|
14
|
-
spec.email = [
|
15
|
-
spec.files = Dir[
|
16
|
-
spec.homepage =
|
17
|
-
spec.license =
|
11
|
+
spec.email = ['mslinn@mslinn.com']
|
12
|
+
spec.files = Dir['.rubocop.yml', 'LICENSE.*', 'Rakefile', '{lib,spec}/**/*', '*.gemspec', '*.md']
|
13
|
+
spec.homepage = 'https://www.mslinn.com/blog/2020/10/03/jekyll-plugins.html#basename'
|
14
|
+
spec.license = 'MIT'
|
18
15
|
spec.metadata = {
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
16
|
+
'allowed_push_host' => 'https://rubygems.org',
|
17
|
+
'bug_tracker_uri' => "#{github}/issues",
|
18
|
+
'changelog_uri' => "#{github}/CHANGELOG.md",
|
19
|
+
'homepage_uri' => spec.homepage,
|
20
|
+
'source_code_uri' => github,
|
24
21
|
}
|
25
|
-
spec.name =
|
22
|
+
spec.name = 'jekyll_draft'
|
26
23
|
spec.post_install_message = <<~END_MESSAGE
|
27
24
|
|
28
25
|
Thanks for installing #{spec.name}!
|
29
26
|
|
30
27
|
END_MESSAGE
|
31
|
-
spec.require_paths = [
|
32
|
-
spec.required_ruby_version =
|
33
|
-
spec.summary =
|
34
|
-
spec.test_files = spec.files.grep(%r
|
28
|
+
spec.require_paths = ['lib']
|
29
|
+
spec.required_ruby_version = '>= 2.6.0'
|
30
|
+
spec.summary = 'This Jekyll filter detects draft documents.'
|
31
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
35
32
|
spec.version = JekyllDraftVersion::VERSION
|
36
33
|
|
37
|
-
spec.add_dependency
|
38
|
-
spec.add_dependency
|
39
|
-
|
40
|
-
# spec.add_development_dependency "debase"
|
41
|
-
# spec.add_development_dependency "rubocop-jekyll"
|
42
|
-
# spec.add_development_dependency "rubocop-rake"
|
43
|
-
# spec.add_development_dependency "rubocop-rspec"
|
44
|
-
# spec.add_development_dependency "ruby-debug-ide"
|
34
|
+
spec.add_dependency 'jekyll', '>= 3.5.0'
|
35
|
+
spec.add_dependency 'jekyll_plugin_logger'
|
45
36
|
end
|
46
|
-
# rubocop:enable Metrics/BlockLength
|
data/lib/jekyll_draft/version.rb
CHANGED
data/lib/jekyll_draft.rb
CHANGED
@@ -1,69 +1,92 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
1
|
# @author Copyright 2022 {https://www.mslinn.com Michael Slinn}
|
4
2
|
|
5
|
-
require
|
3
|
+
require 'jekyll_plugin_logger'
|
6
4
|
require 'yaml'
|
7
5
|
|
8
|
-
#
|
6
|
+
# Jekyll filter that detects draft documents
|
9
7
|
module Jekyll
|
10
|
-
# Define these methods outside of
|
8
|
+
# Define these methods outside of module DraftFilter so they can be invoked externally and tested easily
|
11
9
|
module Draft
|
10
|
+
# @return true if document front matter contains published that is not true,
|
11
|
+
# or document is in _drafts.
|
12
|
+
# If draft and published are both specified in front matter then published has priority.
|
12
13
|
def draft?(doc)
|
13
|
-
abort
|
14
|
-
|
15
|
-
# puts "draft? invoked from #{doc.path}"
|
16
|
-
return !doc.data['published'] if doc.respond_to?(:data) && doc.data.key?('published')
|
17
|
-
|
18
|
-
return doc.published==false if doc.respond_to?(:published)
|
14
|
+
abort 'Jekyll::Draft.draft? doc is nil!'.red if doc.nil?
|
19
15
|
|
20
|
-
return doc
|
16
|
+
return is_unpublished(doc) if published_was_specified(doc)
|
21
17
|
|
18
|
+
# Try Jekyll's naming convention to determine draft status
|
19
|
+
return doc.data['draft'] if doc.respond_to?('data') && doc.data.key?('draft')
|
22
20
|
return doc.draft if doc.respond_to?(:draft)
|
23
21
|
|
24
|
-
return doc['draft'] if doc.respond_to?(:[]) || (doc.respond_to?(:key) && doc.key?('draft'))
|
25
|
-
|
26
22
|
false
|
27
23
|
end
|
28
24
|
|
25
|
+
# @return HTML that indicates if a doc is a draft or not
|
29
26
|
def draft_html(doc)
|
30
|
-
# puts "draft_html invoked from #{doc.path}"
|
31
27
|
return '' unless draft?(doc)
|
32
28
|
|
33
|
-
" <i class='
|
29
|
+
" <i class='jekyll_draft'>Draft</i>"
|
34
30
|
end
|
35
31
|
|
32
|
+
# @return path to root of the collection that doc is a member of
|
36
33
|
def root(doc, site)
|
37
|
-
|
38
|
-
return "/index.html" unless doc.respond_to?(:collection)
|
34
|
+
return '/index.html' unless doc.respond_to?(:collection)
|
39
35
|
|
40
36
|
collection_name = doc.collection
|
41
37
|
docs = site.key?(collection_name) ? site[collection_name] : site.collections[collection_name].docs
|
42
|
-
index = docs.find { |d| d.url.end_with?
|
38
|
+
index = docs.find { |d| d.url.end_with? 'index.html' }
|
43
39
|
return index.url if index
|
44
40
|
|
45
41
|
docs.min.url
|
46
42
|
end
|
47
43
|
|
48
|
-
|
44
|
+
# Non-standard name used so this method could be invoked from Liquid
|
45
|
+
# @return true if published was specified in a document's front matter, and the value is false
|
46
|
+
def published_was_specified(doc)
|
47
|
+
return true if doc.respond_to?('published')
|
48
|
+
|
49
|
+
return false unless doc.respond_to?('data')
|
50
|
+
|
51
|
+
return true if doc.data.key?('published')
|
52
|
+
|
53
|
+
false
|
54
|
+
end
|
55
|
+
|
56
|
+
# Non-standard name used so this method could be invoked from Liquid
|
57
|
+
# @return true if published was specified in a document's front matter, and the value is false
|
58
|
+
def is_unpublished(doc) # rubocop:disable Naming/PredicateName
|
59
|
+
return !doc.published if doc.respond_to?('published')
|
60
|
+
|
61
|
+
return !doc['published'] if doc.key?('published')
|
62
|
+
|
63
|
+
return !doc.data['published'] if doc.respond_to?('data') && doc.data.key?('published')
|
64
|
+
|
65
|
+
false
|
66
|
+
end
|
67
|
+
|
68
|
+
module_function :draft?, :draft_html, :is_unpublished, :published_was_specified, :root
|
49
69
|
end
|
50
70
|
|
71
|
+
# Jekyll filters interface
|
51
72
|
module DraftFilter
|
52
|
-
def is_draft(doc)
|
53
|
-
Draft
|
73
|
+
def is_draft(doc) # rubocop:disable Naming/PredicateName
|
74
|
+
Draft.draft?(doc)
|
54
75
|
end
|
55
76
|
|
56
77
|
def draft_html(doc)
|
57
|
-
Draft
|
78
|
+
Draft.draft_html(doc)
|
79
|
+
end
|
80
|
+
|
81
|
+
def is_unpublished(doc) # rubocop:disable Naming/PredicateName
|
82
|
+
Draft.is_unpublished(doc)
|
58
83
|
end
|
59
84
|
|
60
|
-
# DraftFilter.singleton_class.included_modules
|
61
|
-
# [JSON::Ext::Generator::GeneratorMethods::Object, PP::ObjectMixin, Kernel]
|
62
85
|
def root(doc, site)
|
63
|
-
Draft
|
86
|
+
Draft.root(doc, site)
|
64
87
|
end
|
65
88
|
end
|
66
89
|
|
67
90
|
Liquid::Template.register_filter(DraftFilter)
|
68
|
-
PluginMetaLogger.instance.info {
|
91
|
+
PluginMetaLogger.instance.info { 'Loaded DraftFilter plugin.' }
|
69
92
|
end
|
data/spec/jekyll_draft_spec.rb
CHANGED
@@ -1,12 +1,35 @@
|
|
1
|
-
|
1
|
+
require 'jekyll'
|
2
|
+
require 'jekyll_plugin_logger'
|
3
|
+
require_relative '../lib/jekyll_draft'
|
2
4
|
|
3
|
-
|
4
|
-
|
5
|
+
RSpec.describe(Jekyll::Draft) do # rubocop:disable Metrics/BlockLength
|
6
|
+
include Jekyll::Draft
|
5
7
|
|
6
|
-
|
7
|
-
|
8
|
+
let(:page_draft) do
|
9
|
+
page_ = double('Jekyll::Page')
|
10
|
+
allow(page_).to receive(:draft) { true }
|
11
|
+
page_
|
12
|
+
end
|
13
|
+
let(:page_not_draft) do
|
14
|
+
page_ = double('Jekyll::Page')
|
15
|
+
allow(page_).to receive(:draft) { false }
|
16
|
+
page_
|
17
|
+
end
|
18
|
+
let(:page_published) do
|
19
|
+
page_ = double('Jekyll::Page')
|
20
|
+
allow(page_).to receive(:published) { true }
|
21
|
+
page_
|
22
|
+
end
|
23
|
+
let(:page_not_published) do
|
24
|
+
page_ = double('Jekyll::Page')
|
25
|
+
allow(page_).to receive(:published) { false }
|
26
|
+
page_
|
27
|
+
end
|
8
28
|
|
9
|
-
it
|
10
|
-
expect(
|
29
|
+
it 'detects drafts' do
|
30
|
+
expect(draft?(page_draft)).to be_truthy
|
31
|
+
expect(draft?(page_not_draft)).to be_falsey
|
32
|
+
expect(draft?(page_published)).to be_falsey
|
33
|
+
expect(draft?(page_not_published)).to be_truthy
|
11
34
|
end
|
12
35
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,14 +1,11 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
require "liquid"
|
4
|
-
require "fileutils"
|
5
|
-
require_relative "../lib/jekyll_draft"
|
1
|
+
require 'jekyll'
|
2
|
+
require_relative '../lib/jekyll_draft'
|
6
3
|
|
7
4
|
RSpec.configure do |config|
|
8
5
|
config.filter_run :focus
|
9
|
-
config.order =
|
6
|
+
config.order = 'random'
|
10
7
|
config.run_all_when_everything_filtered = true
|
11
8
|
|
12
9
|
# See https://relishapp.com/rspec/rspec-core/docs/command-line/only-failures
|
13
|
-
config.example_status_persistence_file_path =
|
10
|
+
config.example_status_persistence_file_path = 'spec/status_persistence.txt'
|
14
11
|
end
|
data/spec/status_persistence.txt
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
example_id
|
2
|
-
|
3
|
-
./spec/
|
4
|
-
./spec/basename_dirname_spec.rb[1:2] | passed | 0.0002 seconds |
|
1
|
+
example_id | status | run_time |
|
2
|
+
-------------------------------- | ------ | --------------- |
|
3
|
+
./spec/jekyll_draft_spec.rb[1:1] | passed | 0.00903 seconds |
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jekyll_draft
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mike Slinn
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-02-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: jekyll
|