aardi 0.9.1 → 1.0.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 +4 -4
- data/lib/aardi/abstract_page_support.rb +2 -2
- data/lib/aardi/archive.rb +1 -1
- data/lib/aardi/atom_feed.rb +10 -8
- data/lib/aardi/config.rb +7 -2
- data/lib/aardi/content_hashes.rb +3 -3
- data/lib/aardi/custom_renderer.rb +2 -2
- data/lib/aardi/day.rb +3 -3
- data/lib/aardi/file_target.rb +1 -1
- data/lib/aardi/folder.rb +4 -4
- data/lib/aardi/home.rb +4 -4
- data/lib/aardi/json_feed.rb +6 -6
- data/lib/aardi/month.rb +3 -3
- data/lib/aardi/orphanage.rb +3 -3
- data/lib/aardi/page.rb +1 -1
- data/lib/aardi/path_servlet.rb +2 -2
- data/lib/aardi/post.rb +7 -6
- data/lib/aardi/site.rb +5 -6
- data/lib/aardi/sitemap.rb +4 -4
- data/lib/aardi/tasks/fixtimes.rake +2 -2
- data/lib/aardi/tasks/homepage.rake +1 -1
- data/lib/aardi/tasks/init.rake +28 -23
- data/lib/aardi/tasks/load_config.rake +1 -1
- data/lib/aardi/tasks/new.rake +1 -1
- data/lib/aardi/tasks/now.rake +1 -1
- data/lib/aardi/tasks/recent.rake +1 -1
- data/lib/aardi/tasks/render.rake +1 -1
- data/lib/aardi/tasks/server.rake +5 -5
- data/lib/aardi/tasks.rb +2 -2
- data/lib/aardi/template.rb +4 -4
- data/lib/aardi/timekeeper.rb +1 -1
- data/lib/aardi/version.rb +1 -1
- data/lib/aardi.rb +36 -36
- metadata +9 -130
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: d7be17f66c6135658a1a7e9bcd7cf85e0ea7a1e0b73894377bc97466ca305327
|
|
4
|
+
data.tar.gz: 4a2a44e5426dbf7be491b02e5ebf4fa15feeb1213229d0de6170f5e6efe329fc
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 3abf73d04d38a2ec22d0e9667b91d45b7f55c06a5835f629d82bf531738f8756af7ded38cfd917d212caefc0527081b3f4846ffe5cefba8f044c6f7b7797d58b
|
|
7
|
+
data.tar.gz: e3e33868803f8adcfae3c59439f207b8664badbdad53489fc06bf0419598e581201ffbaaa36d6d05f5c27b3fef0c9eb51b31aada42ed6f0f9e6923977e27e0b6
|
|
@@ -5,7 +5,7 @@ module Aardi
|
|
|
5
5
|
attr_reader :metadata, :mtime
|
|
6
6
|
|
|
7
7
|
def parse_source(path)
|
|
8
|
-
File.open(path, encoding:
|
|
8
|
+
File.open(path, encoding: 'utf-8') do |file|
|
|
9
9
|
parts = file.read.rpartition("\n----\n")
|
|
10
10
|
@metadata = YAML.safe_load(parts.first, permitted_classes: [Time]) || {}
|
|
11
11
|
@src_content = parts.last
|
|
@@ -14,7 +14,7 @@ module Aardi
|
|
|
14
14
|
end
|
|
15
15
|
|
|
16
16
|
def title
|
|
17
|
-
metadata[
|
|
17
|
+
metadata['Title'] || @src_content.split("\n").first.sub(/^#+ /, '')
|
|
18
18
|
end
|
|
19
19
|
end
|
|
20
20
|
end
|
data/lib/aardi/archive.rb
CHANGED
data/lib/aardi/atom_feed.rb
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
module Aardi
|
|
4
4
|
class ATOMFeed < AbstractFeed
|
|
5
5
|
def content
|
|
6
|
-
atom_feed = Nokogiri::XML::Builder.new(encoding:
|
|
7
|
-
feed(
|
|
6
|
+
atom_feed = Nokogiri::XML::Builder.new(encoding: 'UTF-8') do
|
|
7
|
+
feed('xmlns' => 'http://www.w3.org/2005/Atom') do |feed|
|
|
8
8
|
feed_details(feed)
|
|
9
9
|
end
|
|
10
10
|
end
|
|
@@ -13,6 +13,7 @@ module Aardi
|
|
|
13
13
|
end
|
|
14
14
|
|
|
15
15
|
# :reek:TooManyStatements
|
|
16
|
+
# rubocop:disable Metrics/MethodLength
|
|
16
17
|
def feed_details(feed)
|
|
17
18
|
aardi_config = Aardi.config
|
|
18
19
|
|
|
@@ -20,8 +21,8 @@ module Aardi
|
|
|
20
21
|
name(aardi_config[:site_author])
|
|
21
22
|
end
|
|
22
23
|
|
|
23
|
-
subnodes = {id: feed_url, link: {href: feed_url, rel:
|
|
24
|
-
|
|
24
|
+
subnodes = { id: feed_url, link: { href: feed_url, rel: 'self' },
|
|
25
|
+
title: aardi_config[:site_title], updated: updated.iso8601 }
|
|
25
26
|
|
|
26
27
|
subnodes.each do |node, value|
|
|
27
28
|
feed.public_send node, value
|
|
@@ -31,11 +32,12 @@ module Aardi
|
|
|
31
32
|
post_details(post, feed)
|
|
32
33
|
end
|
|
33
34
|
end
|
|
35
|
+
# rubocop:enable Metrics/MethodLength
|
|
34
36
|
|
|
35
37
|
private
|
|
36
38
|
|
|
37
39
|
def feed_file
|
|
38
|
-
|
|
40
|
+
'index.xml'
|
|
39
41
|
end
|
|
40
42
|
|
|
41
43
|
# :reek:FeatureEnvy
|
|
@@ -45,10 +47,10 @@ module Aardi
|
|
|
45
47
|
post_url = post.url
|
|
46
48
|
|
|
47
49
|
# For safety, must use content_ and not content:
|
|
48
|
-
content_(post.feed_snippet).type =
|
|
50
|
+
content_(post.feed_snippet).type = 'html'
|
|
49
51
|
|
|
50
|
-
subnodes = {id: post_url, link: {href: post_url}, title: post.title,
|
|
51
|
-
|
|
52
|
+
subnodes = { id: post_url, link: { href: post_url }, title: post.title,
|
|
53
|
+
published: post.creation.iso8601, updated: post.updated.iso8601 }
|
|
52
54
|
subnodes.each do |node, value|
|
|
53
55
|
feed.public_send node, value
|
|
54
56
|
end
|
data/lib/aardi/config.rb
CHANGED
|
@@ -8,9 +8,14 @@ module Aardi
|
|
|
8
8
|
|
|
9
9
|
def [](key) = @data[key]
|
|
10
10
|
|
|
11
|
-
# :reek:TooManyStatements
|
|
12
11
|
def load(path)
|
|
13
|
-
|
|
12
|
+
config_yaml = File.read path
|
|
13
|
+
prepare config_yaml
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# :reek:TooManyStatements
|
|
17
|
+
def prepare(config_yaml)
|
|
18
|
+
config_hash = YAML.safe_load config_yaml
|
|
14
19
|
config_hash.transform_keys!(&:to_sym)
|
|
15
20
|
config_hash[:markup_options]&.transform_keys!(&:to_sym)
|
|
16
21
|
@data.merge!(config_hash)
|
data/lib/aardi/content_hashes.rb
CHANGED
|
@@ -25,13 +25,13 @@ module Aardi
|
|
|
25
25
|
private
|
|
26
26
|
|
|
27
27
|
def new_hashes
|
|
28
|
-
@new_hashes ||= @hashes.sort.map
|
|
28
|
+
@new_hashes ||= @hashes.sort.map { |path, hash| "#{path}: #{hash}\n" }.join
|
|
29
29
|
end
|
|
30
30
|
|
|
31
31
|
def read_hashes
|
|
32
|
-
@original_hashes = File.exist?(@path) ? File.read(@path) :
|
|
32
|
+
@original_hashes = File.exist?(@path) ? File.read(@path) : ''
|
|
33
33
|
@hashes = @original_hashes.split("\n").to_h do |line|
|
|
34
|
-
path, hash = line.split(
|
|
34
|
+
path, hash = line.split(':', 2)
|
|
35
35
|
[path.strip, hash.to_i]
|
|
36
36
|
end
|
|
37
37
|
end
|
|
@@ -7,7 +7,7 @@ module Aardi
|
|
|
7
7
|
HEADER_SQUEEZE = /&#.*?;|"|[^a-z0-9\-_]/
|
|
8
8
|
|
|
9
9
|
def header(text, header_level)
|
|
10
|
-
squeezed_text = text.squeeze(
|
|
10
|
+
squeezed_text = text.squeeze(' ')
|
|
11
11
|
id = header_id(text)
|
|
12
12
|
"<h#{header_level} id=\"#{id}\">#{squeezed_text}</h#{header_level}>"
|
|
13
13
|
end
|
|
@@ -33,7 +33,7 @@ module Aardi
|
|
|
33
33
|
end
|
|
34
34
|
|
|
35
35
|
def header_stub_id(text)
|
|
36
|
-
text.downcase.strip.tr(
|
|
36
|
+
text.downcase.strip.tr(' ', '-').gsub(HEADER_SQUEEZE, '').squeeze('-')
|
|
37
37
|
end
|
|
38
38
|
|
|
39
39
|
def ids
|
data/lib/aardi/day.rb
CHANGED
|
@@ -18,7 +18,7 @@ module Aardi
|
|
|
18
18
|
def content
|
|
19
19
|
@content ||= begin
|
|
20
20
|
sorted_posts = @posts.sort_by(&:creation)
|
|
21
|
-
posts_content = sorted_posts.reverse
|
|
21
|
+
posts_content = sorted_posts.reverse.map(&:content)
|
|
22
22
|
"# #{title}\n#{posts_content.join}"
|
|
23
23
|
end
|
|
24
24
|
end
|
|
@@ -29,7 +29,7 @@ module Aardi
|
|
|
29
29
|
"./#{@archive_path}/#{@year}/#{@month}/#{self}/index.html"
|
|
30
30
|
end
|
|
31
31
|
|
|
32
|
-
def title = date.strftime(
|
|
32
|
+
def title = date.strftime('%A, %-e %B %Y')
|
|
33
33
|
|
|
34
34
|
private
|
|
35
35
|
|
|
@@ -39,6 +39,6 @@ module Aardi
|
|
|
39
39
|
|
|
40
40
|
def date = Date.new(@year.key, @month.key, @key)
|
|
41
41
|
|
|
42
|
-
def to_s = @key.to_s.rjust(2,
|
|
42
|
+
def to_s = @key.to_s.rjust(2, '0')
|
|
43
43
|
end
|
|
44
44
|
end
|
data/lib/aardi/file_target.rb
CHANGED
data/lib/aardi/folder.rb
CHANGED
|
@@ -4,10 +4,10 @@ module Aardi
|
|
|
4
4
|
class Folder
|
|
5
5
|
def initialize(path)
|
|
6
6
|
@path = path
|
|
7
|
-
@normalized_path = "#{path.sub(/^\./,
|
|
7
|
+
@normalized_path = "#{path.sub(/^\./, '')}/"
|
|
8
8
|
end
|
|
9
9
|
|
|
10
|
-
def mtime = children.max_by(&:mtime)
|
|
10
|
+
def mtime = children.max_by(&:mtime)&.mtime
|
|
11
11
|
|
|
12
12
|
def render
|
|
13
13
|
children.each(&:render)
|
|
@@ -30,12 +30,12 @@ module Aardi
|
|
|
30
30
|
end
|
|
31
31
|
|
|
32
32
|
def sources
|
|
33
|
-
@sources ||= paths.filter_map { |path| Page.new(path) if path.end_with?(
|
|
33
|
+
@sources ||= paths.filter_map { |path| Page.new(path) if path.end_with?('.md') }
|
|
34
34
|
end
|
|
35
35
|
|
|
36
36
|
def update_sitemap
|
|
37
37
|
# '.' is the top level so skip it since the homepage will register itself
|
|
38
|
-
Aardi.ledger[:sitemap].update_mtime(@normalized_path, mtime) unless @path ==
|
|
38
|
+
Aardi.ledger[:sitemap].update_mtime(@normalized_path, mtime) unless @path == '.'
|
|
39
39
|
end
|
|
40
40
|
end
|
|
41
41
|
end
|
data/lib/aardi/home.rb
CHANGED
|
@@ -12,11 +12,11 @@ module Aardi
|
|
|
12
12
|
end
|
|
13
13
|
|
|
14
14
|
def render
|
|
15
|
-
Aardi.ledger[:sitemap].update_mtime(
|
|
15
|
+
Aardi.ledger[:sitemap].update_mtime('/', mtime)
|
|
16
16
|
write_target
|
|
17
17
|
end
|
|
18
18
|
|
|
19
|
-
def target_path =
|
|
19
|
+
def target_path = './index.html'
|
|
20
20
|
|
|
21
21
|
def title = Aardi.config[:blog_home_title]
|
|
22
22
|
|
|
@@ -35,11 +35,11 @@ module Aardi
|
|
|
35
35
|
end
|
|
36
36
|
|
|
37
37
|
def days_hash
|
|
38
|
-
@days_hash ||= @posts.group_by { |post| post.creation.strftime(
|
|
38
|
+
@days_hash ||= @posts.group_by { |post| post.creation.strftime('%Y-%m-%d') }
|
|
39
39
|
end
|
|
40
40
|
|
|
41
41
|
def post_day_content(post_day)
|
|
42
|
-
date_header = post_day.first.creation.strftime(
|
|
42
|
+
date_header = post_day.first.creation.strftime('%A, %e %B %Y')
|
|
43
43
|
posts_content = post_day.map(&:content).join
|
|
44
44
|
"## #{date_header}\n#{posts_content}"
|
|
45
45
|
end
|
data/lib/aardi/json_feed.rb
CHANGED
|
@@ -4,8 +4,8 @@ module Aardi
|
|
|
4
4
|
class JSONFeed < AbstractFeed
|
|
5
5
|
def content
|
|
6
6
|
aardi_config = Aardi.config
|
|
7
|
-
feed_content = {version:
|
|
8
|
-
|
|
7
|
+
feed_content = { version: 'https://jsonfeed.org/version/1.1', title: aardi_config[:site_title],
|
|
8
|
+
home_page_url: aardi_config[:site_url], feed_url: }
|
|
9
9
|
feed_content[:items] = @posts.map { |post| post_details(post) }
|
|
10
10
|
|
|
11
11
|
JSON.pretty_generate(feed_content)
|
|
@@ -14,19 +14,19 @@ module Aardi
|
|
|
14
14
|
private
|
|
15
15
|
|
|
16
16
|
def feed_file
|
|
17
|
-
|
|
17
|
+
'index.json'
|
|
18
18
|
end
|
|
19
19
|
|
|
20
20
|
def post_details(post)
|
|
21
21
|
post_updated = post.updated
|
|
22
22
|
post_creation = post.creation
|
|
23
23
|
|
|
24
|
-
details = {id: post.name, url: post.url, title: post.title,
|
|
25
|
-
|
|
24
|
+
details = { id: post.name, url: post.url, title: post.title,
|
|
25
|
+
date_published: post_creation.iso8601, content_html: post.feed_snippet }
|
|
26
26
|
|
|
27
27
|
details[:date_modified] = post_updated.iso8601 unless post_creation == post_updated
|
|
28
28
|
|
|
29
|
-
details
|
|
29
|
+
details
|
|
30
30
|
end
|
|
31
31
|
end
|
|
32
32
|
end
|
data/lib/aardi/month.rb
CHANGED
|
@@ -14,7 +14,7 @@ module Aardi
|
|
|
14
14
|
end
|
|
15
15
|
|
|
16
16
|
def archive_cell(month_fmt)
|
|
17
|
-
cell = count.zero? ?
|
|
17
|
+
cell = count.zero? ? '' : format(month_fmt, count:, archive_path: @archive_path, year: @year, month: self)
|
|
18
18
|
"#{cell} |"
|
|
19
19
|
end
|
|
20
20
|
|
|
@@ -31,9 +31,9 @@ module Aardi
|
|
|
31
31
|
"./#{@archive_path}/#{@year}/#{self}/index.html"
|
|
32
32
|
end
|
|
33
33
|
|
|
34
|
-
def title = Date.new(@year.key, @key).strftime(
|
|
34
|
+
def title = Date.new(@year.key, @key).strftime('%B %Y')
|
|
35
35
|
|
|
36
|
-
def to_s = @key.to_s.rjust(2,
|
|
36
|
+
def to_s = @key.to_s.rjust(2, '0')
|
|
37
37
|
|
|
38
38
|
private
|
|
39
39
|
|
data/lib/aardi/orphanage.rb
CHANGED
|
@@ -2,14 +2,14 @@
|
|
|
2
2
|
|
|
3
3
|
module Aardi
|
|
4
4
|
class Orphanage
|
|
5
|
-
def
|
|
6
|
-
Aardi.ledger[:html_files].each { |path|
|
|
5
|
+
def report
|
|
6
|
+
Aardi.ledger[:html_files].each { |path| warn("Orphan: #{path}") unless ignored?(path) }
|
|
7
7
|
end
|
|
8
8
|
|
|
9
9
|
private
|
|
10
10
|
|
|
11
11
|
def ignored?(path)
|
|
12
|
-
Aardi.config[:ignore_orphans].any? { |prefix| path.start_with?(prefix) }
|
|
12
|
+
Array(Aardi.config[:ignore_orphans]).any? { |prefix| path.start_with?(prefix) }
|
|
13
13
|
end
|
|
14
14
|
end
|
|
15
15
|
end
|
data/lib/aardi/page.rb
CHANGED
data/lib/aardi/path_servlet.rb
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require
|
|
3
|
+
require 'webrick'
|
|
4
4
|
|
|
5
5
|
module Aardi
|
|
6
6
|
class PathServlet < WEBrick::HTTPServlet::AbstractServlet
|
|
7
7
|
def service(req, res)
|
|
8
8
|
# use index if folder
|
|
9
|
-
path = "./#{req.path}".sub(%r{/$},
|
|
9
|
+
path = "./#{req.path}".sub(%r{/$}, '/index.html')
|
|
10
10
|
|
|
11
11
|
file = path if File.exist?(path)
|
|
12
12
|
file ||= "#{path}.html" if File.exist?("#{path}.html")
|
data/lib/aardi/post.rb
CHANGED
|
@@ -7,27 +7,28 @@ module Aardi
|
|
|
7
7
|
def initialize(path)
|
|
8
8
|
@path = path
|
|
9
9
|
parse_source path
|
|
10
|
+
raise "#{path}: missing Creation metadata" unless metadata['Creation']
|
|
10
11
|
end
|
|
11
12
|
|
|
12
13
|
def content
|
|
13
14
|
"#{@src_content}\n<div><span class=\"bookmark\">[<a href=\"#{url}\">bookmark</a>]</span></div>\n"
|
|
14
15
|
end
|
|
15
16
|
|
|
16
|
-
def creation = metadata[
|
|
17
|
+
def creation = metadata['Creation']
|
|
17
18
|
|
|
18
19
|
def day = creation.day
|
|
19
20
|
|
|
20
21
|
def feed_snippet
|
|
21
|
-
clean_content = @src_content.sub(/\A(### .*\n)?\n+/,
|
|
22
|
+
clean_content = @src_content.sub(/\A(### .*\n)?\n+/, '')
|
|
22
23
|
render_markup(clean_content).strip
|
|
23
24
|
end
|
|
24
25
|
|
|
25
26
|
def month = creation.month
|
|
26
27
|
|
|
27
|
-
def name = File.basename(@path,
|
|
28
|
+
def name = File.basename(@path, '.*')
|
|
28
29
|
|
|
29
30
|
def report_field_summary
|
|
30
|
-
creation_header = creation.strftime(
|
|
31
|
+
creation_header = creation.strftime('%e %b %Y')
|
|
31
32
|
puts "#{creation_header} | #{@path} | #{title}"
|
|
32
33
|
end
|
|
33
34
|
|
|
@@ -35,7 +36,7 @@ module Aardi
|
|
|
35
36
|
"./#{short_target}.html"
|
|
36
37
|
end
|
|
37
38
|
|
|
38
|
-
def updated = metadata[
|
|
39
|
+
def updated = metadata['Updated'] || creation
|
|
39
40
|
|
|
40
41
|
def url = "#{Aardi.config[:site_url]}/#{short_target}"
|
|
41
42
|
|
|
@@ -50,7 +51,7 @@ module Aardi
|
|
|
50
51
|
end
|
|
51
52
|
|
|
52
53
|
def short_target
|
|
53
|
-
"#{Aardi.config[:blog_archive_path]}/#{creation.strftime(
|
|
54
|
+
"#{Aardi.config[:blog_archive_path]}/#{creation.strftime('%Y/%m/%d')}/#{name}"
|
|
54
55
|
end
|
|
55
56
|
end
|
|
56
57
|
end
|
data/lib/aardi/site.rb
CHANGED
|
@@ -21,7 +21,7 @@ module Aardi
|
|
|
21
21
|
private
|
|
22
22
|
|
|
23
23
|
def children
|
|
24
|
-
[Folder.new(
|
|
24
|
+
[Folder.new('.'), blog, sitemap]
|
|
25
25
|
end
|
|
26
26
|
|
|
27
27
|
def content_hashes
|
|
@@ -33,7 +33,7 @@ module Aardi
|
|
|
33
33
|
end
|
|
34
34
|
|
|
35
35
|
def html_files
|
|
36
|
-
@html_files ||= Dir.glob(
|
|
36
|
+
@html_files ||= Dir.glob('./**/*.html').to_set
|
|
37
37
|
end
|
|
38
38
|
|
|
39
39
|
def initialize_ledger
|
|
@@ -41,7 +41,7 @@ module Aardi
|
|
|
41
41
|
# set up content hashes so they're in place while building out the rest
|
|
42
42
|
ledger[:content_hashes] = content_hashes
|
|
43
43
|
|
|
44
|
-
{custom_renderer:, markdown_renderer:, html_files:, sitemap:, template:}.each do |message, value|
|
|
44
|
+
{ custom_renderer:, markdown_renderer:, html_files:, sitemap:, template: }.each do |message, value|
|
|
45
45
|
ledger[message] = value
|
|
46
46
|
end
|
|
47
47
|
end
|
|
@@ -59,10 +59,9 @@ module Aardi
|
|
|
59
59
|
end
|
|
60
60
|
|
|
61
61
|
def warn_about_orphans
|
|
62
|
-
Orphanage.new.
|
|
62
|
+
Orphanage.new.report
|
|
63
63
|
end
|
|
64
64
|
|
|
65
|
-
def write_target
|
|
66
|
-
end
|
|
65
|
+
def write_target; end
|
|
67
66
|
end
|
|
68
67
|
end
|
data/lib/aardi/sitemap.rb
CHANGED
|
@@ -4,8 +4,8 @@ module Aardi
|
|
|
4
4
|
class Sitemap
|
|
5
5
|
# :reek:NestedIterators
|
|
6
6
|
def content
|
|
7
|
-
sitemap = Nokogiri::XML::Builder.new(encoding:
|
|
8
|
-
urlset(xmlns:
|
|
7
|
+
sitemap = Nokogiri::XML::Builder.new(encoding: 'UTF-8') do
|
|
8
|
+
urlset(xmlns: 'http://www.sitemaps.org/schemas/sitemap/0.9') do |urlset|
|
|
9
9
|
urls.each do |path, details|
|
|
10
10
|
url_details(path, details, urlset)
|
|
11
11
|
end
|
|
@@ -20,7 +20,7 @@ module Aardi
|
|
|
20
20
|
FileTarget.new(source, target_path).write
|
|
21
21
|
end
|
|
22
22
|
|
|
23
|
-
def target_path =
|
|
23
|
+
def target_path = './sitemap.xml'
|
|
24
24
|
|
|
25
25
|
def update_mtime(path, path_mtime)
|
|
26
26
|
urls[path][:lastmod] = path_mtime.iso8601
|
|
@@ -50,7 +50,7 @@ module Aardi
|
|
|
50
50
|
end
|
|
51
51
|
|
|
52
52
|
def url_values(path, changefreq)
|
|
53
|
-
{loc: "#{Aardi.config[:site_url]}#{path}", changefreq:}
|
|
53
|
+
{ loc: "#{Aardi.config[:site_url]}#{path}", changefreq: }
|
|
54
54
|
end
|
|
55
55
|
end
|
|
56
56
|
end
|
data/lib/aardi/tasks/init.rake
CHANGED
|
@@ -1,34 +1,39 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
INIT_FILES_DIR = File.expand_path(
|
|
3
|
+
INIT_FILES_DIR = File.expand_path('../init_files', __dir__)
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
dest = File.basename(src)
|
|
5
|
+
unless defined?(InitTask)
|
|
6
|
+
module InitTask
|
|
7
|
+
def self.install_file(src)
|
|
8
|
+
dest = File.basename(src)
|
|
11
9
|
|
|
12
|
-
|
|
13
|
-
FileUtils.cp(src, dest)
|
|
14
|
-
puts "Created #{dest}"
|
|
15
|
-
next
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
loop do
|
|
19
|
-
print "#{dest} already exists. Overwrite? [y]es / [n]o: "
|
|
20
|
-
answer = $stdin.gets&.strip&.downcase
|
|
21
|
-
case answer
|
|
22
|
-
when "y"
|
|
10
|
+
if !File.exist?(dest) || prompt_overwrite?(dest)
|
|
23
11
|
FileUtils.cp(src, dest)
|
|
24
|
-
puts "
|
|
25
|
-
|
|
26
|
-
when "n"
|
|
12
|
+
puts "Wrote #{dest}"
|
|
13
|
+
else
|
|
27
14
|
puts "Skipped #{dest}"
|
|
28
|
-
break
|
|
29
15
|
end
|
|
30
16
|
end
|
|
17
|
+
|
|
18
|
+
def self.prompt_overwrite?(filename)
|
|
19
|
+
loop do
|
|
20
|
+
print "#{filename} already exists. Overwrite? [y]es / [n]o: "
|
|
21
|
+
case $stdin.gets&.strip&.downcase
|
|
22
|
+
when 'y' then return true
|
|
23
|
+
when 'n' then return false
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
desc('Scaffold a new Aardi site')
|
|
31
|
+
task :init do
|
|
32
|
+
Dir.glob("#{INIT_FILES_DIR}/**/*", File::FNM_DOTMATCH).each do |src|
|
|
33
|
+
next if File.directory?(src)
|
|
34
|
+
|
|
35
|
+
InitTask.install_file(src)
|
|
31
36
|
end
|
|
32
37
|
|
|
33
|
-
puts
|
|
38
|
+
puts 'Site scaffolding installed.'
|
|
34
39
|
end
|
data/lib/aardi/tasks/new.rake
CHANGED
data/lib/aardi/tasks/now.rake
CHANGED
data/lib/aardi/tasks/recent.rake
CHANGED
data/lib/aardi/tasks/render.rake
CHANGED
data/lib/aardi/tasks/server.rake
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
desc(
|
|
3
|
+
desc('Run a server')
|
|
4
4
|
task :server do
|
|
5
|
-
require
|
|
5
|
+
require 'aardi/path_servlet'
|
|
6
6
|
|
|
7
7
|
port = 8000
|
|
8
8
|
url = "http://localhost:#{port}/"
|
|
9
|
-
root =
|
|
9
|
+
root = '.'
|
|
10
10
|
puts(url)
|
|
11
11
|
|
|
12
12
|
server = WEBrick::HTTPServer.new(Port: port, DocumentRoot: root)
|
|
13
|
-
server.mount(
|
|
13
|
+
server.mount('/', Aardi::PathServlet)
|
|
14
14
|
|
|
15
|
-
trap(
|
|
15
|
+
trap('INT') { server.shutdown }
|
|
16
16
|
system("(open '#{url}')&")
|
|
17
17
|
server.start
|
|
18
18
|
end
|
data/lib/aardi/tasks.rb
CHANGED
data/lib/aardi/template.rb
CHANGED
|
@@ -24,18 +24,18 @@ module Aardi
|
|
|
24
24
|
private
|
|
25
25
|
|
|
26
26
|
def add_description(dom, src)
|
|
27
|
-
description = src.metadata[
|
|
27
|
+
description = src.metadata['Description']
|
|
28
28
|
return unless description
|
|
29
29
|
|
|
30
|
-
dom.at_css('meta[name="description"]')[
|
|
30
|
+
dom.at_css('meta[name="description"]')['content'] = description
|
|
31
31
|
end
|
|
32
32
|
|
|
33
33
|
def add_main(dom, src)
|
|
34
|
-
dom.at_css(
|
|
34
|
+
dom.at_css('main').add_child(Aardi.ledger[:markdown_renderer].render(src.content))
|
|
35
35
|
end
|
|
36
36
|
|
|
37
37
|
def add_title(dom, src)
|
|
38
|
-
dom.at_css(
|
|
38
|
+
dom.at_css('title').content += " #{src.title}"
|
|
39
39
|
end
|
|
40
40
|
end
|
|
41
41
|
end
|
data/lib/aardi/timekeeper.rb
CHANGED
data/lib/aardi/version.rb
CHANGED
data/lib/aardi.rb
CHANGED
|
@@ -1,44 +1,44 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require
|
|
4
|
-
require
|
|
5
|
-
require
|
|
6
|
-
require
|
|
7
|
-
require
|
|
3
|
+
require 'date'
|
|
4
|
+
require 'fileutils'
|
|
5
|
+
require 'json'
|
|
6
|
+
require 'yaml'
|
|
7
|
+
require 'zlib'
|
|
8
8
|
|
|
9
|
-
require
|
|
10
|
-
require
|
|
11
|
-
require
|
|
9
|
+
require 'nokogiri'
|
|
10
|
+
require 'rake'
|
|
11
|
+
require 'redcarpet'
|
|
12
12
|
|
|
13
|
-
require_relative
|
|
14
|
-
require_relative
|
|
15
|
-
require_relative
|
|
16
|
-
require_relative
|
|
17
|
-
require_relative
|
|
18
|
-
require_relative
|
|
19
|
-
require_relative
|
|
20
|
-
require_relative
|
|
21
|
-
require_relative
|
|
22
|
-
require_relative
|
|
23
|
-
require_relative
|
|
24
|
-
require_relative
|
|
25
|
-
require_relative
|
|
26
|
-
require_relative
|
|
27
|
-
require_relative
|
|
28
|
-
require_relative
|
|
29
|
-
require_relative
|
|
30
|
-
require_relative
|
|
31
|
-
require_relative
|
|
32
|
-
require_relative
|
|
33
|
-
require_relative
|
|
34
|
-
require_relative
|
|
35
|
-
require_relative
|
|
36
|
-
require_relative
|
|
37
|
-
require_relative
|
|
38
|
-
require_relative
|
|
39
|
-
require_relative
|
|
13
|
+
require_relative 'aardi/version'
|
|
14
|
+
require_relative 'aardi/config'
|
|
15
|
+
require_relative 'aardi/ledger'
|
|
16
|
+
require_relative 'aardi/content'
|
|
17
|
+
require_relative 'aardi/content_hashes'
|
|
18
|
+
require_relative 'aardi/custom_renderer'
|
|
19
|
+
require_relative 'aardi/abstract_blog'
|
|
20
|
+
require_relative 'aardi/abstract_page_support'
|
|
21
|
+
require_relative 'aardi/abstract_feed'
|
|
22
|
+
require_relative 'aardi/file_target'
|
|
23
|
+
require_relative 'aardi/page_target'
|
|
24
|
+
require_relative 'aardi/page_content'
|
|
25
|
+
require_relative 'aardi/template'
|
|
26
|
+
require_relative 'aardi/page'
|
|
27
|
+
require_relative 'aardi/post'
|
|
28
|
+
require_relative 'aardi/day'
|
|
29
|
+
require_relative 'aardi/month'
|
|
30
|
+
require_relative 'aardi/year'
|
|
31
|
+
require_relative 'aardi/archive'
|
|
32
|
+
require_relative 'aardi/home'
|
|
33
|
+
require_relative 'aardi/atom_feed'
|
|
34
|
+
require_relative 'aardi/json_feed'
|
|
35
|
+
require_relative 'aardi/blog'
|
|
36
|
+
require_relative 'aardi/folder'
|
|
37
|
+
require_relative 'aardi/sitemap'
|
|
38
|
+
require_relative 'aardi/orphanage'
|
|
39
|
+
require_relative 'aardi/site'
|
|
40
40
|
|
|
41
|
-
RubyVM::YJIT.enable if RUBY_ENGINE ==
|
|
41
|
+
RubyVM::YJIT.enable if RUBY_ENGINE == 'ruby'
|
|
42
42
|
|
|
43
43
|
module Aardi
|
|
44
44
|
class << self
|
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: 0.
|
|
4
|
+
version: 1.0.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Faisal N Jawdat
|
|
@@ -79,132 +79,7 @@ dependencies:
|
|
|
79
79
|
- - ">="
|
|
80
80
|
- !ruby/object:Gem::Version
|
|
81
81
|
version: '0'
|
|
82
|
-
|
|
83
|
-
name: reek
|
|
84
|
-
requirement: !ruby/object:Gem::Requirement
|
|
85
|
-
requirements:
|
|
86
|
-
- - ">="
|
|
87
|
-
- !ruby/object:Gem::Version
|
|
88
|
-
version: '0'
|
|
89
|
-
type: :development
|
|
90
|
-
prerelease: false
|
|
91
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
92
|
-
requirements:
|
|
93
|
-
- - ">="
|
|
94
|
-
- !ruby/object:Gem::Version
|
|
95
|
-
version: '0'
|
|
96
|
-
- !ruby/object:Gem::Dependency
|
|
97
|
-
name: rubocop-minitest
|
|
98
|
-
requirement: !ruby/object:Gem::Requirement
|
|
99
|
-
requirements:
|
|
100
|
-
- - ">="
|
|
101
|
-
- !ruby/object:Gem::Version
|
|
102
|
-
version: '0'
|
|
103
|
-
type: :development
|
|
104
|
-
prerelease: false
|
|
105
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
106
|
-
requirements:
|
|
107
|
-
- - ">="
|
|
108
|
-
- !ruby/object:Gem::Version
|
|
109
|
-
version: '0'
|
|
110
|
-
- !ruby/object:Gem::Dependency
|
|
111
|
-
name: rubocop-ordered_methods
|
|
112
|
-
requirement: !ruby/object:Gem::Requirement
|
|
113
|
-
requirements:
|
|
114
|
-
- - ">="
|
|
115
|
-
- !ruby/object:Gem::Version
|
|
116
|
-
version: '0'
|
|
117
|
-
type: :development
|
|
118
|
-
prerelease: false
|
|
119
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
120
|
-
requirements:
|
|
121
|
-
- - ">="
|
|
122
|
-
- !ruby/object:Gem::Version
|
|
123
|
-
version: '0'
|
|
124
|
-
- !ruby/object:Gem::Dependency
|
|
125
|
-
name: rubocop-performance
|
|
126
|
-
requirement: !ruby/object:Gem::Requirement
|
|
127
|
-
requirements:
|
|
128
|
-
- - ">="
|
|
129
|
-
- !ruby/object:Gem::Version
|
|
130
|
-
version: '0'
|
|
131
|
-
type: :development
|
|
132
|
-
prerelease: false
|
|
133
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
134
|
-
requirements:
|
|
135
|
-
- - ">="
|
|
136
|
-
- !ruby/object:Gem::Version
|
|
137
|
-
version: '0'
|
|
138
|
-
- !ruby/object:Gem::Dependency
|
|
139
|
-
name: rubocop-rake
|
|
140
|
-
requirement: !ruby/object:Gem::Requirement
|
|
141
|
-
requirements:
|
|
142
|
-
- - ">="
|
|
143
|
-
- !ruby/object:Gem::Version
|
|
144
|
-
version: '0'
|
|
145
|
-
type: :development
|
|
146
|
-
prerelease: false
|
|
147
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
148
|
-
requirements:
|
|
149
|
-
- - ">="
|
|
150
|
-
- !ruby/object:Gem::Version
|
|
151
|
-
version: '0'
|
|
152
|
-
- !ruby/object:Gem::Dependency
|
|
153
|
-
name: rubocop-rubyfmt
|
|
154
|
-
requirement: !ruby/object:Gem::Requirement
|
|
155
|
-
requirements:
|
|
156
|
-
- - ">="
|
|
157
|
-
- !ruby/object:Gem::Version
|
|
158
|
-
version: '0'
|
|
159
|
-
type: :development
|
|
160
|
-
prerelease: false
|
|
161
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
162
|
-
requirements:
|
|
163
|
-
- - ">="
|
|
164
|
-
- !ruby/object:Gem::Version
|
|
165
|
-
version: '0'
|
|
166
|
-
- !ruby/object:Gem::Dependency
|
|
167
|
-
name: rubocop
|
|
168
|
-
requirement: !ruby/object:Gem::Requirement
|
|
169
|
-
requirements:
|
|
170
|
-
- - ">="
|
|
171
|
-
- !ruby/object:Gem::Version
|
|
172
|
-
version: '0'
|
|
173
|
-
type: :development
|
|
174
|
-
prerelease: false
|
|
175
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
176
|
-
requirements:
|
|
177
|
-
- - ">="
|
|
178
|
-
- !ruby/object:Gem::Version
|
|
179
|
-
version: '0'
|
|
180
|
-
- !ruby/object:Gem::Dependency
|
|
181
|
-
name: minitest
|
|
182
|
-
requirement: !ruby/object:Gem::Requirement
|
|
183
|
-
requirements:
|
|
184
|
-
- - ">="
|
|
185
|
-
- !ruby/object:Gem::Version
|
|
186
|
-
version: '0'
|
|
187
|
-
type: :development
|
|
188
|
-
prerelease: false
|
|
189
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
190
|
-
requirements:
|
|
191
|
-
- - ">="
|
|
192
|
-
- !ruby/object:Gem::Version
|
|
193
|
-
version: '0'
|
|
194
|
-
- !ruby/object:Gem::Dependency
|
|
195
|
-
name: standard
|
|
196
|
-
requirement: !ruby/object:Gem::Requirement
|
|
197
|
-
requirements:
|
|
198
|
-
- - ">="
|
|
199
|
-
- !ruby/object:Gem::Version
|
|
200
|
-
version: 1.35.1
|
|
201
|
-
type: :development
|
|
202
|
-
prerelease: false
|
|
203
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
204
|
-
requirements:
|
|
205
|
-
- - ">="
|
|
206
|
-
- !ruby/object:Gem::Version
|
|
207
|
-
version: 1.35.1
|
|
82
|
+
email: aardi@faisal.com
|
|
208
83
|
executables: []
|
|
209
84
|
extensions: []
|
|
210
85
|
extra_rdoc_files: []
|
|
@@ -250,10 +125,14 @@ files:
|
|
|
250
125
|
- lib/aardi/timekeeper.rb
|
|
251
126
|
- lib/aardi/version.rb
|
|
252
127
|
- lib/aardi/year.rb
|
|
128
|
+
homepage: https://github.com/faisal/aardi
|
|
253
129
|
licenses:
|
|
254
130
|
- MIT
|
|
255
131
|
metadata:
|
|
256
|
-
source_code_uri: https://
|
|
132
|
+
source_code_uri: https://github.com/faisal/aardi
|
|
133
|
+
bug_tracker_uri: https://github.com/faisal/aardi/issues
|
|
134
|
+
changelog_uri: https://github.com/faisal/aardi/blob/main/CHANGELOG.md
|
|
135
|
+
documentation_uri: https://github.com/faisal/aardi/blob/main/README.md
|
|
257
136
|
rubygems_mfa_required: 'true'
|
|
258
137
|
rdoc_options: []
|
|
259
138
|
require_paths:
|
|
@@ -262,14 +141,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
262
141
|
requirements:
|
|
263
142
|
- - ">="
|
|
264
143
|
- !ruby/object:Gem::Version
|
|
265
|
-
version: '
|
|
144
|
+
version: '3.3'
|
|
266
145
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
267
146
|
requirements:
|
|
268
147
|
- - ">="
|
|
269
148
|
- !ruby/object:Gem::Version
|
|
270
149
|
version: '0'
|
|
271
150
|
requirements: []
|
|
272
|
-
rubygems_version: 4.0.
|
|
151
|
+
rubygems_version: 4.0.10
|
|
273
152
|
specification_version: 4
|
|
274
153
|
summary: A static site generator.
|
|
275
154
|
test_files: []
|