jekyll-zettel 0.5.3 → 0.6.3

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: 5996b719e0aab85cc7a2b63e4463ea3285a29446602e65062886afa3ccc94b25
4
- data.tar.gz: 2ebf053164cbaa31206ad9c1f8f8e05608b62f9172e475a8125efd6bfc1740f3
3
+ metadata.gz: 51a5c32e36a7b3917ba21eb4962a0778185d661ea7696e4f091814cf77e3227b
4
+ data.tar.gz: 57fd94df848c4efcbd98a575ff2c1bf9ee0267b4d087d078ff46aeb8d0cc21c2
5
5
  SHA512:
6
- metadata.gz: 73f5d566617cc067433031c652760b77f0192d975bc63234f06d91c165b123c9b8c3b13fb91c3c2dc4f7d3829a0ee71edab68174106c6f15be8bcc88fc0e8958
7
- data.tar.gz: eb86bc4170690f4ae4e7d5ca0b6282576dbc84077e5e7b5d85abe589ffd97c5b9f2743548d26f0637f201a6f9227c61c7a4b3012b0249d2533668817624b7caf
6
+ metadata.gz: 91bc3e64237d83ac01516fc1dbc639bc4bff1346adee7d139c428fc39b357c9f73b36c7f4ba636d4bb9b78c6aca06dff906af9b07355f2f8ffb2510091e1153d
7
+ data.tar.gz: e5fff6f734ce34f308d673a9861492f5c04d97824e47bde23503b57b1d571a6d3f7af5f89bc11ac3bd66c24a1421ecc4dbd4e918297e18d025d922a3b3b0b706
@@ -0,0 +1,51 @@
1
+ module Jekyll
2
+ module Commands
3
+ # Jekyll subcommand <scaffold>
4
+ class Scaffold < Command
5
+ class << self
6
+
7
+ # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
8
+ def init_with_program(prog)
9
+ prog.command(:scaffold) do |c|
10
+ c.syntax 'scaffold <option> [arg]'
11
+ c.description 'Create new infotype scaffold'
12
+ c.option 'akteur', '-a', '--akteur', 'scaffold a new Akteur; arg <full name> required'
13
+ c.option 'blatt', '-b', '--blatt', 'scaffold a new Arbeitsblatt; arg <title> required'
14
+ c.option 'glosse', '-g', '--glosse', 'scaffold a new Glosse; arg <title> required'
15
+ c.option 'zeitleiste', '-e', '--zeitleiste', 'scaffold a new Zeitleiste; arg <title> required'
16
+ c.option 'zettel', '-z', '--zettel', 'scaffold a new Zettel'
17
+ c.action do |args, options|
18
+
19
+ if options.empty?
20
+ Jekyll.logger.error Jekyll::Zettel::LOG_KEY, 'Missing infotype, use: jekyll scaffold <option> [arg]'
21
+ else
22
+ infotype = options.keys[0].capitalize
23
+ name = "Jekyll::Zettel::#{infotype}"
24
+ if class_exists?(name)
25
+ clazz = name.split('::').inject(Object) do |o, c|
26
+ o.const_get c
27
+ end
28
+
29
+ file = clazz.new.scaffold(args)
30
+ system("code #{File.expand_path(file)}") unless file.nil?
31
+ # puts file
32
+ else
33
+ Jekyll.logger.error Jekyll::Zettel::LOG_KEY, "Infotype `#{infotype}` not yet implemented"
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+
40
+ # rubocop:enable Metrics/MethodLength, Metrics/AbcSize
41
+ def class_exists?(clazz)
42
+ klass = Module.const_get(clazz)
43
+ klass.is_a?(Class)
44
+ rescue NameError
45
+ false
46
+ end
47
+
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,35 @@
1
+ ---
2
+ # created_at: #{Time.now}
3
+ #
4
+ # Never ever change the id of your page!
5
+ # Changing the id has manifold side effects. Most of them unwanted.
6
+ # If you want to move or rename the page do it within the realms of
7
+ # this project.
8
+ #
9
+ id: #{args['id']}
10
+ #
11
+ #
12
+ # Be careful in changing the layout of this page.
13
+ # Additional meta data may be required.
14
+ #
15
+ layout: page
16
+ #
17
+ #
18
+ # The following front-matter attributes are mandatory
19
+ #
20
+ title:
21
+ description:
22
+ #
23
+ #
24
+ # These front-matter attributes are optional, but support a nice
25
+ # look-and-feel. If you want to use them just delete the hash
26
+ # character at the beginning of the corresponding lines.
27
+ #
28
+ # kicker:
29
+ # image:
30
+ ---
31
+
32
+
33
+ <!-- Fußnoten -->
34
+
35
+ <!-- Links -->
@@ -6,12 +6,13 @@ layout: glosse
6
6
  # Die ID der Glosse entspricht dem Namen des Unterverzeichnisses.
7
7
  # Dieser Wert darf auf keinen Fall geändert werden!
8
8
  #
9
- glosse: #{args['slug']}
9
+ id: #{args['slug']}
10
+ tag: #{args['title']}
10
11
  #
11
12
  # Die Dokumentation aller Properties findest du unter
12
13
  # https://jessas.org/projekt/dokumentation/glosse/#frontmatter
13
14
  #
14
- title: #{args['title']}
15
+ title:
15
16
  description:
16
17
  author:
17
18
  #
@@ -20,3 +21,8 @@ author:
20
21
  # tags: []
21
22
  # image:
22
23
  ---
24
+
25
+
26
+ <!-- Fußnoten -->
27
+
28
+ <!-- Links -->
@@ -6,7 +6,7 @@ layout: zettel
6
6
  # Die UUID des Zettels entspricht dem Namen des Unterverzeichnisses.
7
7
  # Dieser Wert darf auf keinen Fall geändert werden!
8
8
  #
9
- zettel: #{args['uuid']}
9
+ id: #{args['uuid']}
10
10
  #
11
11
  # Die Dokumentation aller Properties findest du unter
12
12
  # https://jessas.org/projekt/dokumentation/zettel/#frontmatter
@@ -26,3 +26,8 @@ author:
26
26
  # href:
27
27
  # annotation:
28
28
  ---
29
+
30
+
31
+ <!-- Fußnoten -->
32
+
33
+ <!-- Links -->
@@ -0,0 +1,22 @@
1
+ module Jekyll
2
+ module Zettel
3
+ # Scaffolder for infotype Glosse
4
+ class Glosse
5
+
6
+ include Jekyll::Zettel
7
+
8
+ def scaffold(args)
9
+ return nil if args_empty?(args)
10
+
11
+ slug = create_slug(args.first)
12
+ file = "glosse/#{slug}/index.md"
13
+ return file if create_dir_defensively('Glosse', slug, file).nil?
14
+
15
+ create_page({ 'slug' => slug, 'title' => args.first }, file, 'glosse.md')
16
+
17
+ Jekyll.logger.info '✓', "Created glosse with slug `#{slug}`"
18
+ file
19
+ end
20
+ end
21
+ end
22
+ end
@@ -2,7 +2,7 @@ module Jekyll
2
2
  module Zettel
3
3
  # Enrich page front matter with object meta data
4
4
  class References < Jekyll::Generator
5
- include Zettel
5
+ include Jekyll::Zettel
6
6
 
7
7
  priority :highest
8
8
 
@@ -2,7 +2,7 @@ module Jekyll
2
2
  module Zettel
3
3
  # Generate tags.json from page front matter
4
4
  class Tags < Jekyll::Generator
5
- include Zettel
5
+ include Jekyll::Zettel
6
6
 
7
7
  SLUG_FORMAT = %r{glosse/(?<slug>.*)/index.(?<ext>html|md)}i.freeze
8
8
 
@@ -1,5 +1,5 @@
1
1
  module Jekyll
2
2
  module Zettel
3
- VERSION = '0.5.3'.freeze
3
+ VERSION = '0.6.3'.freeze
4
4
  end
5
5
  end
@@ -0,0 +1,28 @@
1
+ module Jekyll
2
+ module Zettel
3
+ # Scaffolder for infotype Zettel
4
+ class Zettel
5
+
6
+ include Jekyll::Zettel
7
+
8
+ def scaffold(_args)
9
+ uuid = create_uuid
10
+ file = "zettel/#{uuid}/index.md"
11
+ create_page({ 'uuid' => uuid }, file, 'zettel.md')
12
+
13
+ Jekyll.logger.info '✓', "Created new Zettel with UUID `#{uuid}`"
14
+ file
15
+ end
16
+
17
+ def create_uuid
18
+ uuid = SecureRandom.uuid
19
+ dir = "zettel/#{uuid}"
20
+ return create_uuid if File.directory?(dir)
21
+
22
+ FileUtils.mkdir_p(dir)
23
+ uuid
24
+ end
25
+
26
+ end
27
+ end
28
+ end
@@ -2,7 +2,7 @@ module Jekyll
2
2
  module Zettel
3
3
  # Generate tags.json from page front matter
4
4
  class Zettelkasten < Jekyll::Generator
5
- include Zettel
5
+ include Jekyll::Zettel
6
6
 
7
7
  priority :low
8
8
 
data/lib/jekyll/zettel.rb CHANGED
@@ -29,13 +29,69 @@ module Jekyll
29
29
 
30
30
  @site.pages << page
31
31
  end
32
+
33
+ def create_page(args, file, template)
34
+ File.open(file, 'w') { |out| out.write evaluate_template(args, template) }
35
+ # puts evaluate_template(args, template)
36
+ end
37
+
38
+ # rubocop:disable Style/EvalWithLocation, Security/Eval, Lint/UnusedMethodArgument
39
+ def evaluate_template(args, template)
40
+ string = File.read(File.expand_path("../stubs/#{template}", __FILE__))
41
+ eval("\"#{string}\"")
42
+ end
43
+
44
+ # rubocop:enable Style/EvalWithLocation, Security/Eval, Lint/UnusedMethodArgument
45
+ # rubocop: disable Layout/FirstHashElementIndentation, Metrics/MethodLength
46
+ def create_slug(title)
47
+ I18n.config.available_locales = :de
48
+ I18n.locale = :de
49
+ I18n.backend.store_translations(:de, i18n: {
50
+ transliterate: {
51
+ rule: {
52
+ 'Ä' => 'Ae',
53
+ 'Ö' => 'Oe',
54
+ 'Ü' => 'Ue',
55
+ 'ü' => 'ue',
56
+ 'ö' => 'oe',
57
+ 'ä' => 'ae',
58
+ 'ß' => 'sz'
59
+ }
60
+ }
61
+ })
62
+ Jekyll::Utils.slugify(title, mode: 'latin')
63
+ end
64
+
65
+ def create_dir_defensively(infotype, slug, file)
66
+ dir = File.dirname(file)
67
+ if File.directory?(dir)
68
+ if File.exist?(file)
69
+ Jekyll.logger.error LOG_KEY, "#{infotype} `#{slug}` already present"
70
+ nil
71
+ else
72
+ dir
73
+ end
74
+ else
75
+ FileUtils.mkdir_p(dir)
76
+ end
77
+ end
78
+
79
+ def args_empty?(args)
80
+ return false unless args.empty?
81
+
82
+ Jekyll.logger.error LOG_KEY, 'Missing argument slug'
83
+ Jekyll.logger.info LOG_KEY, 'usage: jekyll scaffold --glosse <slug>'
84
+ true
85
+ end
32
86
  end
33
87
  end
34
88
 
35
- require 'jekyll/commands/zettel'
89
+ require 'jekyll/commands/scaffold'
36
90
  require 'jekyll/zettel/globals'
37
- require 'jekyll/zettel/references'
91
+ require 'jekyll/zettel/glosse'
38
92
  require 'jekyll/zettel/reference'
39
- require 'jekyll/zettel/timeline'
93
+ require 'jekyll/zettel/references'
40
94
  require 'jekyll/zettel/tags'
95
+ require 'jekyll/zettel/timeline'
96
+ require 'jekyll/zettel/zettel'
41
97
  require 'jekyll/zettel/zettelkasten'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jekyll-zettel
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.3
4
+ version: 0.6.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Gerzabek
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-01-19 00:00:00.000000000 Z
11
+ date: 2022-01-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: citeproc-ruby
@@ -105,16 +105,19 @@ files:
105
105
  - README.md
106
106
  - Rakefile
107
107
  - jekyll-zettel.gemspec
108
- - lib/jekyll/commands/zettel.rb
108
+ - lib/jekyll/commands/scaffold.rb
109
+ - lib/jekyll/stubs/blatt.md
109
110
  - lib/jekyll/stubs/glosse.md
110
111
  - lib/jekyll/stubs/zettel.md
111
112
  - lib/jekyll/zettel.rb
112
113
  - lib/jekyll/zettel/globals.rb
114
+ - lib/jekyll/zettel/glosse.rb
113
115
  - lib/jekyll/zettel/reference.rb
114
116
  - lib/jekyll/zettel/references.rb
115
117
  - lib/jekyll/zettel/tags.rb
116
118
  - lib/jekyll/zettel/timeline.rb
117
119
  - lib/jekyll/zettel/version.rb
120
+ - lib/jekyll/zettel/zettel.rb
118
121
  - lib/jekyll/zettel/zettelkasten.rb
119
122
  homepage: https://michaelgerzabek.com/gems/jekyll-zettel
120
123
  licenses:
@@ -1,110 +0,0 @@
1
- module Jekyll
2
- module Commands
3
- # Jekyll subcommand <zettel>
4
- class Zettel < Command
5
- class << self
6
-
7
- # rubocop:disable Metrics/MethodLength
8
- def init_with_program(prog)
9
- prog.command(:zettel) do |c|
10
- c.syntax 'zettel'
11
- c.description 'Creates a new Infotype'
12
- c.action do |args, _options|
13
-
14
- infotype = args[0] || 'zettel'
15
-
16
- if respond_to?("new_#{infotype}")
17
-
18
- file = public_send("new_#{infotype}", args)
19
- system("code #{File.expand_path(file)}") unless file.nil?
20
-
21
- else
22
- Jekyll.logger.error Jekyll::Zettel::LOG_KEY, "Invalid infotype #{infotype}"
23
- end
24
-
25
- end
26
- end
27
- end
28
-
29
- def new_glosse(args)
30
- if args[1].nil?
31
- Jekyll.logger.error Jekyll::Zettel::LOG_KEY, 'Missing argument slug'
32
- Jekyll.logger.info Jekyll::Zettel::LOG_KEY, 'usage: jekyll zettel glosse <slug>'
33
- nil
34
- else
35
- slug = create_slug(args[1])
36
- file = "glosse/#{slug}/index.md"
37
- return file if create_dir_defensively('Glosse', slug, file).nil?
38
-
39
- create_page({ 'slug' => slug, 'title' => args[1] }, file, 'glosse.md')
40
-
41
- Jekyll.logger.info '✓', "Created glosse with slug `#{slug}`"
42
- file
43
- end
44
- end
45
-
46
- def create_slug(title)
47
- I18n.config.available_locales = :de
48
- I18n.locale = :de
49
- I18n.backend.store_translations(:de, i18n: {
50
- transliterate: {
51
- rule: {
52
- 'Ä' => 'Ae',
53
- 'Ö' => 'Oe',
54
- 'Ü' => 'Ue',
55
- 'ü' => 'ue',
56
- 'ö' => 'oe',
57
- 'ä' => 'ae',
58
- 'ß' => 'sz'
59
- }
60
- }
61
- })
62
- Jekyll::Utils.slugify(title, mode: 'latin')
63
- end
64
-
65
- def create_dir_defensively(infotype, slug, file)
66
- dir = File.dirname(file)
67
- if File.directory?(dir)
68
- if File.exist?(file)
69
- Jekyll.logger.error Jekyll::Zettel::LOG_KEY, "#{infotype} `#{slug}` already present"
70
- nil
71
- else
72
- dir
73
- end
74
- else
75
- FileUtils.mkdir_p(dir)
76
- end
77
- end
78
-
79
- def new_zettel(_args)
80
- uuid = create_uuid
81
- file = "zettel/#{uuid}/index.md"
82
- create_page({ 'uuid' => uuid }, file, 'zettel.md')
83
-
84
- Jekyll.logger.info '✓', "Created new Zettel with UUID `#{uuid}`"
85
- file
86
- end
87
-
88
- def create_uuid
89
- uuid = SecureRandom.uuid
90
- dir = "zettel/#{uuid}"
91
- return create_uuid if File.directory?(dir)
92
-
93
- FileUtils.mkdir_p(dir)
94
- uuid
95
- end
96
-
97
- def create_page(args, file, template)
98
- File.open(file, 'w') { |out| out.write evaluate_template(args, template) }
99
- end
100
-
101
- # rubocop:disable Style/EvalWithLocation, Security/Eval, Lint/UnusedMethodArgument
102
- def evaluate_template(args, template)
103
- string = File.read(File.expand_path("../stubs/#{template}", __dir__))
104
- eval("\"#{string}\"")
105
- end
106
-
107
- end
108
- end
109
- end
110
- end