jekyll-zettel 0.4.3 → 0.6.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: b84091ada73cf6ccb4006208b9cdbb4a54ff1141d343a7345c5f9ac0be0b18bd
4
- data.tar.gz: af6162e054dc208eaf165fa9249d8dcabe356ae4f4f3156762fb37957d312902
3
+ metadata.gz: 12c74e815bb55368376966e3efc0a84ef0635c0ee8d66cf02cded71b02c06f45
4
+ data.tar.gz: 24da14c57cb4a4105b5f6683613115635c67e96731e2936d893f39b0bbcdf1cd
5
5
  SHA512:
6
- metadata.gz: 0051ac31d604711fe6e5b3f423f69e62df02bf2da14587afd41407b7d5e74fc59822803ece006854e37db6fb992d6877e9513deab47e4f340426c459bc0e818e
7
- data.tar.gz: 6dc3d8fd4f4240b01302c1b781a67fc7798e8b5f0ca186bdda7e9422e941f39495ab092e37cca35e75c631aba891ca313d9802ae7bfc8243df77df9ca404ce1b
6
+ metadata.gz: 60e2815612ca85eae9dab3aa0c351e5086f2e221889884e14b3f1da70a953a8523c90064af774f6b9e18681fb3372b75fc479fbf09a2c9820c903e269459e833
7
+ data.tar.gz: 6c12f7259736d3ac70a07f207004a17558966fd9e6479829b7fceeffaf9b84f3254d74bdb5b6644602b965f3187da95ca28f1863c62906ca9320b3b51e288c35
@@ -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,30 @@
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
+ page_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
+ ---
@@ -0,0 +1,22 @@
1
+ ---
2
+ layout: glosse
3
+ #
4
+ # created_at: #{Time.now}
5
+ #
6
+ # Die ID der Glosse entspricht dem Namen des Unterverzeichnisses.
7
+ # Dieser Wert darf auf keinen Fall geändert werden!
8
+ #
9
+ glosse: #{args['slug']}
10
+ #
11
+ # Die Dokumentation aller Properties findest du unter
12
+ # https://jessas.org/projekt/dokumentation/glosse/#frontmatter
13
+ #
14
+ title: #{args['title']}
15
+ description:
16
+ author:
17
+ #
18
+ # Optionale Properties
19
+ #
20
+ # tags: []
21
+ # image:
22
+ ---
@@ -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: #{uuid}
9
+ zettel: #{args['uuid']}
10
10
  #
11
11
  # Die Dokumentation aller Properties findest du unter
12
12
  # https://jessas.org/projekt/dokumentation/zettel/#frontmatter
@@ -17,10 +17,12 @@ author:
17
17
  #
18
18
  # Optionale Properties
19
19
  #
20
+ # akteure: []
20
21
  # tags: []
21
22
  # folgezettel: []
22
23
  # image:
23
24
  # via:
24
25
  # text:
25
26
  # href:
27
+ # annotation:
26
28
  ---
@@ -0,0 +1,18 @@
1
+ module Jekyll
2
+ module Zettel
3
+ # Enrich site variables with some meta data
4
+ class Globals < Jekyll::Generator
5
+
6
+ priority :lowest
7
+
8
+ def generate(site)
9
+ site.data['url_page'] = {}
10
+
11
+ site.pages.each do |page|
12
+ site.data['url_page'][page.url] = page
13
+ end
14
+ end
15
+
16
+ end
17
+ end
18
+ end
@@ -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
@@ -1,5 +1,5 @@
1
1
  module Jekyll
2
2
  module Zettel
3
- VERSION = '0.4.3'.freeze
3
+ VERSION = '0.6.0'.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
data/lib/jekyll/zettel.rb CHANGED
@@ -29,12 +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 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 args_empty?(args)
80
+ return false unless args.empty?
81
+
82
+ Jekyll.logger.error Jekyll::Zettel::LOG_KEY, 'Missing argument slug'
83
+ Jekyll.logger.info Jekyll::Zettel::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/zettel/globals'
36
90
  require 'jekyll/zettel/references'
37
91
  require 'jekyll/zettel/reference'
38
92
  require 'jekyll/zettel/timeline'
39
93
  require 'jekyll/zettel/tags'
40
94
  require 'jekyll/zettel/zettelkasten'
95
+ require 'jekyll/commands/scaffold'
96
+ require 'jekyll/zettel/glosse'
97
+ require 'jekyll/zettel/zettel'
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.4.3
4
+ version: 0.6.0
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-12 00:00:00.000000000 Z
11
+ date: 2022-01-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: citeproc-ruby
@@ -105,14 +105,19 @@ files:
105
105
  - README.md
106
106
  - Rakefile
107
107
  - jekyll-zettel.gemspec
108
- - lib/jekyll/commands/zettel.rb
109
- - lib/jekyll/stubs/index.md
108
+ - lib/jekyll/commands/scaffold.rb
109
+ - lib/jekyll/stubs/blatt.md
110
+ - lib/jekyll/stubs/glosse.md
111
+ - lib/jekyll/stubs/zettel.md
110
112
  - lib/jekyll/zettel.rb
113
+ - lib/jekyll/zettel/globals.rb
114
+ - lib/jekyll/zettel/glosse.rb
111
115
  - lib/jekyll/zettel/reference.rb
112
116
  - lib/jekyll/zettel/references.rb
113
117
  - lib/jekyll/zettel/tags.rb
114
118
  - lib/jekyll/zettel/timeline.rb
115
119
  - lib/jekyll/zettel/version.rb
120
+ - lib/jekyll/zettel/zettel.rb
116
121
  - lib/jekyll/zettel/zettelkasten.rb
117
122
  homepage: https://michaelgerzabek.com/gems/jekyll-zettel
118
123
  licenses:
@@ -1,47 +0,0 @@
1
- module Jekyll
2
- module Commands
3
- # Jekyll subcommand <zettel>
4
- class Zettel < Command
5
- class << self
6
-
7
- def init_with_program(prog)
8
- prog.command(:zettel) do |c|
9
- c.syntax 'zettel'
10
- c.description 'Creates a new Zettel within subdir zettel'
11
- c.action do |_args, _options|
12
- uuid = new_zettel
13
- file = "zettel/#{uuid}/index.md"
14
- new_page(uuid, file)
15
-
16
- Jekyll.logger.info '✓', "Created new Zettel with UUID: `#{uuid}`"
17
- system("code #{File.expand_path(file)}")
18
- end
19
- end
20
- end
21
-
22
- def new_zettel
23
- uuid = SecureRandom.uuid
24
- dir = "zettel/#{uuid}"
25
- return new_zettel if File.directory?(dir)
26
-
27
- FileUtils.mkdir_p(dir)
28
- uuid
29
- end
30
-
31
- def new_page(uuid, file)
32
- File.open(file, 'w') { |out|
33
- out.write evaluate_template(uuid, 'index.md')
34
- }
35
- end
36
-
37
- # rubocop:disable Style/EvalWithLocation, Security/Eval, Lint/UnusedMethodArgument
38
- def evaluate_template(uuid, file)
39
- template = File.read(File.expand_path("../stubs/#{file}", __dir__))
40
- eval("\"#{template}\"")
41
- end
42
- # rubocop:enable Style/EvalWithLocation, Security/Eval, Lint/UnusedMethodArgument
43
-
44
- end
45
- end
46
- end
47
- end