zine 0.16.0 → 0.17.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/CHANGELOG.md +21 -1
- data/bin/console +1 -0
- data/bin/zine +2 -0
- data/lib/zine/cli.rb +18 -18
- data/lib/zine/data_page.rb +2 -0
- data/lib/zine/page.rb +9 -8
- data/lib/zine/post.rb +5 -3
- data/lib/zine/posts_and_headlines.rb +5 -3
- data/lib/zine/query.rb +2 -0
- data/lib/zine/server.rb +9 -8
- data/lib/zine/skeleton/source/templates/footer_partial.erb +1 -1
- data/lib/zine/skeleton/source/templates/rss.erb +1 -0
- data/lib/zine/style.rb +3 -1
- data/lib/zine/tag.rb +10 -12
- data/lib/zine/templates.rb +3 -3
- data/lib/zine/upload.rb +8 -3
- data/lib/zine/uploader_aws.rb +6 -5
- data/lib/zine/uploader_github.rb +3 -0
- data/lib/zine/uploader_sftp.rb +6 -2
- data/lib/zine/version.rb +1 -1
- data/lib/zine/watcher.rb +4 -2
- data/lib/zine.rb +1 -1
- metadata +63 -62
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0a66a879974bd37a0bae5528bbfbc4026abedcb2d299e423b27e6b10cc127ec1
|
4
|
+
data.tar.gz: dd4492c3f3e9b82355d1eb4c7ef8c30c44b04d6c8dfabe3156ad4f4d6fb7bfb4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 954d1e78f5345ac73c499b8d1dd820769be59df6e3632af7b44be97088a61d77c6df89e2e4d1fe104128076b472b261bae40243dde87be04a53ad62d5d46eb78
|
7
|
+
data.tar.gz: adfcbad9184fff6f95473ee2000dfc4da0be91c97cc3a145bda6c8a01a6324e3908551e00c3172f88a3940f5ad15c60b7d45cf962bc5842c1dc2cc022f99096c
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,25 @@
|
|
1
1
|
# Zine Changelog
|
2
2
|
|
3
|
+
# 0.17.0 - 17 February, 2023
|
4
|
+
|
5
|
+
- forced polling for the listener gem, which was skipping new files on linux otherwise
|
6
|
+
- fixed an errant inverted comma in links, introduced in the last commit
|
7
|
+
- added a UTF 8 tag to the RSS template
|
8
|
+
- added HTML encoding for ellipses, em and en dashes with Kramdown's "typographic symbols"
|
9
|
+
- added a two day cache header for AWS uploads
|
10
|
+
- dependency updates
|
11
|
+
- year bump in the starter template
|
12
|
+
- dropped the faraday-retry gem again after Octokit updated
|
13
|
+
|
14
|
+
# towards 0.17.0 - 20 June, 2022 (on Github, but not RubyGems)
|
15
|
+
|
16
|
+
- customised the rake file
|
17
|
+
- refactored - from 112 rubocop offenses, to 33
|
18
|
+
- fixed a failing test
|
19
|
+
- bumped the minimum Ruby version again, 2.6 was EOL 31 Mar 2022 - from 2.6 to 2.7
|
20
|
+
- dependency updates
|
21
|
+
- added the faraday-retry gem as a dependency, to suppress warnings (from Octokit)
|
22
|
+
|
3
23
|
# 0.16.0 - 17 June, 2022
|
4
24
|
|
5
25
|
- temp warning about missing atom template in zine.yaml, better handling of missing templates
|
@@ -10,7 +30,7 @@
|
|
10
30
|
- reversed the sort order for this change log
|
11
31
|
- changed the date format in the log - from US style, to everywhere else style
|
12
32
|
|
13
|
-
# 0.16.0 - 3 February, 2022
|
33
|
+
# towards 0.16.0 - 3 February, 2022
|
14
34
|
|
15
35
|
- BREAKING CHANGE: added an RSS 2.0 feed in addition to the Atom feed, the rss.erb file and /rss.xml feed link will now be RSS, an Atom and RSS template are both required in the local site copy, and need to be listed in a site's zine.yml file
|
16
36
|
- year bump in starter template
|
data/bin/console
CHANGED
data/bin/zine
CHANGED
data/lib/zine/cli.rb
CHANGED
@@ -12,26 +12,26 @@ module Zine
|
|
12
12
|
# CLI for zine
|
13
13
|
class CLI < Thor
|
14
14
|
include Thor::Actions
|
15
|
-
attr_accessor :
|
15
|
+
attr_accessor :site # only used in testing
|
16
16
|
|
17
17
|
no_commands do
|
18
18
|
def self.exit_on_failure?
|
19
19
|
true
|
20
20
|
end
|
21
21
|
|
22
|
-
def
|
23
|
-
@
|
22
|
+
def site
|
23
|
+
@site ||= Zine::Site.new
|
24
24
|
end
|
25
25
|
|
26
26
|
def options
|
27
|
-
|
27
|
+
site
|
28
28
|
|
29
|
-
# for v0.16.0 only
|
30
|
-
unless @
|
29
|
+
# for v0.16.0 & a few more only
|
30
|
+
unless @site.options['templates'] && @site.options['templates']['atom']
|
31
31
|
puts "v0.16.0 changes how rss & atom works, see CHANGELOG.md if you haven't already\n\n"
|
32
32
|
end
|
33
33
|
|
34
|
-
@
|
34
|
+
@site.options
|
35
35
|
end
|
36
36
|
end
|
37
37
|
|
@@ -42,28 +42,28 @@ module Zine
|
|
42
42
|
# printf "%25s\#%s\t\t\t%s:%-2d\n", classname, id, file, line
|
43
43
|
# end
|
44
44
|
# }
|
45
|
-
|
46
|
-
@
|
45
|
+
site
|
46
|
+
@site.build_site
|
47
47
|
puts Rainbow('Site built').green
|
48
48
|
end
|
49
49
|
|
50
50
|
desc 'force', 'Build the site, forcing writes & uploads'
|
51
51
|
def force
|
52
|
-
|
53
|
-
@
|
52
|
+
site
|
53
|
+
@site.build_site_forcing_writes
|
54
54
|
puts Rainbow('Site built').green
|
55
55
|
end
|
56
56
|
|
57
57
|
desc 'notice POST', 'Build the site, then force the one POST'
|
58
58
|
def notice(file)
|
59
|
-
|
60
|
-
@
|
59
|
+
site
|
60
|
+
@site.notice(file)
|
61
61
|
puts Rainbow('Site built').green
|
62
62
|
end
|
63
63
|
|
64
64
|
desc 'nuke', 'Delete the build folder'
|
65
65
|
def nuke
|
66
|
-
|
66
|
+
site
|
67
67
|
FileUtils.remove_dir options['directories']['build'],
|
68
68
|
force: true
|
69
69
|
puts Rainbow('Site nuked. It\'s the only way to be sure.').green
|
@@ -71,7 +71,7 @@ module Zine
|
|
71
71
|
|
72
72
|
desc 'post TITLE', 'Create the file for a new blog post, titled TITLE'
|
73
73
|
def post(name)
|
74
|
-
|
74
|
+
site
|
75
75
|
option_dir = options['directories']
|
76
76
|
Zine::CLI.source_root option_dir['templates']
|
77
77
|
@date = DateTime.now
|
@@ -82,8 +82,8 @@ module Zine
|
|
82
82
|
File.join(Dir.pwd, option_dir['posts'], file)
|
83
83
|
end
|
84
84
|
|
85
|
-
desc '
|
86
|
-
def
|
85
|
+
desc 'skeleton', 'Create the skeleton of a new site (overwriting files)'
|
86
|
+
def skeleton
|
87
87
|
# @skeleton_dir ?
|
88
88
|
skeleton_dir = File.join File.dirname(__FILE__), 'skeleton', '/.'
|
89
89
|
FileUtils.cp_r skeleton_dir, Dir.pwd
|
@@ -92,7 +92,7 @@ module Zine
|
|
92
92
|
|
93
93
|
desc 'style', 'Build the site\'s stylesheet'
|
94
94
|
def style
|
95
|
-
|
95
|
+
site
|
96
96
|
style = Zine::Style.new(options['directories'])
|
97
97
|
style.process(File)
|
98
98
|
puts Rainbow('Stylesheet rendered').green
|
data/lib/zine/data_page.rb
CHANGED
data/lib/zine/page.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'erb'
|
2
4
|
require 'date'
|
3
5
|
require 'htmlcompressor'
|
@@ -16,16 +18,13 @@ module Zine
|
|
16
18
|
attr_accessor :source_file # used in zine notice --
|
17
19
|
# PostsAndHeadlines.one_new_post
|
18
20
|
attr_reader :dest_path, :formatted_data, :template_bundle
|
21
|
+
|
19
22
|
# the meta data, passed formatted to the template
|
20
23
|
class FormattedData
|
21
24
|
include ERB::Util
|
22
25
|
|
23
|
-
attr_accessor :data
|
24
|
-
attr_accessor :footer_partial
|
25
|
-
attr_accessor :header_partial
|
26
|
-
attr_accessor :html
|
26
|
+
attr_accessor :data, :footer_partial, :header_partial, :html, :uri
|
27
27
|
attr_reader :page
|
28
|
-
attr_accessor :uri
|
29
28
|
|
30
29
|
def initialize(front_matter, site_opt)
|
31
30
|
site = site_opt['options']
|
@@ -64,8 +63,9 @@ module Zine
|
|
64
63
|
end
|
65
64
|
|
66
65
|
def slugify_tags(tags)
|
67
|
-
return unless tags
|
68
|
-
|
66
|
+
return unless tags
|
67
|
+
|
68
|
+
tags&.map { |tag| { name: tag, tag_slug: Page.slug(tag) } }
|
69
69
|
end
|
70
70
|
end
|
71
71
|
|
@@ -75,7 +75,7 @@ module Zine
|
|
75
75
|
|
76
76
|
def initialize(md_file_name, dest, templates, site_options)
|
77
77
|
@source_file = md_file_name
|
78
|
-
file_parts = File.
|
78
|
+
file_parts = File.read(md_file_name).split('---', 3)
|
79
79
|
@formatted_data = FormattedData.new(parse_yaml(file_parts[1],
|
80
80
|
md_file_name),
|
81
81
|
site_options)
|
@@ -113,6 +113,7 @@ module Zine
|
|
113
113
|
input: 'GFM',
|
114
114
|
auto_ids: false,
|
115
115
|
smart_quotes: %w[apos apos quot quot],
|
116
|
+
typographic_symbols: { hellip: '…', mdash: '—', ndash: '–' }
|
116
117
|
).to_html
|
117
118
|
@raw_text = nil
|
118
119
|
end
|
data/lib/zine/post.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'uri'
|
2
4
|
|
3
5
|
module Zine
|
@@ -5,7 +7,7 @@ module Zine
|
|
5
7
|
class Post < Page
|
6
8
|
def initialize(md_file_name, templates, site_options)
|
7
9
|
@source_file = md_file_name
|
8
|
-
file_parts = File.
|
10
|
+
file_parts = File.read(md_file_name).split('---', 3)
|
9
11
|
@formatted_data = FormattedData.new(parse_yaml(file_parts[1],
|
10
12
|
md_file_name),
|
11
13
|
site_options)
|
@@ -35,7 +37,7 @@ module Zine
|
|
35
37
|
@dest_dir = File.join(build_dir,
|
36
38
|
date.strftime('%Y'),
|
37
39
|
date.strftime('%-m'))
|
38
|
-
slg = Zine::Page.slug(page_data[:title])
|
40
|
+
slg = "#{Zine::Page.slug(page_data[:title])}.html"
|
39
41
|
@dest_path = File.join(@dest_dir, slg)
|
40
42
|
end
|
41
43
|
|
@@ -43,7 +45,7 @@ module Zine
|
|
43
45
|
page_data = @formatted_data.page
|
44
46
|
file_path = rel_path_from_build_dir(@dest_path).to_s
|
45
47
|
# URI.join will expect a root directory to start...
|
46
|
-
@formatted_data.uri = page_data[:site_URL]
|
48
|
+
@formatted_data.uri = "#{page_data[:site_URL]}/#{file_path}"
|
47
49
|
TagData.new(page_data[:tags],
|
48
50
|
file_path,
|
49
51
|
page_data[:title],
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'zine/data_page'
|
2
4
|
require 'zine/post'
|
3
5
|
require 'zine/tag'
|
@@ -32,7 +34,7 @@ module Zine
|
|
32
34
|
dir = @options['directories']['build']
|
33
35
|
options = @options['options']
|
34
36
|
templates = @options['templates']
|
35
|
-
|
37
|
+
|
36
38
|
headlines = []
|
37
39
|
if templates['home']
|
38
40
|
headlines <<
|
@@ -112,7 +114,7 @@ module Zine
|
|
112
114
|
Pathname(File.absolute_path(directories['source']))
|
113
115
|
)
|
114
116
|
relative_path = File.dirname(relative)
|
115
|
-
file = File.basename(relative, '.md')
|
117
|
+
file = "#{File.basename(relative, '.md')}.html"
|
116
118
|
File.delete(File.join(directories['build'], relative_path, file))
|
117
119
|
else
|
118
120
|
File.delete(page[:post].dest_path)
|
@@ -153,7 +155,7 @@ module Zine
|
|
153
155
|
def preview_straight_delete(file)
|
154
156
|
FileUtils.rm(File.join(
|
155
157
|
preview_relative_equivalent(file), File.basename(file)
|
156
|
-
|
158
|
+
))
|
157
159
|
end
|
158
160
|
|
159
161
|
# rebuild a page that's not a post - doesn't create the file structure for a
|
data/lib/zine/query.rb
CHANGED
data/lib/zine/server.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'zine/query'
|
2
4
|
require 'rainbow'
|
3
5
|
require 'rack'
|
@@ -23,7 +25,6 @@ module Zine
|
|
23
25
|
motd unless upload_options['test']
|
24
26
|
@thin.start
|
25
27
|
possible_upload rel_path_build, upload_options
|
26
|
-
@thin
|
27
28
|
end
|
28
29
|
|
29
30
|
# Stop the server - only used in test
|
@@ -48,23 +49,23 @@ module Zine
|
|
48
49
|
|
49
50
|
def header_rules
|
50
51
|
[[:all,
|
51
|
-
{ 'ETag'
|
52
|
-
'Last-Modified' => (Time.now + 100**4).to_s,
|
52
|
+
{ 'ETag' => nil,
|
53
|
+
'Last-Modified' => (Time.now + (100**4)).to_s,
|
53
54
|
'Cache-Control' =>
|
54
55
|
'no-store, no-cache, must-revalidate, post-check=0, pre-check=0',
|
55
|
-
'Pragma'
|
56
|
-
'Expires'
|
56
|
+
'Pragma' => 'no-cache',
|
57
|
+
'Expires' => (Time.now - (100**4)).to_s }]]
|
57
58
|
end
|
58
59
|
|
59
60
|
def motd
|
60
|
-
puts "
|
61
|
-
|
62
|
-
"\nCommand double click the URL to open, Control C to quit\n"
|
61
|
+
puts "Preview running at #{Rainbow('http://127.0.0.1:8080/').blue.underline}
|
62
|
+
Control C to quit\n"
|
63
63
|
end
|
64
64
|
|
65
65
|
def possible_upload(rel_path_build, upload_options)
|
66
66
|
return if upload_options['method'] == 'none' ||
|
67
67
|
(@delete_array.empty? && @upload_array.empty?)
|
68
|
+
|
68
69
|
uploader = Zine::Upload.new rel_path_build, upload_options,
|
69
70
|
@delete_array, @upload_array
|
70
71
|
uploader.upload_decision Query
|
@@ -18,7 +18,7 @@
|
|
18
18
|
<h3>The fine print</h3>
|
19
19
|
<ul>
|
20
20
|
<li>Built with <a href="https://mikekreuzer.com/projects/zine/">Zine</a></li>
|
21
|
-
<li>©
|
21
|
+
<li>© 2023<span> <%= page[:site_author] %></span></li>
|
22
22
|
</ul>
|
23
23
|
</div>
|
24
24
|
</footer>
|
data/lib/zine/style.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'sassc'
|
2
4
|
|
3
5
|
module Zine
|
@@ -11,7 +13,7 @@ module Zine
|
|
11
13
|
|
12
14
|
# Write the CSS file
|
13
15
|
def process(string_or_file_writer)
|
14
|
-
sass = File.
|
16
|
+
sass = File.read(@style_file)
|
15
17
|
css = SassC::Engine.new(sass, style: :compressed).render
|
16
18
|
string_or_file_writer.write @css_file, css
|
17
19
|
end
|
data/lib/zine/tag.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'zine/data_page'
|
2
4
|
|
3
5
|
module Zine
|
@@ -15,7 +17,7 @@ module Zine
|
|
15
17
|
def write_tags
|
16
18
|
@posts_by_tag.each do |tag_name, struct_array|
|
17
19
|
sorted_array = sort_tags_by_date struct_array
|
18
|
-
data = { name: tag_name, title:
|
20
|
+
data = { name: tag_name, title: "Tags: #{tag_name}",
|
19
21
|
post_array: sorted_array, build_dir: @tag_dir }
|
20
22
|
tag_page = Zine::DataPage.new(data, @templates[:tag], @options)
|
21
23
|
tag_page.write
|
@@ -25,21 +27,17 @@ module Zine
|
|
25
27
|
|
26
28
|
private
|
27
29
|
|
28
|
-
# Take an array of posts each with
|
29
|
-
# each with
|
30
|
-
def sort_tags(
|
31
|
-
|
32
|
-
|
30
|
+
# Take an array of posts, each with an array of tags it has, &
|
31
|
+
# make a hash of posts each with an array of posts the tag's in
|
32
|
+
def sort_tags(posts)
|
33
|
+
tags = {}
|
34
|
+
posts.each do |post|
|
33
35
|
post['tagsArray'].each do |tag|
|
34
36
|
name = tag[:name]
|
35
|
-
|
36
|
-
posts_by_tag[name] << post
|
37
|
-
else
|
38
|
-
posts_by_tag[name] = [post]
|
39
|
-
end
|
37
|
+
tags.key?(name) ? tags[name] << post : tags[name] = [post]
|
40
38
|
end
|
41
39
|
end
|
42
|
-
|
40
|
+
tags
|
43
41
|
end
|
44
42
|
|
45
43
|
def sort_tags_by_date(tag_array)
|
data/lib/zine/templates.rb
CHANGED
@@ -1,9 +1,9 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Zine
|
2
4
|
# Trio of templates used to create a page
|
3
5
|
class TemplateFiles
|
4
|
-
attr_reader :body
|
5
|
-
attr_reader :footer
|
6
|
-
attr_reader :header
|
6
|
+
attr_reader :body, :footer, :header
|
7
7
|
|
8
8
|
def initialize(body, header, footer)
|
9
9
|
@body = body
|
data/lib/zine/upload.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'rainbow'
|
2
4
|
require 'set'
|
3
5
|
require 'zine'
|
@@ -23,9 +25,11 @@ module Zine
|
|
23
25
|
|
24
26
|
def upload_decision(query_class)
|
25
27
|
return if @no_upload
|
28
|
+
|
26
29
|
cli = query_class.new
|
27
30
|
answer = cli.call 'Upload files? (Y/n)'
|
28
31
|
return if answer != 'Y'
|
32
|
+
|
29
33
|
puts Rainbow('Connecting...').green
|
30
34
|
upload
|
31
35
|
end
|
@@ -74,11 +78,12 @@ module Zine
|
|
74
78
|
end
|
75
79
|
|
76
80
|
def upload
|
77
|
-
|
81
|
+
case @options['method']
|
82
|
+
when 'aws'
|
78
83
|
aws_upload
|
79
|
-
|
84
|
+
when 'sftp'
|
80
85
|
sftp_upload
|
81
|
-
|
86
|
+
when 'github'
|
82
87
|
github_upload
|
83
88
|
else
|
84
89
|
puts Rainbow('Unknown upload option in zine.yaml').red
|
data/lib/zine/uploader_aws.rb
CHANGED
@@ -31,8 +31,8 @@ module Zine
|
|
31
31
|
delete
|
32
32
|
deploy
|
33
33
|
invalidate
|
34
|
-
rescue Aws::S3::Errors::ServiceError =>
|
35
|
-
puts Rainbow("S3 error: #{
|
34
|
+
rescue Aws::S3::Errors::ServiceError => e
|
35
|
+
puts Rainbow("S3 error: #{e}").red
|
36
36
|
end
|
37
37
|
|
38
38
|
private
|
@@ -61,10 +61,11 @@ module Zine
|
|
61
61
|
def deploy_one_file(local_path, remote_path)
|
62
62
|
File.open(local_path, 'rb') do |file|
|
63
63
|
content_type = Rack::Mime.mime_type(File.extname(local_path))
|
64
|
-
@s3.put_object(
|
65
|
-
|
64
|
+
@s3.put_object(body: file,
|
65
|
+
cache_control: 'max-age=86400',
|
66
66
|
content_type: content_type,
|
67
|
-
|
67
|
+
bucket: @bucket_name,
|
68
|
+
key: remote_path)
|
68
69
|
puts "Add: #{remote_path}" if @verbose
|
69
70
|
end
|
70
71
|
end
|
data/lib/zine/uploader_github.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'octokit'
|
2
4
|
require 'rainbow'
|
3
5
|
require 'yaml'
|
@@ -29,6 +31,7 @@ module Zine
|
|
29
31
|
# then .each... upload & delete - uses @build_dir to create relative paths
|
30
32
|
def upload
|
31
33
|
return if @no_upload
|
34
|
+
|
32
35
|
@delete_file_array.each do |file_pathname|
|
33
36
|
delete_file file_pathname
|
34
37
|
end
|
data/lib/zine/uploader_sftp.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'net/ssh'
|
2
4
|
require 'net/sftp'
|
3
5
|
require 'rainbow'
|
@@ -12,6 +14,7 @@ module Zine
|
|
12
14
|
def initialize(build_dir, options, credentials, delete_file_array,
|
13
15
|
upload_file_array)
|
14
16
|
return unless options['method'] == 'sftp'
|
17
|
+
|
15
18
|
@build_dir = build_dir
|
16
19
|
@host = options['host']
|
17
20
|
@path = options['path_or_repo']
|
@@ -67,6 +70,7 @@ module Zine
|
|
67
70
|
node_array.each do |level|
|
68
71
|
level.each do |node|
|
69
72
|
next if node.nil?
|
73
|
+
|
70
74
|
path_string = node.path_string
|
71
75
|
mkdir_p(sftp, path_string)
|
72
76
|
puts "mkdir_p #{path_string}" if @verbose
|
@@ -96,8 +100,8 @@ module Zine
|
|
96
100
|
|
97
101
|
def mkdir_p(sftp, path)
|
98
102
|
sftp.mkdir!(File.join(@path, path), permissions: 0o755) # drwxr-xr-x
|
99
|
-
rescue Net::SFTP::StatusException =>
|
100
|
-
raise if
|
103
|
+
rescue Net::SFTP::StatusException => e
|
104
|
+
raise if e.code != 4 && e.code != 11 # folder already exists
|
101
105
|
end
|
102
106
|
|
103
107
|
# for each level, if a node has the same name & same path it's a duplicate
|
data/lib/zine/version.rb
CHANGED
data/lib/zine/watcher.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'listen'
|
2
4
|
require 'pathname'
|
3
5
|
|
@@ -74,7 +76,7 @@ module Zine
|
|
74
76
|
end
|
75
77
|
|
76
78
|
def watch_build_dir
|
77
|
-
listener = Listen.to(@build_directory) do |modified, added, removed|
|
79
|
+
listener = Listen.to(@build_directory, force_polling: true) do |modified, added, removed|
|
78
80
|
on_build_change modified unless modified.empty?
|
79
81
|
on_build_change added unless added.empty?
|
80
82
|
on_build_delete removed unless removed.empty?
|
@@ -84,7 +86,7 @@ module Zine
|
|
84
86
|
end
|
85
87
|
|
86
88
|
def watch_source_dir
|
87
|
-
listener = Listen.to(@source_directory) do |modified, added, removed|
|
89
|
+
listener = Listen.to(@source_directory, force_polling: true) do |modified, added, removed|
|
88
90
|
on_source_change modified unless modified.empty?
|
89
91
|
on_source_change added unless added.empty?
|
90
92
|
on_source_delete removed unless removed.empty?
|
data/lib/zine.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: zine
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.17.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mike Kreuzer
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-02-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -16,34 +16,40 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '2.
|
19
|
+
version: '2.3'
|
20
20
|
- - ">="
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version: 2.
|
22
|
+
version: 2.3.16
|
23
23
|
type: :development
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
26
26
|
requirements:
|
27
27
|
- - "~>"
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version: '2.
|
29
|
+
version: '2.3'
|
30
30
|
- - ">="
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version: 2.
|
32
|
+
version: 2.3.16
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
34
|
name: curb
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
36
36
|
requirements:
|
37
37
|
- - "~>"
|
38
38
|
- !ruby/object:Gem::Version
|
39
|
-
version: 0
|
39
|
+
version: '1.0'
|
40
|
+
- - ">="
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: 1.0.5
|
40
43
|
type: :development
|
41
44
|
prerelease: false
|
42
45
|
version_requirements: !ruby/object:Gem::Requirement
|
43
46
|
requirements:
|
44
47
|
- - "~>"
|
45
48
|
- !ruby/object:Gem::Version
|
46
|
-
version: 0
|
49
|
+
version: '1.0'
|
50
|
+
- - ">="
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: 1.0.5
|
47
53
|
- !ruby/object:Gem::Dependency
|
48
54
|
name: rake
|
49
55
|
requirement: !ruby/object:Gem::Requirement
|
@@ -53,7 +59,7 @@ dependencies:
|
|
53
59
|
version: '13.0'
|
54
60
|
- - ">="
|
55
61
|
- !ruby/object:Gem::Version
|
56
|
-
version: 13.0.
|
62
|
+
version: 13.0.6
|
57
63
|
type: :development
|
58
64
|
prerelease: false
|
59
65
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -63,69 +69,63 @@ dependencies:
|
|
63
69
|
version: '13.0'
|
64
70
|
- - ">="
|
65
71
|
- !ruby/object:Gem::Version
|
66
|
-
version: 13.0.
|
72
|
+
version: 13.0.6
|
67
73
|
- !ruby/object:Gem::Dependency
|
68
74
|
name: rspec
|
69
75
|
requirement: !ruby/object:Gem::Requirement
|
70
76
|
requirements:
|
71
77
|
- - "~>"
|
72
78
|
- !ruby/object:Gem::Version
|
73
|
-
version: '3.
|
79
|
+
version: '3.11'
|
74
80
|
type: :development
|
75
81
|
prerelease: false
|
76
82
|
version_requirements: !ruby/object:Gem::Requirement
|
77
83
|
requirements:
|
78
84
|
- - "~>"
|
79
85
|
- !ruby/object:Gem::Version
|
80
|
-
version: '3.
|
86
|
+
version: '3.11'
|
81
87
|
- !ruby/object:Gem::Dependency
|
82
88
|
name: simplecov
|
83
89
|
requirement: !ruby/object:Gem::Requirement
|
84
90
|
requirements:
|
85
91
|
- - "~>"
|
86
92
|
- !ruby/object:Gem::Version
|
87
|
-
version: 0.
|
93
|
+
version: '0.22'
|
88
94
|
type: :development
|
89
95
|
prerelease: false
|
90
96
|
version_requirements: !ruby/object:Gem::Requirement
|
91
97
|
requirements:
|
92
98
|
- - "~>"
|
93
99
|
- !ruby/object:Gem::Version
|
94
|
-
version: 0.
|
100
|
+
version: '0.22'
|
95
101
|
- !ruby/object:Gem::Dependency
|
96
102
|
name: aws-sdk-cloudfront
|
97
103
|
requirement: !ruby/object:Gem::Requirement
|
98
104
|
requirements:
|
99
105
|
- - "~>"
|
100
106
|
- !ruby/object:Gem::Version
|
101
|
-
version: '1.
|
102
|
-
- - ">="
|
103
|
-
- !ruby/object:Gem::Version
|
104
|
-
version: 1.27.1
|
107
|
+
version: '1.65'
|
105
108
|
type: :runtime
|
106
109
|
prerelease: false
|
107
110
|
version_requirements: !ruby/object:Gem::Requirement
|
108
111
|
requirements:
|
109
112
|
- - "~>"
|
110
113
|
- !ruby/object:Gem::Version
|
111
|
-
version: '1.
|
112
|
-
- - ">="
|
113
|
-
- !ruby/object:Gem::Version
|
114
|
-
version: 1.27.1
|
114
|
+
version: '1.65'
|
115
115
|
- !ruby/object:Gem::Dependency
|
116
116
|
name: aws-sdk-s3
|
117
117
|
requirement: !ruby/object:Gem::Requirement
|
118
118
|
requirements:
|
119
119
|
- - "~>"
|
120
120
|
- !ruby/object:Gem::Version
|
121
|
-
version: '1.
|
121
|
+
version: '1.114'
|
122
122
|
type: :runtime
|
123
123
|
prerelease: false
|
124
124
|
version_requirements: !ruby/object:Gem::Requirement
|
125
125
|
requirements:
|
126
126
|
- - "~>"
|
127
127
|
- !ruby/object:Gem::Version
|
128
|
-
version: '1.
|
128
|
+
version: '1.114'
|
129
129
|
- !ruby/object:Gem::Dependency
|
130
130
|
name: htmlcompressor
|
131
131
|
requirement: !ruby/object:Gem::Requirement
|
@@ -146,20 +146,14 @@ dependencies:
|
|
146
146
|
requirements:
|
147
147
|
- - "~>"
|
148
148
|
- !ruby/object:Gem::Version
|
149
|
-
version: '2.
|
150
|
-
- - ">="
|
151
|
-
- !ruby/object:Gem::Version
|
152
|
-
version: 2.2.1
|
149
|
+
version: '2.4'
|
153
150
|
type: :runtime
|
154
151
|
prerelease: false
|
155
152
|
version_requirements: !ruby/object:Gem::Requirement
|
156
153
|
requirements:
|
157
154
|
- - "~>"
|
158
155
|
- !ruby/object:Gem::Version
|
159
|
-
version: '2.
|
160
|
-
- - ">="
|
161
|
-
- !ruby/object:Gem::Version
|
162
|
-
version: 2.2.1
|
156
|
+
version: '2.4'
|
163
157
|
- !ruby/object:Gem::Dependency
|
164
158
|
name: kramdown-parser-gfm
|
165
159
|
requirement: !ruby/object:Gem::Requirement
|
@@ -180,116 +174,122 @@ dependencies:
|
|
180
174
|
requirements:
|
181
175
|
- - "~>"
|
182
176
|
- !ruby/object:Gem::Version
|
183
|
-
version: '3.
|
177
|
+
version: '3.7'
|
184
178
|
- - ">="
|
185
179
|
- !ruby/object:Gem::Version
|
186
|
-
version: 3.
|
180
|
+
version: 3.7.1
|
187
181
|
type: :runtime
|
188
182
|
prerelease: false
|
189
183
|
version_requirements: !ruby/object:Gem::Requirement
|
190
184
|
requirements:
|
191
185
|
- - "~>"
|
192
186
|
- !ruby/object:Gem::Version
|
193
|
-
version: '3.
|
187
|
+
version: '3.7'
|
194
188
|
- - ">="
|
195
189
|
- !ruby/object:Gem::Version
|
196
|
-
version: 3.
|
190
|
+
version: 3.7.1
|
197
191
|
- !ruby/object:Gem::Dependency
|
198
192
|
name: net-sftp
|
199
193
|
requirement: !ruby/object:Gem::Requirement
|
200
194
|
requirements:
|
201
195
|
- - "~>"
|
202
196
|
- !ruby/object:Gem::Version
|
203
|
-
version: '
|
204
|
-
- - ">="
|
205
|
-
- !ruby/object:Gem::Version
|
206
|
-
version: 2.1.2
|
197
|
+
version: '4.0'
|
207
198
|
type: :runtime
|
208
199
|
prerelease: false
|
209
200
|
version_requirements: !ruby/object:Gem::Requirement
|
210
201
|
requirements:
|
211
202
|
- - "~>"
|
212
203
|
- !ruby/object:Gem::Version
|
213
|
-
version: '
|
214
|
-
- - ">="
|
215
|
-
- !ruby/object:Gem::Version
|
216
|
-
version: 2.1.2
|
204
|
+
version: '4.0'
|
217
205
|
- !ruby/object:Gem::Dependency
|
218
206
|
name: octokit
|
219
207
|
requirement: !ruby/object:Gem::Requirement
|
220
208
|
requirements:
|
221
209
|
- - "~>"
|
222
210
|
- !ruby/object:Gem::Version
|
223
|
-
version: '
|
211
|
+
version: '6.0'
|
224
212
|
type: :runtime
|
225
213
|
prerelease: false
|
226
214
|
version_requirements: !ruby/object:Gem::Requirement
|
227
215
|
requirements:
|
228
216
|
- - "~>"
|
229
217
|
- !ruby/object:Gem::Version
|
230
|
-
version: '
|
218
|
+
version: '6.0'
|
231
219
|
- !ruby/object:Gem::Dependency
|
232
220
|
name: rainbow
|
233
221
|
requirement: !ruby/object:Gem::Requirement
|
234
222
|
requirements:
|
235
223
|
- - "~>"
|
236
224
|
- !ruby/object:Gem::Version
|
237
|
-
version: '3.
|
225
|
+
version: '3.1'
|
226
|
+
- - ">="
|
227
|
+
- !ruby/object:Gem::Version
|
228
|
+
version: 3.1.1
|
238
229
|
type: :runtime
|
239
230
|
prerelease: false
|
240
231
|
version_requirements: !ruby/object:Gem::Requirement
|
241
232
|
requirements:
|
242
233
|
- - "~>"
|
243
234
|
- !ruby/object:Gem::Version
|
244
|
-
version: '3.
|
235
|
+
version: '3.1'
|
236
|
+
- - ">="
|
237
|
+
- !ruby/object:Gem::Version
|
238
|
+
version: 3.1.1
|
245
239
|
- !ruby/object:Gem::Dependency
|
246
240
|
name: sassc
|
247
241
|
requirement: !ruby/object:Gem::Requirement
|
248
242
|
requirements:
|
249
243
|
- - "~>"
|
250
244
|
- !ruby/object:Gem::Version
|
251
|
-
version: '2.
|
245
|
+
version: '2.4'
|
252
246
|
type: :runtime
|
253
247
|
prerelease: false
|
254
248
|
version_requirements: !ruby/object:Gem::Requirement
|
255
249
|
requirements:
|
256
250
|
- - "~>"
|
257
251
|
- !ruby/object:Gem::Version
|
258
|
-
version: '2.
|
252
|
+
version: '2.4'
|
259
253
|
- !ruby/object:Gem::Dependency
|
260
254
|
name: thin
|
261
255
|
requirement: !ruby/object:Gem::Requirement
|
262
256
|
requirements:
|
263
257
|
- - "~>"
|
264
258
|
- !ruby/object:Gem::Version
|
265
|
-
version: '1.
|
259
|
+
version: '1.8'
|
260
|
+
- - ">="
|
261
|
+
- !ruby/object:Gem::Version
|
262
|
+
version: 1.8.1
|
266
263
|
type: :runtime
|
267
264
|
prerelease: false
|
268
265
|
version_requirements: !ruby/object:Gem::Requirement
|
269
266
|
requirements:
|
270
267
|
- - "~>"
|
271
268
|
- !ruby/object:Gem::Version
|
272
|
-
version: '1.
|
269
|
+
version: '1.8'
|
270
|
+
- - ">="
|
271
|
+
- !ruby/object:Gem::Version
|
272
|
+
version: 1.8.1
|
273
273
|
- !ruby/object:Gem::Dependency
|
274
274
|
name: thor
|
275
275
|
requirement: !ruby/object:Gem::Requirement
|
276
276
|
requirements:
|
277
277
|
- - "~>"
|
278
278
|
- !ruby/object:Gem::Version
|
279
|
-
version: '1.
|
279
|
+
version: '1.2'
|
280
280
|
- - ">="
|
281
281
|
- !ruby/object:Gem::Version
|
282
|
-
version: 1.
|
282
|
+
version: 1.2.1
|
283
283
|
type: :runtime
|
284
284
|
prerelease: false
|
285
285
|
version_requirements: !ruby/object:Gem::Requirement
|
286
286
|
requirements:
|
287
287
|
- - "~>"
|
288
288
|
- !ruby/object:Gem::Version
|
289
|
-
version: '1.
|
289
|
+
version: '1.2'
|
290
290
|
- - ">="
|
291
291
|
- !ruby/object:Gem::Version
|
292
|
-
version: 1.
|
292
|
+
version: 1.2.1
|
293
293
|
description: |-
|
294
294
|
Yet another blog aware static site generator.
|
295
295
|
There are many like it, but this one is mine.
|
@@ -347,8 +347,9 @@ files:
|
|
347
347
|
homepage: https://mikekreuzer.com/projects/zine/
|
348
348
|
licenses:
|
349
349
|
- AGPL-3.0-or-later
|
350
|
-
metadata:
|
351
|
-
|
350
|
+
metadata:
|
351
|
+
rubygems_mfa_required: 'true'
|
352
|
+
post_install_message:
|
352
353
|
rdoc_options: []
|
353
354
|
require_paths:
|
354
355
|
- lib
|
@@ -356,15 +357,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
356
357
|
requirements:
|
357
358
|
- - ">="
|
358
359
|
- !ruby/object:Gem::Version
|
359
|
-
version: '2.
|
360
|
+
version: '2.7'
|
360
361
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
361
362
|
requirements:
|
362
363
|
- - ">="
|
363
364
|
- !ruby/object:Gem::Version
|
364
365
|
version: '0'
|
365
366
|
requirements: []
|
366
|
-
rubygems_version: 3.
|
367
|
-
signing_key:
|
367
|
+
rubygems_version: 3.3.7
|
368
|
+
signing_key:
|
368
369
|
specification_version: 4
|
369
370
|
summary: Yet another blog aware static site generator.
|
370
371
|
test_files: []
|