jekyll-id 0.0.1 → 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/jekyll-id/patch/url_drop.rb +18 -0
- data/lib/jekyll-id/version.rb +3 -1
- data/lib/jekyll-id.rb +163 -2
- metadata +20 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a752baec6b8cd1ed0166b772d833d8c0193705a991a22a1b1396aa350b9bc11c
|
4
|
+
data.tar.gz: 348a752ef9abb6ff465239f76b1b9111f540a511b4d851383e574dcd4067290a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9fd79dfbb882d4f5ae8841d0f835a591a92999e89198feed4491faec884863122100a29288bedfd283fb4c2b7d38a5788130b5abb06f9f85c30022750e4cdbcb
|
7
|
+
data.tar.gz: 5a606567d7217078b25eed300d2436b84dfd9f3590a6fc73cc8c680b3f7981599203b5aa180b164760a412602639fcf483f55814e923e8afe027ea992ab6a4f7
|
data/lib/jekyll-id/version.rb
CHANGED
data/lib/jekyll-id.rb
CHANGED
@@ -1,10 +1,171 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
require 'jekyll'
|
3
|
+
require 'nanoid'
|
2
4
|
|
5
|
+
require_relative "jekyll-id/patch/url_drop"
|
3
6
|
require_relative "jekyll-id/version"
|
4
7
|
|
5
8
|
module Jekyll
|
6
9
|
module ID
|
7
|
-
|
8
|
-
|
10
|
+
|
11
|
+
class Generator < Jekyll::Generator
|
12
|
+
priority :highest
|
13
|
+
|
14
|
+
# for testing
|
15
|
+
attr_reader :config
|
16
|
+
|
17
|
+
CONVERTER_CLASS = Jekyll::Converters::Markdown
|
18
|
+
# config
|
19
|
+
CONFIG_KEY = "ids"
|
20
|
+
ENABLED_KEY = "enabled"
|
21
|
+
EXCLUDE_KEY = "exclude"
|
22
|
+
FORMAT_KEY = "format"
|
23
|
+
ALPHA_KEY = "alpha"
|
24
|
+
SIZE_KEY = "size"
|
25
|
+
|
26
|
+
def initialize(config)
|
27
|
+
@config ||= config
|
28
|
+
@testing ||= config['testing'].nil? ? false : config['testing']
|
29
|
+
end
|
30
|
+
|
31
|
+
def generate(site)
|
32
|
+
return if disabled?
|
33
|
+
|
34
|
+
@site = site
|
35
|
+
@yesall = false
|
36
|
+
@noall = false
|
37
|
+
|
38
|
+
markdown_converter = site.find_converter_instance(CONVERTER_CLASS)
|
39
|
+
# filter docs based on configs
|
40
|
+
docs = []
|
41
|
+
docs += site.docs_to_write.filter { |d| !exclude?(d.type) }
|
42
|
+
@md_docs = docs.filter { |doc| markdown_converter.matches(doc.extname) }
|
43
|
+
if @md_docs.nil? || @md_docs.empty?
|
44
|
+
Jekyll.logger.warn("Jekyll-ID: No documents to process.")
|
45
|
+
end
|
46
|
+
|
47
|
+
@md_docs.each do |doc|
|
48
|
+
prep_id(doc)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
# helpers
|
53
|
+
|
54
|
+
def prep_id(doc)
|
55
|
+
return if @noall
|
56
|
+
has_id = doc.data.keys.include?('id')
|
57
|
+
# 0 == is strict
|
58
|
+
# nil == isn't strict
|
59
|
+
is_strict_id = (alpha_formatted?(doc.data['id'].to_s) && size_formatted?(doc.data['id'].to_s))
|
60
|
+
# cases where we would want to generate a new id
|
61
|
+
case_1 = !has_id # no id exists
|
62
|
+
case_2 = strict? && !is_strict_id # id isn't formatted properly
|
63
|
+
if (case_1 || case_2)
|
64
|
+
new_id = generate_id.to_s
|
65
|
+
# populate missing id
|
66
|
+
if case_1
|
67
|
+
Jekyll.logger.info("\n> Generate frontmatter ID for \n> #{doc.inspect}\n>with new ID: '#{new_id}'")
|
68
|
+
# replace invalid format id
|
69
|
+
elsif case_2
|
70
|
+
Jekyll.logger.info("\n> Replace frontmatter ID for:\n> #{doc.inspect}\n> from:'#{doc.data['id']}'\n> to:'#{new_id}'")
|
71
|
+
# um...
|
72
|
+
else
|
73
|
+
Jekyll.logger.warn("Jekyll-ID: Invalid ID case")
|
74
|
+
end
|
75
|
+
resp = request if !@testing
|
76
|
+
if @testing || ((@yesall || resp == "yes") && !@noall)
|
77
|
+
write_id(doc, new_id)
|
78
|
+
doc.data['id'] = new_id
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
def generate_id
|
84
|
+
has_size = (size.size != 0)
|
85
|
+
has_alpha = (alpha.size != 0)
|
86
|
+
return Nanoid.generate if !strict?
|
87
|
+
return Nanoid.generate(size: size, alphabet: alpha) if has_size && has_alpha
|
88
|
+
return Nanoid.generate(size: size) if has_size && !has_alpha
|
89
|
+
return Nanoid.generate(alphabet: alpha) if !has_size && has_alpha
|
90
|
+
end
|
91
|
+
|
92
|
+
def request
|
93
|
+
if !@yesall && !@noall
|
94
|
+
Jekyll.logger.info("\n> Is that ok?")
|
95
|
+
Jekyll.logger.info("> (yes, no, yesall, or noall)")
|
96
|
+
cont = gets
|
97
|
+
if cont.strip == "yesall"
|
98
|
+
@yesall = true
|
99
|
+
Jekyll.logger.info("> Handle all IDs...")
|
100
|
+
elsif cont.strip == "noall"
|
101
|
+
@noall = true
|
102
|
+
Jekyll.logger.info("> Leaving all IDs alone...")
|
103
|
+
elsif cont.strip == "yes"
|
104
|
+
Jekyll.logger.info("> Handling ID...")
|
105
|
+
elsif cont.strip == "no"
|
106
|
+
Jekyll.logger.info("> Leaving ID alone...")
|
107
|
+
else
|
108
|
+
Jekyll.logger.error("Jekyll-ID: Invalid response. Skipping...")
|
109
|
+
end
|
110
|
+
return cont.strip
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
def write_id(doc, id)
|
115
|
+
lines = IO.readlines(doc.path)
|
116
|
+
lines.delete_if { |l| l.include?("id: #{doc.data['id']}") }
|
117
|
+
lines.insert(1, "id: #{id}\n")
|
118
|
+
File.open(doc.path, 'w') do |file|
|
119
|
+
file.puts lines
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
# descriptor methods
|
124
|
+
|
125
|
+
def alpha_formatted?(id)
|
126
|
+
return true if !option_format(ALPHA_KEY)
|
127
|
+
return id.chars.all? { |char| alpha.include?(char) }
|
128
|
+
end
|
129
|
+
|
130
|
+
def size_formatted?(id)
|
131
|
+
return true if !option_format(SIZE_KEY)
|
132
|
+
return id.size == size
|
133
|
+
end
|
134
|
+
|
135
|
+
def strict?
|
136
|
+
return option(FORMAT_KEY) && (option_format(SIZE_KEY) || option_format(ALPHA_KEY))
|
137
|
+
end
|
138
|
+
|
139
|
+
# 'getters'
|
140
|
+
|
141
|
+
def alpha
|
142
|
+
return option_format(ALPHA_KEY).nil? ? '' : option_format(ALPHA_KEY)
|
143
|
+
end
|
144
|
+
|
145
|
+
def size
|
146
|
+
return option_format(SIZE_KEY).nil? ? '' : option_format(SIZE_KEY)
|
147
|
+
end
|
148
|
+
|
149
|
+
# config helpers
|
150
|
+
|
151
|
+
def disabled?
|
152
|
+
option(ENABLED_KEY) == false
|
153
|
+
end
|
154
|
+
|
155
|
+
def exclude?(type)
|
156
|
+
return false unless option(EXCLUDE_KEY)
|
157
|
+
return option(EXCLUDE_KEY).include?(type.to_s)
|
158
|
+
end
|
159
|
+
|
160
|
+
def option(key)
|
161
|
+
@config[CONFIG_KEY] && @config[CONFIG_KEY][key]
|
162
|
+
end
|
163
|
+
|
164
|
+
def option_format(key)
|
165
|
+
@config[CONFIG_KEY] && @config[CONFIG_KEY][FORMAT_KEY] && @config[CONFIG_KEY][FORMAT_KEY][key]
|
166
|
+
end
|
167
|
+
|
168
|
+
end
|
169
|
+
|
9
170
|
end
|
10
171
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jekyll-id
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- manunamz
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-11-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: jekyll
|
@@ -24,6 +24,20 @@ dependencies:
|
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 4.2.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: nanoid
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 2.0.0
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 2.0.0
|
27
41
|
description:
|
28
42
|
email:
|
29
43
|
- manunamz@pm.me
|
@@ -32,10 +46,11 @@ extensions: []
|
|
32
46
|
extra_rdoc_files: []
|
33
47
|
files:
|
34
48
|
- lib/jekyll-id.rb
|
49
|
+
- lib/jekyll-id/patch/url_drop.rb
|
35
50
|
- lib/jekyll-id/version.rb
|
36
51
|
homepage: https://github.com/manunamz/jekyll-id
|
37
52
|
licenses:
|
38
|
-
-
|
53
|
+
- GPL3
|
39
54
|
metadata:
|
40
55
|
homepage_uri: https://github.com/manunamz/jekyll-id
|
41
56
|
source_code_uri: https://github.com/manunamz/jekyll-id
|
@@ -55,8 +70,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
55
70
|
- !ruby/object:Gem::Version
|
56
71
|
version: '0'
|
57
72
|
requirements: []
|
58
|
-
rubygems_version: 3.2.
|
73
|
+
rubygems_version: 3.2.27
|
59
74
|
signing_key:
|
60
75
|
specification_version: 4
|
61
|
-
summary:
|
76
|
+
summary: Add unique ID support for jekyll (markdown) documents.
|
62
77
|
test_files: []
|