aardi 2.0.2 → 2.1.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: aa1b2e25b4f21cc8961e9677c0e08b49490f8dc38f2c8c7f13095c748388b00d
4
- data.tar.gz: 8b5dcc3d043e7a320b3b35af8916ba0ce285aa0534ac2634d1595be67499d5b7
3
+ metadata.gz: c9340db9893eccb7d2baf3feec16d6f6a83b9cac636148e9d61bcdcb1985d35a
4
+ data.tar.gz: 60cbb069a0fe969cec7995bebea986ab2b746b41e540cf7c72a8fa2d427cf769
5
5
  SHA512:
6
- metadata.gz: dd3e5059afbe608673632bf68c254b532101a9709ad53da590dc096e687c042ea498121f8ce79ff6edb3ac59147dd6797814a02c80ecde77266e609c240e53ff
7
- data.tar.gz: 3c301c61ca4a8e5690be344e547a4fc859afa639cc172c06ab251941691b4b838675771ed4b5d76226c2589f3dba773fd50f75a05ced0ad2557d27a1715130e4
6
+ metadata.gz: 2ca27e334665f953031f784dd006fc91c9609d323ebd80f59d2336760450df87ffd5a5591fbf0bc06783e4df45db07d97b77c3d50540dca920208da713550ddf
7
+ data.tar.gz: ea187d4cc70feb39ae2b72aef0a3d66ccf641184c6eba393aa4fbfe236fb71824e27f528c58a0d18851f25ca233b1c959d48f62391b465742cf41ad89c358b59
@@ -20,6 +20,8 @@ module Aardi
20
20
 
21
21
  private
22
22
 
23
+ def base_title = Config[:site_title]
24
+
23
25
  def children
24
26
  []
25
27
  end
@@ -24,8 +24,6 @@ module Aardi
24
24
 
25
25
  private
26
26
 
27
- def base_title = Config[:site_title]
28
-
29
27
  def children
30
28
  @posts
31
29
  end
@@ -2,6 +2,8 @@
2
2
 
3
3
  module Aardi
4
4
  class ATOMFeed < AbstractFeed
5
+ FEED_FILE = 'index.xml'
6
+
5
7
  def content
6
8
  atom_feed = Nokogiri::XML::Builder.new(encoding: 'UTF-8') do
7
9
  feed('xmlns' => 'http://www.w3.org/2005/Atom') do |feed|
@@ -34,9 +36,7 @@ module Aardi
34
36
 
35
37
  private
36
38
 
37
- def feed_file
38
- 'index.xml'
39
- end
39
+ def feed_file = FEED_FILE
40
40
 
41
41
  # :reek:FeatureEnvy
42
42
  # :reek:TooManyStatements
data/lib/aardi/blog.rb CHANGED
@@ -1,36 +1,46 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Aardi
4
+ # :reek:TooManyInstanceVariables
4
5
  class Blog < AbstractBlog
5
6
  def initialize
6
7
  @posts = []
8
+ @draft_posts = []
7
9
  @blog_path = nil
8
10
  @archive_path = Config[:blog_archive_path]
9
11
  @tags = Tags.new
10
12
  end
11
13
 
12
14
  def <<(post)
15
+ return @draft_posts << post if post.draft?
16
+
13
17
  @posts << post
14
18
  archive << post
15
19
  @tags << post
16
20
  end
17
21
 
22
+ def report_drafts
23
+ report_posts @draft_posts
24
+ end
25
+
18
26
  def report_recent
19
- recent_posts(:blog_recent_posts).each(&:report_field_summary)
27
+ report_posts recent_posts(:blog_recent_posts)
20
28
  end
21
29
 
30
+ def tag_blogs = @tags.tag_blogs
31
+
22
32
  private
23
33
 
24
34
  def archive
25
35
  @archive ||= Archive.new(@archive_path, tag, @tags)
26
36
  end
27
37
 
28
- def atom_feed
29
- ATOMFeed.new(feed_posts, @blog_path, tag)
38
+ def children
39
+ [archive, home, feed(ATOMFeed), feed(JSONFeed), *@tags, *@draft_posts]
30
40
  end
31
41
 
32
- def children
33
- [archive, home, atom_feed, json_feed, *@tags]
42
+ def feed(feed_klass)
43
+ feed_klass.new(feed_posts, @blog_path, tag)
34
44
  end
35
45
 
36
46
  def feed_posts
@@ -41,14 +51,14 @@ module Aardi
41
51
  Home.new(recent_posts(:blog_home_posts), @archive_path, @blog_path, tag)
42
52
  end
43
53
 
44
- def json_feed
45
- JSONFeed.new(feed_posts, @blog_path, tag)
46
- end
47
-
48
54
  def recent_posts(conf_key)
49
55
  @posts.max_by(Config[conf_key], &:creation)
50
56
  end
51
57
 
58
+ def report_posts(posts)
59
+ posts.each(&:report_field_summary)
60
+ end
61
+
52
62
  def tag = nil
53
63
 
54
64
  def write_target = {}
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Aardi
4
+ class FeedMenu
5
+ def initialize(blog)
6
+ @blog = blog
7
+ end
8
+
9
+ def content
10
+ JSON.pretty_generate(menu_data)
11
+ end
12
+
13
+ def render
14
+ source = Content.new(content)
15
+ FileTarget.new(source, target_path).write
16
+ end
17
+
18
+ def target_path = './.well-known/feed-menu.json'
19
+
20
+ private
21
+
22
+ def items = [site_item, *tag_items]
23
+
24
+ def menu_data = { 'feed-menu' => site_title, 'items' => items }
25
+
26
+ def site_item
27
+ { 'feed-title' => site_title,
28
+ 'rss' => "/#{ATOMFeed::FEED_FILE}",
29
+ 'json' => "/#{JSONFeed::FEED_FILE}" }
30
+ end
31
+
32
+ def site_title = Config[:site_title]
33
+
34
+ def tag_items = @blog.tag_blogs.map(&:feed_menu_item)
35
+ end
36
+ end
@@ -15,7 +15,7 @@ module Aardi
15
15
  def archive_url = "#{base_url}/#{Config[:blog_archive_path]}/"
16
16
  def base_url = "#{Config[:site_url]}#{feed_base}"
17
17
  def feed_base = @blog_path ? "/#{@blog_path}" : ''
18
- def json_url = "#{base_url}/index.json"
19
- def rss_url = "#{base_url}/index.xml"
18
+ def json_url = "#{base_url}/#{JSONFeed::FEED_FILE}"
19
+ def rss_url = "#{base_url}/#{ATOMFeed::FEED_FILE}"
20
20
  end
21
21
  end
@@ -2,6 +2,8 @@
2
2
 
3
3
  module Aardi
4
4
  class JSONFeed < AbstractFeed
5
+ FEED_FILE = 'index.json'
6
+
5
7
  def content
6
8
  feed_content = { version: 'https://jsonfeed.org/version/1.1', title:,
7
9
  home_page_url: Config[:site_url], feed_url: }
@@ -12,9 +14,7 @@ module Aardi
12
14
 
13
15
  private
14
16
 
15
- def feed_file
16
- 'index.json'
17
- end
17
+ def feed_file = FEED_FILE
18
18
 
19
19
  def post_details(post)
20
20
  post_updated = post.updated
@@ -4,17 +4,20 @@ module Aardi
4
4
  class Metadata
5
5
  KNOWN_KEYS = %w[Title Description Creation Updated Tags HomePriority TagPriority Draft].freeze
6
6
 
7
+ attr_reader :tags
8
+
7
9
  def initialize(yaml_str = '', source = nil)
8
10
  yaml = YAML.safe_load(yaml_str, permitted_classes: [Time])
9
11
  @yaml = {}
10
12
  @yaml = yaml if yaml.is_a? Hash
13
+ @tags = @yaml['Tags']&.split&.sort
11
14
  confirm_keys(source)
12
15
  end
13
16
 
14
17
  def creation = @yaml['Creation']
15
18
  def description = @yaml['Description']
19
+ def draft? = @yaml.key?('Draft')
16
20
  def empty? = @yaml.empty?
17
- def tags = @yaml['Tags']&.split&.sort
18
21
  def title = @yaml['Title']
19
22
  def updated = @yaml['Updated']
20
23
 
data/lib/aardi/post.rb CHANGED
@@ -16,6 +16,7 @@ module Aardi
16
16
  end
17
17
 
18
18
  def creation = metadata.creation
19
+ def draft? = metadata.draft?
19
20
 
20
21
  def feed_snippet
21
22
  @feed_snippet ||= Aardi.renderer.markup_feed_snippet(@src_content)
data/lib/aardi/site.rb CHANGED
@@ -19,7 +19,7 @@ module Aardi
19
19
  private
20
20
 
21
21
  def children
22
- [Folder.new('.'), blog, Aardi.renderer.sitemap]
22
+ [Folder.new('.'), blog, Aardi.renderer.sitemap, FeedMenu.new(blog)]
23
23
  end
24
24
 
25
25
  def post_paths
@@ -19,6 +19,12 @@ module Aardi
19
19
  @posts.count
20
20
  end
21
21
 
22
+ def feed_menu_item
23
+ { 'feed-title' => title,
24
+ 'rss' => "/#{@blog_path}/#{ATOMFeed::FEED_FILE}",
25
+ 'json' => "/#{@blog_path}/#{JSONFeed::FEED_FILE}" }
26
+ end
27
+
22
28
  def index_line
23
29
  "- #{inline_link_text}"
24
30
  end
@@ -36,7 +42,7 @@ module Aardi
36
42
  attr_reader :tag
37
43
 
38
44
  def children
39
- [archive, home, atom_feed, json_feed]
45
+ [archive, home, feed(ATOMFeed), feed(JSONFeed)]
40
46
  end
41
47
  end
42
48
  end
data/lib/aardi/tags.rb CHANGED
@@ -24,6 +24,8 @@ module Aardi
24
24
  counts.map { |_tag, tag_blog| tag_blog.inline_link_text }.join(', ')
25
25
  end
26
26
 
27
+ def tag_blogs = @index.values
28
+
27
29
  def target_path
28
30
  "./#{tags_base_path}/index.html"
29
31
  end
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ desc('View draft posts')
4
+ task drafts: [:load_config] do
5
+ Aardi::Site.new.blog.report_drafts
6
+ end
data/lib/aardi/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Aardi
4
- VERSION = '2.0.2'
4
+ VERSION = '2.1.0'
5
5
  end
data/lib/aardi.rb CHANGED
@@ -41,6 +41,7 @@
41
41
  json_feed
42
42
  blog
43
43
  tag_blog
44
+ feed_menu
44
45
  folder
45
46
  sitemap
46
47
  orphanage
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aardi
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.2
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Faisal N Jawdat
@@ -97,6 +97,7 @@ files:
97
97
  - lib/aardi/custom_renderer.rb
98
98
  - lib/aardi/day.rb
99
99
  - lib/aardi/errors.rb
100
+ - lib/aardi/feed_menu.rb
100
101
  - lib/aardi/file_target.rb
101
102
  - lib/aardi/folder.rb
102
103
  - lib/aardi/home.rb
@@ -118,6 +119,7 @@ files:
118
119
  - lib/aardi/tag_blog.rb
119
120
  - lib/aardi/tags.rb
120
121
  - lib/aardi/tasks.rb
122
+ - lib/aardi/tasks/drafts.rake
121
123
  - lib/aardi/tasks/fixtimes.rake
122
124
  - lib/aardi/tasks/homepage.rake
123
125
  - lib/aardi/tasks/init.rake
@@ -154,7 +156,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
154
156
  - !ruby/object:Gem::Version
155
157
  version: '0'
156
158
  requirements: []
157
- rubygems_version: 4.0.14
159
+ rubygems_version: 4.0.18
158
160
  specification_version: 4
159
161
  summary: A static site generator.
160
162
  test_files: []