jekyll-page-boilerplate 4.1.0 → 4.3.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c0e902f15da76660bca40905d596f95cc1ab1f6f3f3f1e6533d38d1e219b05e6
4
- data.tar.gz: 71a26b39978a7f26252e95f99caf0e1dda7a8b4f72ebe57637afa5a5eca040f3
3
+ metadata.gz: 11506899d111701050ee623e6f1970e1a6ea1028a597c47ddb09e84d2bda8625
4
+ data.tar.gz: 79a41ce8ae43e40aab6ece52faab4b0a604f462849a9bb076d8df601cff1409d
5
5
  SHA512:
6
- metadata.gz: 7d5a7e96cdc2b999749603d9c8dcda141b49e7b2230dc5ae2871cab22eff97b29f309320d69777ba9c9c5287b477bcf2847a9c14c9b235d150049215b0d1fe04
7
- data.tar.gz: 3182cf46a90cf0d0ffe94ba6120eee236a5ec6d897cba09dc702fcd5a8b8cf300ab2a28e0dd8ae47e422608bf43f56f22cce2595e91b045c17f82f4a4532033b
6
+ metadata.gz: 57085fc3192f461a8fbdb1bf6dfe722e5eb9447fe608b4be170922192a17c930780d4e25c253a77220ab6dcd697f94c3c2029b2c34546d7f91e0974d679e224d
7
+ data.tar.gz: 587b236f7a440a0a6d274926267b2fd9e45f83eb11724559b89a5bfba76deb27b99a809f651c96a3d7dabc78dcdce647a961e4961aea8f602aac7c006dc67a48
@@ -2,10 +2,7 @@
2
2
  module JekyllPageBoilerplate
3
3
 
4
4
  class List
5
-
6
- SPACER = '\n'
7
- REMOVE_SUFFIX = /\.\w+(?=[\s\n\r$])/
8
-
5
+
9
6
  def self.run
10
7
  Dir.glob("_boilerplates/*").map do |f|
11
8
  File.basename(f, '.*')
@@ -5,7 +5,10 @@ A boilerplate is a markdown file you place under the `_boilerplates` folder to g
5
5
  ---
6
6
  _boilerplate: # boilerplate settings
7
7
  path: _posts # the path to create the new page under.
8
- timestamp: true # when true new post/pages will include the date in the filename.
8
+ timestamp: true # when true new post/pages will include the date in the filename.
9
+ # a custom slug overrides the timestamp setting
10
+ slug: '{{ title }}-{{ date }}'
11
+ # slug is a template for the filename, it cant take the same tags everything else.
9
12
  title: {{ boilerplate.title }} # tags like this will be replaced
10
13
  layout: post # everthing else will be copied to the new post.
11
14
  author: John Doe
@@ -0,0 +1,15 @@
1
+ A boilerplate is a markdown file you place under the `_boilerplates/<boilerplate>.md` folder to generate new pages for jekyll.
2
+
3
+
4
+ It can automatically timestamp and title new pages.
5
+
6
+
7
+ It will also replacing any `{{ boilerplate.xxx }}` tags with content. Available tags include `.time, .title, .date, .random_url`.
8
+
9
+
10
+ You can also provide custom tags with `boilerplate post nav_order=1` > `{{ boilerplate.nav_order }}`.
11
+
12
+
13
+ In the boilerplate header you can specify options like the path to generate pages under and if filenames should be timestamped. `_boilerplate: > path: '_posts/'`
14
+
15
+
@@ -9,7 +9,10 @@ class JekyllPageBoilerplate::Page
9
9
  FILE_DATE_FORMATE = '%Y-%m-%d'
10
10
  READ_CONFIG_REGEX = /[\r\n\s]{0,}^_boilerplate:(\s*^[\t ]{1,2}.+$)+[\r\s\n]{0,}(?![^\r\s\n])/
11
11
  READ_FILE_REGEX = /^-{3}\s*^(?<head>[\s\S]*)^-{3}\s^(?<body>[\s\S]*)/
12
- TAGS_REGEX = /(?<tag>\{{2}\s{0,}boilerplate\.(?<key>[^\{\}\.\s]+)\s{0,}\}{2})/
12
+ TAGS_REGEX = /\{{2}\s{0,}boilerplate\.([^\{\}\.\s]+)\s{0,}\}{2}/
13
+ TAG_SLUG = /\{{2}\s{0,}([^\{\}\.\s]+)\s{0,}\}{2}/
14
+
15
+
13
16
 
14
17
  attr_reader :config
15
18
 
@@ -34,6 +37,16 @@ class JekyllPageBoilerplate::Page
34
37
  @config = get_config(parsed_file['head']).merge(options)
35
38
  @config['suffix'] ||= plate_path[/\.\w+$/]
36
39
  @config['name'] ||= plate_path[/.*(?=\.)/] || plate_path
40
+ @config['basename'] = File.basename(plate_path, '.*')
41
+ @config['title'] ||= @config['basename']
42
+
43
+ unless @config['slug']
44
+ if @config['timestamp']
45
+ @config['slug'] = '{{ date }}-{{ title }}'
46
+ else
47
+ @config['slug'] = '{{ title }}'
48
+ end
49
+ end
37
50
  @head = get_head(parsed_file['head'])
38
51
  @body = get_body(parsed_file['body'])
39
52
  end
@@ -44,7 +57,11 @@ class JekyllPageBoilerplate::Page
44
57
 
45
58
  abort_unless_file_exists(@config['path'])
46
59
 
47
- @config['file'] ||= get_new_page_filename(@config['title'] || @config['name'])
60
+ # puts @config['slug']
61
+ scan_slug
62
+ @config['file'] = @config['slug']+@config['suffix']
63
+ # puts @config['file']
64
+ # puts @config['title'].inspect
48
65
 
49
66
  scan_template :@body
50
67
  scan_template :@head
@@ -69,13 +86,22 @@ class JekyllPageBoilerplate::Page
69
86
  end
70
87
 
71
88
  def scan_template var
72
- instance_variable_get(var).scan(TAGS_REGEX).uniq.each do |tag, key|
73
- instance_variable_get(var).gsub! /\{{2}\s{0,}boilerplate\.#{key}\s{0,}\}{2}/, get_tag_value(key)
89
+ instance_variable_get(var).scan(TAGS_REGEX).flatten.uniq.each do |tag|
90
+ instance_variable_get(var).gsub! /\{{2}\s{0,}boilerplate\.#{tag}\s{0,}\}{2}/, get_tag_value(tag)
91
+ end
92
+ end
93
+
94
+ def scan_slug
95
+ @config['slug'].scan(TAG_SLUG).flatten.uniq.each do |tag|
96
+ @config['slug'].gsub! /\{{2}\s{0,}#{tag}\s{0,}\}{2}/, get_tag_value(tag)
74
97
  end
98
+
99
+ @config['slug'].gsub!(/[^0-9A-Za-z\.\-_]/, '-')
100
+ @config['slug'].downcase!
75
101
  end
76
102
 
77
103
  def get_tag_value(key)
78
- return @config[key] if @config[key]
104
+ return @config[key].to_s if @config[key]
79
105
  key = key.split('=')
80
106
  return Tag.send(key[0].to_sym, *key[1]&.split(','))
81
107
  end
@@ -113,16 +139,6 @@ class JekyllPageBoilerplate::Page
113
139
  end
114
140
 
115
141
 
116
- def get_new_page_filename title
117
- title = title.to_url
118
- title = "#{title}#{@config['suffix']}"
119
- if @config['timestamp']
120
- title = "#{@config['date']}-#{title}"
121
- end
122
- return title
123
- end
124
-
125
-
126
142
 
127
143
  def abort_if_file_exists(file_path)
128
144
  if File.exist?(file_path)
@@ -1,3 +1,3 @@
1
1
  module JekyllPageBoilerplate
2
- VERSION = "4.1.0"
2
+ VERSION = "4.3.0"
3
3
  end
@@ -10,15 +10,17 @@ class JekyllPageBoilerplate::Application < Bales::Application
10
10
  description: "`path/<title>.md`"
11
11
  option :path, type: String, long_form: '--path', short_form: '-p',
12
12
  description: "`<path>/title.md`"
13
+ option :slug, type: String, long_form: '--slug', short_form: '-u',
14
+ description: "`path/<slug-template>.md` `{{title}}-{{date}}`"
13
15
  option :timestamp, type: TrueClass, long_form: '--timestamp', short_form: '-s',
14
16
  description: "`path/<time.now>-title.md`"
15
17
  option :suffix, type: String, long_form: '--suffix', short_form: '-x',
16
18
  description: "`path/title.<md, markdown, txt>`"
17
19
 
18
- action do |plate, *custom, title: nil, path: nil, timestamp: nil, suffix: nil|
20
+ action do |plate, *custom, title: nil, slug: nil, path: nil, timestamp: nil, suffix: nil|
19
21
  custom = Hash[custom.map {|v| v.split('=')}]
20
22
  JekyllPageBoilerplate.page plate, custom.merge({
21
- title: title, path: path,
23
+ title: title, path: path, slug: slug,
22
24
  suffix: suffix, timestamp: timestamp
23
25
  })
24
26
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jekyll-page-boilerplate
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.1.0
4
+ version: 4.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sean Ferney
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-05-11 00:00:00.000000000 Z
11
+ date: 2022-05-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bales
@@ -44,19 +44,22 @@ dependencies:
44
44
  - - ">="
45
45
  - !ruby/object:Gem::Version
46
46
  version: 2.8.5
47
- description: "A boilerplate is a markdown file you place under the `_boilerplates`
48
- folder to generate new pages for jekyll.\n\n`_boilerplates/post.md`\n\n ---\n
49
- \ _boilerplate: # boilerplate settings\n path: _posts # the path
50
- to create the new page under.\n timestamp: true # when true new post/pages
51
- will include the date in the filename. \n title: {{ boilerplate.title }} # tags
52
- like this will be replaced\n layout: post # everthing else will be copied
53
- to the new post.\n author: John Doe\n\n\n`$ boilerplate post -T \"Another one
54
- about pottery\"` would create a new file `_posts/yyyy-mm-dd-another-one-about-pottery.markdown`\n\n
55
- \ ---\n title: Another one about pottery\n created: 'yyyy-mm-dd hh:mm:ss
56
- -0000'\n layout: post\n author: John Doe\n\n\nAvailable Tags `{{ boilerplate.xxx
57
- }}`:\n- `.title`, `.name`\n- `.path`, `.file`, `.suffix`\n- `.time`, `.date`, `.timestamp`\n-
58
- `.random_url`\n- Custom tags you provide in the command `bplate post custom=1`\n-
59
- And anything you put under the `_boilerplate:` header\n"
47
+ description: |+
48
+ A boilerplate is a markdown file you place under the `_boilerplates/<boilerplate>.md` folder to generate new pages for jekyll.
49
+
50
+
51
+ It can automatically timestamp and title new pages.
52
+
53
+
54
+ It will also replacing any `{{ boilerplate.xxx }}` tags with content. Available tags include `.time, .title, .date, .random_url`.
55
+
56
+
57
+ You can also provide custom tags with `boilerplate post nav_order=1` > `{{ boilerplate.nav_order }}`.
58
+
59
+
60
+ In the boilerplate header you can specify options like the path to generate pages under and if filenames should be timestamped. `_boilerplate: > path: '_posts/'`
61
+
62
+
60
63
  email:
61
64
  - sean@codekarma.dev
62
65
  executables:
@@ -73,6 +76,7 @@ files:
73
76
  - lib/jekyll_page_boilerplate/list.rb
74
77
  - lib/jekyll_page_boilerplate/msg.rb
75
78
  - lib/jekyll_page_boilerplate/msg/description.md
79
+ - lib/jekyll_page_boilerplate/msg/gem_description.md
76
80
  - lib/jekyll_page_boilerplate/page.rb
77
81
  - lib/jekyll_page_boilerplate/version.rb
78
82
  - lib/jekyll_page_boilerplate_cli.rb