jekyll-page-boilerplate 4.1.0 → 4.3.0

Sign up to get free protection for your applications and to get access to all the features.
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