custom_update_tags 0.0.2 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/update_tags.rb +113 -0
  3. metadata +3 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 32f053aa25f5ddc1515844fd8ce32e18614fb98f8d0b01d310863df62bb484e2
4
- data.tar.gz: 3c2a39f341501ee10d38b4ffd7fe123bf6df34081603dde3dc6e69d0fe506fa5
3
+ metadata.gz: 70e77614144410bf91032cb70c0641c8fedda610884b16133db5b875b2f387e3
4
+ data.tar.gz: d31420e41d26be114d7984e36d3a70ca3c18b427634abd78af87359625c38db2
5
5
  SHA512:
6
- metadata.gz: 53b8618e1fcee1d7c497495f6b22b53f219d61e2f9f9776f4f0c6af59e393efcc37d07e3a72d7b4dd587d5a4567694b1f95ae8197cd55fa3f014dbc994192842
7
- data.tar.gz: 2d0a735231be567a84fba8a57b195cb9dfbac0cf11d12992d44c2a8ace3275a318776c04b2dd25dda64aa6680cde0de18edae8d5716cfb577264a4741b08d0f9
6
+ metadata.gz: 7dabd07910a1fd857c300b01ae2f97297eeb397e9d884a19263815a6c1f7da0c2591937076d81106fba4ce257510864e251b7777fbe3aa8435c4313336808fbf
7
+ data.tar.gz: '09cd340388a20b52040c6c3572a890e949e0a680a82055a5594e9429fe3b9aa29d67696a056b93543baf1f1af35e8e6dfce2136fa2ebea80d0fe83e19fbed392'
@@ -0,0 +1,113 @@
1
+ require "front_matter_parser"
2
+ require "fileutils"
3
+
4
+ class UpdateTags
5
+ def self.update(tag_directory:, path_to_tag_index_page_template:)
6
+ new(tag_directory, path_to_tag_index_page_template).update
7
+ end
8
+
9
+ attr_reader :tag_directory, :path_to_tag_index_page_template
10
+
11
+ def initialize(tag_directory, path_to_tag_index_page_template)
12
+ @tag_directory = tag_directory
13
+ @path_to_tag_index_page_template = path_to_tag_index_page_template
14
+ end
15
+
16
+ def update
17
+ print "Updating tags..."
18
+ delete_tag_pages
19
+ create_tag_pages
20
+ print " Done.\n"
21
+ end
22
+
23
+ private
24
+
25
+ def delete_tag_pages
26
+ FileUtils.rm_rf(tag_directory)
27
+ end
28
+
29
+ def create_tag_pages
30
+ FileUtils.mkdir(tag_directory)
31
+
32
+ tags.each do |tag|
33
+ File.write(
34
+ tag_index_page_path(tag),
35
+ tag_index_page_source(tag),
36
+ )
37
+ end
38
+ end
39
+
40
+ def blog_post_filenames
41
+ directories = ["./_posts", "./_building", "./_writing", "./_notes"]
42
+ @blog_post_filenames ||= directories.inject([]) do |acc, directory|
43
+ entries = Dir.entries(directory) - [".", ".."]
44
+ entries = entries.map { |entry| "#{directory}/#{entry}" } # Prepend the directory path
45
+ acc + entries
46
+ end
47
+ end
48
+
49
+
50
+ def tags
51
+ @tags ||= blog_post_filenames.inject([]) do |tags, blog_post_filename|
52
+ tags += FrontMatterParser::Parser
53
+ .parse_file(blog_post_file(blog_post_filename))
54
+ .front_matter["tags"]
55
+ end.uniq
56
+ end
57
+
58
+ def blog_post_file(blog_post_filename)
59
+ blog_post_filename
60
+ end
61
+
62
+ def tag_index_page_path(tag)
63
+ "#{tag_directory}/#{url_friendly_tag(tag)}.md"
64
+ end
65
+
66
+ def url_friendly_tag(tag)
67
+ tag.downcase.split(" ").join("-")
68
+ end
69
+
70
+ def tag_index_page_front_matter_parser
71
+ @tag_index_page_front_matter_parser ||= FrontMatterParser::Parser
72
+ .parse_file(path_to_tag_index_page_template)
73
+ end
74
+
75
+ def tag_index_page_front_matter
76
+ @tag_index_page_front_matter ||= \
77
+ tag_index_page_front_matter_parser.front_matter.map do |key, value|
78
+ "#{key}: #{value}"
79
+ end.join("\n")
80
+ end
81
+
82
+ def tag_index_page_content
83
+ @tag_index_page_content ||= tag_index_page_front_matter_parser.content
84
+ end
85
+
86
+ def injected_liquid_for_tag_index_page(tag)
87
+ <<~INJECTED_LIQUID
88
+ {% assign tag = "#{tag}" %}
89
+ {% assign tagged_posts = "" | split: "" %}
90
+ {% assign collections = 'posts,building,writing,notes,misc' | split: ',' %}
91
+
92
+ {% for collection_name in collections %}
93
+ {% assign current_collection = site[collections] %}
94
+ {% for post in current_collection %}
95
+ {% if post.tags contains tag %}
96
+ {% assign tagged_posts = tagged_posts | push: post %}
97
+ {% endif %}
98
+ {% endfor %}
99
+ INJECTED_LIQUID
100
+ end
101
+
102
+ def tag_index_page_source(tag)
103
+ <<~TAG_INDEX_PAGE
104
+ ---
105
+ #{tag_index_page_front_matter}
106
+ ---
107
+
108
+ #{injected_liquid_for_tag_index_page(tag)}
109
+
110
+ #{tag_index_page_content}
111
+ TAG_INDEX_PAGE
112
+ end
113
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: custom_update_tags
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nick Pachulski
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2024-04-09 00:00:00.000000000 Z
12
+ date: 2024-04-10 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: thor
@@ -77,6 +77,7 @@ extensions: []
77
77
  extra_rdoc_files: []
78
78
  files:
79
79
  - bin/update_tags
80
+ - lib/update_tags.rb
80
81
  homepage: https://github.com/pachun/update_tags
81
82
  licenses:
82
83
  - MIT