zine 0.9.0 → 0.15.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/CHANGELOG.md +52 -0
- data/README.md +34 -32
- data/lib/zine.rb +13 -10
- data/lib/zine/cli.rb +8 -3
- data/lib/zine/page.rb +4 -3
- data/lib/zine/post.rb +1 -1
- data/lib/zine/query.rb +10 -0
- data/lib/zine/server.rb +2 -2
- data/lib/zine/skeleton/source/robots.txt +2 -0
- data/lib/zine/skeleton/source/screen.css +1 -1
- data/lib/zine/skeleton/source/styles/screen.scss +62 -40
- data/lib/zine/skeleton/source/templates/footer_partial.erb +22 -19
- data/lib/zine/skeleton/source/templates/header_partial.erb +7 -5
- data/lib/zine/skeleton/zine.yaml +3 -2
- data/lib/zine/upload.rb +15 -4
- data/lib/zine/uploader_aws.rb +96 -0
- data/lib/zine/version.rb +3 -1
- metadata +80 -62
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: ec6708f393eb728e1c5683a092f37ee2008c41c292105be0587c89045f9b267a
|
4
|
+
data.tar.gz: c33be8fdc0d2b17ea341cd532827493491d41c665ffb21f0505dab21adfeaf27
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dd3359cbf10d141396f05ab17489eb44d80ff1bd6830dac029e8469a5d0a7d503d332a4892191f1240cf42813657ad10f90afed54ca19106e679710915196f9f
|
7
|
+
data.tar.gz: 51769bedd049eac1a94a9e94cd4c0114303e847861f7cfb38044269d3aa1f05a538c62cdb3e0289a72f1835247d64236849e36bb33586bf963cc3d4d6f312ec5
|
data/CHANGELOG.md
CHANGED
@@ -117,3 +117,55 @@
|
|
117
117
|
|
118
118
|
- a bug in 'zine notice' involving full & partial paths that duplicated the post to notice on the history page, fixed
|
119
119
|
- minor code clean-up in cli.rb and server.rb
|
120
|
+
|
121
|
+
# 0.10.0, November 7, 2018
|
122
|
+
|
123
|
+
- dependency version bumps
|
124
|
+
|
125
|
+
# 0.11.0, November 7, 2018
|
126
|
+
|
127
|
+
- fixed a bug where String#split would break apart markdown files on tables as well as at the metadata/markdown boundary
|
128
|
+
|
129
|
+
# 0.12.0 - never pushed, used up until April 25, 2019
|
130
|
+
|
131
|
+
- added (then removed) Mastodon from the list of contacts, changed the styling a few times, neglected to publish
|
132
|
+
|
133
|
+
# 0.13.0 - lucky 13 - May 26, 2019
|
134
|
+
|
135
|
+
- added some of the style changes that survived from v12, eg moved social media to the footer
|
136
|
+
- added a (permissive as they come) robots.txt file
|
137
|
+
- dependency updates, kramdown split into kramdown & kramdown-parser-gfm which seems to be slower :-(
|
138
|
+
- bumped the required version of Ruby to 2.3 (for bundler, kramdown, etc)
|
139
|
+
- dropped the highline gem (it was only used to get the one input, originally there was going to be more)
|
140
|
+
- minor readme updates
|
141
|
+
- placeholder site, mostly in case there's ever an app: https://zine.dev
|
142
|
+
|
143
|
+
# 0.14.0 - May 27, 2019
|
144
|
+
|
145
|
+
- added an AWS S3 uploader
|
146
|
+
- added AWS CloudFront invalidation
|
147
|
+
- added zine.dev to the footer template
|
148
|
+
- bug fix - catch carriage returns as default yes answers to the upload? question
|
149
|
+
|
150
|
+
# 0.15.0 - May 26, 2020
|
151
|
+
|
152
|
+
- dependency version bumps, year bump in template
|
153
|
+
- replaced zine.dev with https://mikekreuzer.com/projects/zine/
|
154
|
+
- other minor refactoring & doc rewrites
|
155
|
+
|
156
|
+
TO DO
|
157
|
+
|
158
|
+
- add canonical links to page headers, means the build order needs to change...
|
159
|
+
- generate sitemap.xml
|
160
|
+
- fix the SFTP error from 0.7/0.8, also likely applies to S3
|
161
|
+
- make sure the server's killed on errors (eg if no credentials) so can run it again later without a port conflict
|
162
|
+
- tests, lots of tests
|
163
|
+
|
164
|
+
MAY DO
|
165
|
+
|
166
|
+
- concurrent-ruby gem
|
167
|
+
- migration scripts from eg Jekyll?
|
168
|
+
- Apple News
|
169
|
+
- much refactoring, frozen_string_literal, split monster classes, etc
|
170
|
+
- replace thor with optparse
|
171
|
+
- an app... maybe
|
data/README.md
CHANGED
@@ -1,40 +1,35 @@
|
|
1
1
|
# zine
|
2
|
-
Yet another blog aware static site generator.
|
3
2
|
|
4
|
-
|
3
|
+
[![Gem Version](https://badge.fury.io/rb/zine.svg)](https://badge.fury.io/rb/zine)
|
5
4
|
|
6
|
-
|
7
|
-
|
8
|
-
## Why yet another static blog engine?
|
9
|
-
|
10
|
-
Despite the [proliferation in these things][engine_list] (450!) I still find it more comfortable to use my own tools.
|
5
|
+
Zine is an open source, command line, blog-aware, static website generator.
|
11
6
|
|
12
7
|
Distinguishing features include:
|
13
8
|
|
14
9
|
- ERB templates
|
15
10
|
- Sass stylesheets
|
16
11
|
- fast incremental builds
|
17
|
-
- SFTP file
|
12
|
+
- a choice of AWS S3, GitHub & SFTP file uploaders
|
18
13
|
|
19
|
-
|
14
|
+
## How do I get it?
|
20
15
|
|
21
|
-
|
16
|
+
Zine is a Ruby Gem, so if you have Ruby on your machine (it comes installed standard on a Mac), open Terminal & type
|
22
17
|
|
23
|
-
|
18
|
+
````bash
|
19
|
+
gem install zine
|
20
|
+
````
|
24
21
|
|
25
|
-
|
26
|
-
$ gem install zine
|
27
|
-
```
|
22
|
+
And you're away.
|
28
23
|
|
29
|
-
To generate a new site
|
24
|
+
To generate a new scaffold site, cd to a new directory and:
|
30
25
|
|
31
26
|
```shell
|
32
27
|
$ zine site
|
33
28
|
```
|
34
29
|
|
35
|
-
Then update your site's name, your name & so on in zine.yaml. Pay particular care to the Upload section, if you want to use Zine
|
30
|
+
Then update your site's name, your name & so on in zine.yaml. Pay particular care to the Upload section, if you want to use Zine to deploy files you've changed, you'll need to edit this section to include your remote server's details, including the path to a YAML file with your credentials.
|
36
31
|
|
37
|
-
## Day to day
|
32
|
+
## Day to day use
|
38
33
|
|
39
34
|
To set up a new blog post:
|
40
35
|
|
@@ -42,15 +37,25 @@ To set up a new blog post:
|
|
42
37
|
$ zine post 'Your chosen title'
|
43
38
|
```
|
44
39
|
|
45
|
-
Your new post will have some fields set up in the YAML front matter, feel free to edit them too.
|
40
|
+
Your new post will have some fields set up in the YAML front matter, feel free to edit them too.
|
41
|
+
|
42
|
+
You can also create other Markdown files outside of the posts folder, those will be rendered into HTML in the same relative position in the build folder. That's how the project, about etc pages on my site are made for example.
|
46
43
|
|
47
|
-
|
44
|
+
Type zine build before you start writing to serve up a local copy of your site that you can refresh to see what the build version will look like.
|
48
45
|
|
49
46
|
```shell
|
50
|
-
$ zine build
|
47
|
+
$ zine build
|
51
48
|
```
|
52
49
|
|
53
|
-
|
50
|
+
or
|
51
|
+
|
52
|
+
```shell
|
53
|
+
$ zine force
|
54
|
+
```
|
55
|
+
|
56
|
+
Build will only watch for the things that change while it's running, so the first time you build your site you should use force -- force writes all of the files (& so also uploads them all too if you've set up uploads).
|
57
|
+
|
58
|
+
Control-C in Terminal when you're done.
|
54
59
|
|
55
60
|
## Design & development
|
56
61
|
|
@@ -74,16 +79,11 @@ Commands:
|
|
74
79
|
zine version # Show the version number
|
75
80
|
```
|
76
81
|
|
77
|
-
|
78
|
-
|
79
|
-
This is only a first cut at this gem, the stuff I considered a (barely) minimum viable product. Up next are:
|
82
|
+
## Links
|
80
83
|
|
81
|
-
-
|
82
|
-
-
|
83
|
-
-
|
84
|
-
- docs
|
85
|
-
- tests, lots of tests
|
86
|
-
- and a few other things
|
84
|
+
- [Github][github] - show me the code
|
85
|
+
- [Ruby gems][rubygems] - show me the Ruby details (pick up some gems while you're there)
|
86
|
+
- [Project site][mk] - Zine's home on the web
|
87
87
|
|
88
88
|
## Contributing
|
89
89
|
|
@@ -92,11 +92,13 @@ Yes please. Bug reports and pull requests are welcome on GitHub at https://githu
|
|
92
92
|
## Tests
|
93
93
|
|
94
94
|
```shell
|
95
|
-
|
95
|
+
rake
|
96
96
|
```
|
97
97
|
|
98
98
|
## License
|
99
99
|
|
100
100
|
The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
|
101
101
|
|
102
|
-
[
|
102
|
+
[github]: https://github.com/mikekreuzer/zine
|
103
|
+
[mk]: https://mikekreuzer/projects/zine/
|
104
|
+
[rubygems]: https://rubygems.org/gems/zine
|
data/lib/zine.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'erb'
|
2
4
|
require 'rainbow'
|
3
5
|
require 'zine/page'
|
@@ -70,7 +72,7 @@ module Zine
|
|
70
72
|
end
|
71
73
|
|
72
74
|
# currently used to say yes on a script's behalf - in #notice
|
73
|
-
class
|
75
|
+
class MockYes
|
74
76
|
def ask(_question)
|
75
77
|
'Y'
|
76
78
|
end
|
@@ -102,11 +104,12 @@ module Zine
|
|
102
104
|
# preview posts_and_guard -- no preview needed...
|
103
105
|
return if @options['upload']['method'] == 'none' ||
|
104
106
|
(guard.delete_array.empty? && guard.upload_array.empty?)
|
105
|
-
|
107
|
+
|
108
|
+
uploader = Zine::Upload.new(@options['directories']['build'],
|
106
109
|
@options['upload'],
|
107
110
|
guard.delete_array,
|
108
|
-
guard.upload_array
|
109
|
-
uploader.upload_decision
|
111
|
+
guard.upload_array)
|
112
|
+
uploader.upload_decision MockYes
|
110
113
|
end
|
111
114
|
|
112
115
|
def write_markdown(default_name, src_dir, file)
|
@@ -158,18 +161,18 @@ module Zine
|
|
158
161
|
end
|
159
162
|
|
160
163
|
def init_options
|
161
|
-
@options ||=
|
162
|
-
|
163
|
-
|
164
|
-
puts Rainbow("Could not parse YAML options: #{err.message}").red
|
165
|
-
end
|
164
|
+
@options ||= YAML.safe_load File.open('zine.yaml')
|
165
|
+
rescue ArgumentError => e
|
166
|
+
puts Rainbow("Could not parse YAML options: #{e.message}").red
|
166
167
|
end
|
167
168
|
|
168
169
|
def init_templates
|
170
|
+
Encoding.default_external = 'UTF-8'
|
169
171
|
tem_array = Dir[File.join(@options['directories']['templates'], '*.erb')]
|
170
172
|
tem_array.each do |tem|
|
171
173
|
@templates_by_name.merge!(File.basename(tem, '.*') =>
|
172
|
-
|
174
|
+
ERB.new(File.read(tem),
|
175
|
+
trim_mode: '-'))
|
173
176
|
end
|
174
177
|
end
|
175
178
|
|
data/lib/zine/cli.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'thor'
|
2
4
|
require 'rainbow'
|
3
5
|
require 'time'
|
@@ -16,6 +18,10 @@ module Zine
|
|
16
18
|
def init_site
|
17
19
|
@the_site ||= Zine::Site.new
|
18
20
|
end
|
21
|
+
|
22
|
+
def options
|
23
|
+
@the_site.options
|
24
|
+
end
|
19
25
|
end
|
20
26
|
|
21
27
|
desc 'build', 'Build the site'
|
@@ -47,7 +53,7 @@ module Zine
|
|
47
53
|
desc 'nuke', 'Delete the build folder'
|
48
54
|
def nuke
|
49
55
|
init_site
|
50
|
-
FileUtils.remove_dir
|
56
|
+
FileUtils.remove_dir options['directories']['build'],
|
51
57
|
force: true
|
52
58
|
puts Rainbow('Site nuked. It\'s the only way to be sure.').green
|
53
59
|
end
|
@@ -55,7 +61,6 @@ module Zine
|
|
55
61
|
desc 'post TITLE', 'Create the file for a new blog post, titled TITLE'
|
56
62
|
def post(name)
|
57
63
|
init_site
|
58
|
-
options = @the_site.options
|
59
64
|
option_dir = options['directories']
|
60
65
|
Zine::CLI.source_root option_dir['templates']
|
61
66
|
@date = DateTime.now
|
@@ -77,7 +82,7 @@ module Zine
|
|
77
82
|
desc 'style', 'Build the site\'s stylesheet'
|
78
83
|
def style
|
79
84
|
init_site
|
80
|
-
style = Zine::Style.new(
|
85
|
+
style = Zine::Style.new(options['directories'])
|
81
86
|
style.process(File)
|
82
87
|
puts Rainbow('Stylesheet rendered').green
|
83
88
|
end
|
data/lib/zine/page.rb
CHANGED
@@ -2,6 +2,7 @@ require 'erb'
|
|
2
2
|
require 'date'
|
3
3
|
require 'htmlcompressor'
|
4
4
|
require 'kramdown'
|
5
|
+
require 'kramdown-parser-gfm'
|
5
6
|
require 'pathname'
|
6
7
|
require 'rainbow'
|
7
8
|
require 'yaml'
|
@@ -39,7 +40,8 @@ module Zine
|
|
39
40
|
site_URL: site['site_URL'],
|
40
41
|
tags: slugify_tags(front_matter['tags']),
|
41
42
|
title: html_escape(front_matter['title']),
|
42
|
-
twitter_name: site['twitter_name']
|
43
|
+
twitter_name: site['twitter_name'],
|
44
|
+
uri: '' } # uri only generated for posts, and not until after markdown, TO DO
|
43
45
|
end
|
44
46
|
|
45
47
|
def public_binding
|
@@ -66,7 +68,7 @@ module Zine
|
|
66
68
|
|
67
69
|
def initialize(md_file_name, dest, templates, site_options)
|
68
70
|
@source_file = md_file_name
|
69
|
-
file_parts = File.open(md_file_name, 'r').read.split('---')
|
71
|
+
file_parts = File.open(md_file_name, 'r').read.split('---', 3)
|
70
72
|
@formatted_data = FormattedData.new(parse_yaml(file_parts[1],
|
71
73
|
md_file_name),
|
72
74
|
site_options)
|
@@ -104,7 +106,6 @@ module Zine
|
|
104
106
|
input: 'GFM',
|
105
107
|
auto_ids: false,
|
106
108
|
smart_quotes: %w[apos apos quot quot],
|
107
|
-
syntax_highlighter: 'rouge'
|
108
109
|
).to_html
|
109
110
|
@raw_text = nil
|
110
111
|
end
|
data/lib/zine/post.rb
CHANGED
@@ -5,7 +5,7 @@ module Zine
|
|
5
5
|
class Post < Page
|
6
6
|
def initialize(md_file_name, templates, site_options)
|
7
7
|
@source_file = md_file_name
|
8
|
-
file_parts = File.open(md_file_name, 'r').read.split('---')
|
8
|
+
file_parts = File.open(md_file_name, 'r').read.split('---', 3)
|
9
9
|
@formatted_data = FormattedData.new(parse_yaml(file_parts[1],
|
10
10
|
md_file_name),
|
11
11
|
site_options)
|
data/lib/zine/query.rb
ADDED
data/lib/zine/server.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require '
|
1
|
+
require 'zine/query'
|
2
2
|
require 'rainbow'
|
3
3
|
require 'rack'
|
4
4
|
require 'thin'
|
@@ -67,7 +67,7 @@ module Zine
|
|
67
67
|
(@delete_array.empty? && @upload_array.empty?)
|
68
68
|
uploader = Zine::Upload.new rel_path_build, upload_options,
|
69
69
|
@delete_array, @upload_array
|
70
|
-
uploader.upload_decision
|
70
|
+
uploader.upload_decision Query
|
71
71
|
end
|
72
72
|
end
|
73
73
|
end
|
@@ -1 +1 @@
|
|
1
|
-
*{margin:0;padding:0}html,body{height:100%}body{background-color:#fff;font-family:GillSansRegular,"Gill Sans MT","Gill Sans","Century Gothic",Calibri,"Trebuchet MS",sans-serif;line-height:1.618;color:#333;text-align:center;font-weight:300}#skiptocontent{height:1px;width:1px;position:absolute;overflow:hidden;top:-10px}h1,h2,h3,h4,h5,h6{color:#333;letter-spacing:0.1em}h1 a,h2 a,h3 a,h4 a,h5 a,h6 a{color:#414f7c;text-decoration:none}h1 a:hover,h2 a:hover,h3 a:hover,h4 a:hover,h5 a:hover,h6 a:hover{color:#212721}h1{font-weight:300;font-size:2.618em;margin:1.809em 0 0.809em}h2{font-weight:300;font-size:1.618em;margin:1.809em 0 0.809em}h3,h4,h5,h6{font-weight:400;font-size:1em;margin:1.809em 0 0.809em}p,li{margin:1em 0}ul{margin:0}a{color:#414f7c}a:hover{color:#212721}section{margin-bottom:1.618em}section>section{margin-bottom:3.236em}strong{font-weight:400}body>header{width:43em;text-align:center;margin:0 auto 0}body>header a{text-decoration:none;margin-left:0.5em;margin-right:0.5em}body>header,body>main,body>footer{display:block}body>header a{color:#414f7c}body>header a:hover{color:#212721}body>header a.extra{color:#414f7c;margin-left:1em}body>header a.extra:hover{color:#212721}body>header nav ul li{display:inline;list-style:none}.button{width:30px;height:30px;display:inline-block;background-size:100%;text-
|
1
|
+
*{margin:0;padding:0}html,body{height:100%}body{background-color:#fff;font-family:GillSansRegular,"Gill Sans MT","Gill Sans","Century Gothic",Calibri,"Trebuchet MS",sans-serif;line-height:1.618;color:#333;text-align:center;font-weight:300}#skiptocontent{height:1px;width:1px;position:absolute;overflow:hidden;top:-10px}h1,h2,h3,h4,h5,h6{color:#333;letter-spacing:0.1em}h1 a,h2 a,h3 a,h4 a,h5 a,h6 a{color:#414f7c;text-decoration:none}h1 a:hover,h2 a:hover,h3 a:hover,h4 a:hover,h5 a:hover,h6 a:hover{color:#212721}h1{font-weight:300;font-size:2.618em;margin:1.809em 0 0.809em}h2{font-weight:300;font-size:1.618em;margin:1.809em 0 0.809em}h3,h4,h5,h6{font-weight:400;font-size:1em;margin:1.809em 0 0.809em}p,li{margin:1em 0}ul{margin:0}a{color:#414f7c}a:hover{color:#212721}section{margin-bottom:1.618em}section>section{margin-bottom:3.236em}strong{font-weight:400}body>header{width:43em;text-align:center;margin:0 auto 0}body>header a{text-decoration:none;margin-left:0.5em;margin-right:0.5em}body>header,body>main,body>footer{display:block}body>header a{color:#414f7c}body>header a:hover{color:#212721}body>header a.extra{color:#414f7c;margin-left:1em}body>header a.extra:hover{color:#212721}body>header nav ul li{display:inline;list-style:none}.contact-list span{margin-left:40px}.button{width:30px;height:30px;display:inline-block;background-size:100%;text-align:left}.twitter{background:url("/assets/webicon-twitter-m.png");background-image:url("/assets/webicon-twitter.svg"),none}.rss{background:url("/assets/webicon-rss-m.png");background-image:url("/assets/webicon-rss.svg"),none}main{text-align:left;width:43em;margin:3em auto 2em}main li{margin-left:2.618em}.meta{color:#667}footer{width:43em;color:#667;border-top:4px solid #ddd;margin:3em auto 2em;overflow:hidden}footer .column{float:left;padding:1px;text-align:left;width:32%}footer .column ul{list-style:none}footer .column a,.tags a{color:#414f7c;text-decoration:none}footer .column a:hover,.tags a:hover{color:#212721;text-decoration:underline}.tags ul li{list-style:none;display:inline;font-variant:small-caps;font-size:1.2em}.archive a{text-decoration:none}ul.archive,ul.archive ul{margin-left:0}ul.archive li,ul.archive ul li{list-style:none;margin-left:0}.post pre{border:1px solid #ddd;background-color:#fff;padding:0 .4em}p.date{color:#667}pre{background-color:#eee;padding:1em;white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word}code{font-family:Consolas,Menlo,Monaco,"Lucida Console","Courier New",monospace,serif;font-size:0.8em}table{border-collapse:collapse;margin:0 auto}th,td{border:solid #ddd 1px;padding:0.5em 1.5em}blockquote{margin:2em 2em 2em 1em;padding:0 .75em 0 1.25em;border-left:2px solid #ddd;border-right:0px solid #ddd}.chart-png{margin:2em 0 2em;width:90%}.logo-png{float:left;margin-bottom:18px;margin-right:24px}@media all and (max-width: 736px){body>header,main,footer{width:86%;margin:0 auto 0;padding:12px 24px 12px}p{margin-bottom:2em}footer .column{width:100%}}
|
@@ -19,8 +19,6 @@ $desktopWidth: 43em;
|
|
19
19
|
$lightWeight: 300;
|
20
20
|
$heavyWeight: 400;
|
21
21
|
|
22
|
-
$siteBaseURL: 'https:\/\/mikekreuzer.com';
|
23
|
-
|
24
22
|
$regularFont: GillSansRegular, 'Gill Sans MT', 'Gill Sans', 'Century Gothic', Calibri, 'Trebuchet MS', sans-serif;
|
25
23
|
$monoFont: Consolas, Menlo, Monaco, 'Lucida Console', 'Courier New', monospace, serif;
|
26
24
|
|
@@ -61,21 +59,21 @@ h1,h2,h3,h4,h5,h6 {
|
|
61
59
|
}
|
62
60
|
|
63
61
|
h1 {
|
64
|
-
|
65
|
-
|
66
|
-
|
62
|
+
font-weight: $lightWeight;
|
63
|
+
font-size: 2.618em;
|
64
|
+
margin: 1.809em 0 0.809em;
|
67
65
|
}
|
68
66
|
|
69
67
|
h2 {
|
70
|
-
|
71
|
-
|
72
|
-
|
68
|
+
font-weight: $lightWeight;
|
69
|
+
font-size: 1.618em;
|
70
|
+
margin: 1.809em 0 0.809em;
|
73
71
|
}
|
74
72
|
|
75
73
|
h3, h4, h5, h6 {
|
76
|
-
|
77
|
-
|
78
|
-
|
74
|
+
font-weight: $heavyWeight;
|
75
|
+
font-size: 1em;
|
76
|
+
margin: 1.809em 0 0.809em;
|
79
77
|
}
|
80
78
|
|
81
79
|
p, li {
|
@@ -141,24 +139,26 @@ body > header nav ul li {
|
|
141
139
|
list-style: none;
|
142
140
|
}
|
143
141
|
|
142
|
+
.contact-list span {
|
143
|
+
margin-left: 40px;
|
144
|
+
}
|
145
|
+
|
144
146
|
.button {
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
text-align: left;
|
151
|
-
margin: 20px;
|
147
|
+
width: 30px;
|
148
|
+
height: 30px;
|
149
|
+
display: inline-block;
|
150
|
+
background-size: 100%;
|
151
|
+
text-align: left;
|
152
152
|
}
|
153
153
|
|
154
154
|
.twitter {
|
155
|
-
|
156
|
-
|
155
|
+
background: url('/assets/webicon-twitter-m.png');
|
156
|
+
background-image: url('/assets/webicon-twitter.svg'), none;
|
157
157
|
}
|
158
158
|
|
159
159
|
.rss {
|
160
|
-
|
161
|
-
|
160
|
+
background: url('/assets/webicon-rss-m.png');
|
161
|
+
background-image: url('/assets/webicon-rss.svg'), none;
|
162
162
|
}
|
163
163
|
|
164
164
|
main {
|
@@ -185,8 +185,9 @@ footer {
|
|
185
185
|
|
186
186
|
footer .column {
|
187
187
|
float: left;
|
188
|
-
|
188
|
+
padding: 1px;
|
189
189
|
text-align: left;
|
190
|
+
width: 32%;
|
190
191
|
}
|
191
192
|
|
192
193
|
footer .column ul { list-style: none; }
|
@@ -194,18 +195,18 @@ footer .column a, .tags a { color:$linkColour; text-decoration: none; }
|
|
194
195
|
footer .column a:hover, .tags a:hover { color:$hoverColour; text-decoration: underline; }
|
195
196
|
|
196
197
|
.tags ul li {
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
198
|
+
list-style: none;
|
199
|
+
display: inline;
|
200
|
+
font-variant: small-caps;
|
201
|
+
font-size:1.2em;
|
201
202
|
}
|
202
203
|
|
203
204
|
.archive a {
|
204
|
-
|
205
|
+
text-decoration: none;
|
205
206
|
}
|
206
207
|
|
207
208
|
ul.archive, ul.archive ul {
|
208
|
-
|
209
|
+
margin-left: 0;
|
209
210
|
}
|
210
211
|
|
211
212
|
ul.archive li, ul.archive ul li {
|
@@ -234,7 +235,7 @@ footer .rss img {
|
|
234
235
|
|
235
236
|
|
236
237
|
p.date {
|
237
|
-
|
238
|
+
color: $mediumGrey;
|
238
239
|
}
|
239
240
|
|
240
241
|
/*.post ul, .post ol {
|
@@ -242,14 +243,14 @@ p.date {
|
|
242
243
|
}*/
|
243
244
|
|
244
245
|
pre {
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
246
|
+
background-color: $codeBackgroundColour;
|
247
|
+
padding: 1em;
|
248
|
+
white-space: pre-wrap;
|
249
|
+
/* why necessary */
|
250
|
+
white-space: -moz-pre-wrap; /* Mozilla, since 1999 */
|
251
|
+
white-space: -pre-wrap; /* Opera 4-6 */
|
252
|
+
white-space: -o-pre-wrap; /* Opera 7 */
|
253
|
+
word-wrap: break-word;
|
253
254
|
}
|
254
255
|
|
255
256
|
code {
|
@@ -268,6 +269,16 @@ code {
|
|
268
269
|
background-color: $codeBackgroundColour;
|
269
270
|
}*/
|
270
271
|
|
272
|
+
table {
|
273
|
+
border-collapse: collapse;
|
274
|
+
margin: 0 auto;
|
275
|
+
}
|
276
|
+
|
277
|
+
th, td {
|
278
|
+
border: solid $lightGrey 1px;
|
279
|
+
padding: 0.5em 1.5em;
|
280
|
+
}
|
281
|
+
|
271
282
|
/* quotes */
|
272
283
|
blockquote {
|
273
284
|
margin: 2em 2em 2em 1em;
|
@@ -276,6 +287,17 @@ blockquote {
|
|
276
287
|
border-right: 0px solid $borderColour;
|
277
288
|
}
|
278
289
|
|
290
|
+
.chart-png {
|
291
|
+
margin: 2em 0 2em;
|
292
|
+
width:90%;
|
293
|
+
}
|
294
|
+
|
295
|
+
.logo-png {
|
296
|
+
float:left;
|
297
|
+
margin-bottom:18px;
|
298
|
+
margin-right: 24px;
|
299
|
+
}
|
300
|
+
|
279
301
|
@media all and (max-width: 736px) {
|
280
302
|
/* was max-device-width: 1242px */
|
281
303
|
body > header, main, footer {
|
@@ -286,11 +308,11 @@ blockquote {
|
|
286
308
|
p {
|
287
309
|
margin-bottom:2em;
|
288
310
|
}
|
289
|
-
|
311
|
+
/*.button {
|
290
312
|
width: 50px;
|
291
313
|
height: 50px;
|
292
314
|
margin: 20px;
|
293
|
-
}
|
315
|
+
}*/
|
294
316
|
footer .column {
|
295
317
|
width: 100%;
|
296
318
|
}
|
@@ -1,23 +1,26 @@
|
|
1
1
|
<footer>
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
<h3>Me elsewhere</h3>
|
8
|
-
<ul>
|
9
|
-
<% for @link in page[:links_array] %>
|
10
|
-
<li><a href="<%= @link['uri'] %>"><%= @link['name'] %></a></li>
|
11
|
-
<% end %>
|
2
|
+
<div class="column">
|
3
|
+
<h3>Contact me</h3>
|
4
|
+
<ul class="contact-list">
|
5
|
+
<li><a href="https://twitter.com/<%= page[:twitter_name] %>" class="button twitter"><span>Twitter</span></a></li>
|
6
|
+
<li><a href="<%= page[:site_URL] %>/rss.xml" rel="home" type="application/rss+xml" class="button rss"><span>Subscribe</span></a></li>
|
12
7
|
</ul>
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
8
|
+
</div>
|
9
|
+
<div class="column">
|
10
|
+
<h3>Me elsewhere</h3>
|
11
|
+
<ul>
|
12
|
+
<% for @link in page[:links_array] %>
|
13
|
+
<li><a href="<%= @link['uri'] %>"><%= @link['name'] %></a></li>
|
14
|
+
<% end %>
|
15
|
+
</ul>
|
16
|
+
</div>
|
17
|
+
<div class="column">
|
18
|
+
<h3>The fine print</h3>
|
19
|
+
<ul>
|
20
|
+
<li>Built with <a href="https://mikekreuzer.com/projects/zine/">Zine</a></li>
|
21
|
+
<li>© 2020<span> <%= page[:site_author] %></span></li>
|
22
|
+
</ul>
|
23
|
+
</div>
|
21
24
|
</footer>
|
22
|
-
|
25
|
+
</body>
|
23
26
|
</html>
|
@@ -6,8 +6,9 @@
|
|
6
6
|
<meta name="description" content="<%= page[:site_description] %>">
|
7
7
|
<title><%= page[:site_name] %> | <%= page[:title] %></title>
|
8
8
|
<link rel="home" href="<%= page[:site_URL] %>/rss.xml" type="application/rss+xml" title="<%= page[:site_name] %>">
|
9
|
-
<link rel="stylesheet" href="
|
10
|
-
<link rel="apple-touch-icon" href="
|
9
|
+
<link rel="stylesheet" href="/screen.css">
|
10
|
+
<link rel="apple-touch-icon" href="/apple-touch-icon.png">
|
11
|
+
<!--<link rel="canonical" href="<%= page[:uri] %>" />-->
|
11
12
|
</head>
|
12
13
|
<body>
|
13
14
|
<div id="skiptocontent">
|
@@ -19,9 +20,10 @@
|
|
19
20
|
<nav>
|
20
21
|
<ul>
|
21
22
|
<li><a href="<%= page[:site_URL] %>">Home</a></li>
|
22
|
-
<li><a href="
|
23
|
-
<li><a href="
|
24
|
-
|
23
|
+
<li><a href="/articles.html">Articles</a></li>
|
24
|
+
<li><a href="/tags/index.html">Tags</a></li>
|
25
|
+
<li><a href="/about.html">About</a></li>
|
26
|
+
</ul>
|
25
27
|
</nav>
|
26
28
|
</header>
|
27
29
|
<a name="maincontent"></a>
|
data/lib/zine/skeleton/zine.yaml
CHANGED
@@ -33,8 +33,9 @@ templates:
|
|
33
33
|
tag: tag
|
34
34
|
tag_index: tag_index
|
35
35
|
upload:
|
36
|
+
cloudfront_distrib: ID or ''
|
36
37
|
credentials: /local/absolute/path/to/yaml/file/with/username/password/or/access_token
|
37
|
-
host: 127.0.0.1
|
38
|
-
method: none|github|sftp
|
38
|
+
host: eg 127.0.0.1, or for AWS region:bucket_name
|
39
|
+
method: none|aws|github|sftp
|
39
40
|
path_or_repo: /remote/absolute/path/to/html|fullname/repo
|
40
41
|
verbose: true
|
data/lib/zine/upload.rb
CHANGED
@@ -1,12 +1,12 @@
|
|
1
|
-
require 'highline'
|
2
1
|
require 'rainbow'
|
3
2
|
require 'set'
|
4
3
|
require 'zine'
|
4
|
+
require 'zine/uploader_aws'
|
5
5
|
require 'zine/uploader_github'
|
6
6
|
require 'zine/uploader_sftp'
|
7
7
|
|
8
8
|
module Zine
|
9
|
-
# Deploy changes to a remote host, via SFTP or using the GitHub
|
9
|
+
# Deploy changes to a remote host, via SFTP or using the AWS or GitHub API
|
10
10
|
class Upload
|
11
11
|
def initialize(build_dir, options, delete_file_array, upload_file_array)
|
12
12
|
if options['method'] == 'none'
|
@@ -24,7 +24,7 @@ module Zine
|
|
24
24
|
def upload_decision(query_class)
|
25
25
|
return if @no_upload
|
26
26
|
cli = query_class.new
|
27
|
-
answer = cli.
|
27
|
+
answer = cli.call 'Upload files? (Y/n)'
|
28
28
|
return if answer != 'Y'
|
29
29
|
puts Rainbow('Connecting...').green
|
30
30
|
upload
|
@@ -46,6 +46,15 @@ module Zine
|
|
46
46
|
exit
|
47
47
|
end
|
48
48
|
|
49
|
+
def aws_upload
|
50
|
+
uploader = Zine::UploaderAWS.new(@build_dir,
|
51
|
+
@options,
|
52
|
+
@credentials,
|
53
|
+
@delete_file_array,
|
54
|
+
@upload_file_array)
|
55
|
+
uploader.upload
|
56
|
+
end
|
57
|
+
|
49
58
|
def github_upload
|
50
59
|
uploader = Zine::UploaderGitHub.new(@build_dir,
|
51
60
|
@options,
|
@@ -65,7 +74,9 @@ module Zine
|
|
65
74
|
end
|
66
75
|
|
67
76
|
def upload
|
68
|
-
if @options['method'] == '
|
77
|
+
if @options['method'] == 'aws'
|
78
|
+
aws_upload
|
79
|
+
elsif @options['method'] == 'sftp'
|
69
80
|
sftp_upload
|
70
81
|
elsif @options['method'] == 'github'
|
71
82
|
github_upload
|
@@ -0,0 +1,96 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'aws-sdk-cloudfront'
|
4
|
+
require 'aws-sdk-s3'
|
5
|
+
require 'rack/mime'
|
6
|
+
require 'rainbow'
|
7
|
+
require 'set'
|
8
|
+
|
9
|
+
module Zine
|
10
|
+
# Deploy changes to an AWS S3 bucket and invalidate the Cloudfront cache
|
11
|
+
class UploaderAWS
|
12
|
+
def initialize(build_dir, options, credentials, delete_file_array,
|
13
|
+
upload_file_array)
|
14
|
+
return unless options['method'] == 'aws'
|
15
|
+
|
16
|
+
@build_dir = build_dir
|
17
|
+
ENV['AWS_REGION'], @bucket_name = options['host'].split(':')
|
18
|
+
@path = options['path_or_repo']
|
19
|
+
@cf_distribution_id = options['cloudfront_distrib']
|
20
|
+
|
21
|
+
@verbose = options['verbose']
|
22
|
+
store_credentials credentials
|
23
|
+
@delete_file_array = Set.new(delete_file_array).to_a
|
24
|
+
@upload_file_array = Set.new(upload_file_array).to_a
|
25
|
+
|
26
|
+
@s3 = Aws::S3::Client.new
|
27
|
+
@cf = Aws::CloudFront::Client.new
|
28
|
+
end
|
29
|
+
|
30
|
+
def upload
|
31
|
+
delete
|
32
|
+
deploy
|
33
|
+
invalidate
|
34
|
+
rescue Aws::S3::Errors::ServiceError => err
|
35
|
+
puts Rainbow("S3 error: #{err}").red
|
36
|
+
end
|
37
|
+
|
38
|
+
private
|
39
|
+
|
40
|
+
def clean_path(path)
|
41
|
+
path.to_s
|
42
|
+
.delete_prefix('/')
|
43
|
+
.delete_suffix('/')
|
44
|
+
end
|
45
|
+
|
46
|
+
def delete
|
47
|
+
@delete_file_array.each do |rel_path|
|
48
|
+
remote_path = clean_path(rel_path)
|
49
|
+
@s3.delete_object(bucket: @bucket_name, key: remote_path)
|
50
|
+
puts "Delete: #{remote_path}" if @verbose
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def deploy
|
55
|
+
@upload_file_array.each do |rel_path|
|
56
|
+
deploy_one_file(File.join(@build_dir, rel_path),
|
57
|
+
clean_path(rel_path))
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def deploy_one_file(local_path, remote_path)
|
62
|
+
File.open(local_path, 'rb') do |file|
|
63
|
+
content_type = Rack::Mime.mime_type(File.extname(local_path))
|
64
|
+
@s3.put_object(bucket: @bucket_name,
|
65
|
+
key: remote_path,
|
66
|
+
content_type: content_type,
|
67
|
+
body: file)
|
68
|
+
puts "Add: #{remote_path}" if @verbose
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
def invalidate
|
73
|
+
changes = Set.new(@upload_file_array + @delete_file_array).to_a
|
74
|
+
return unless changes.count.positive?
|
75
|
+
|
76
|
+
puts 'Invalidating cache' if @verbose
|
77
|
+
string_changes = changes.map do |path|
|
78
|
+
path.to_s
|
79
|
+
.delete_prefix('/')
|
80
|
+
.prepend('/')
|
81
|
+
end
|
82
|
+
string_changes << '/'
|
83
|
+
@cf.create_invalidation(
|
84
|
+
distribution_id: @cf_distribution_id,
|
85
|
+
invalidation_batch: { paths: { quantity: string_changes.count,
|
86
|
+
items: string_changes },
|
87
|
+
caller_reference: Time.now.to_i.to_s }
|
88
|
+
)
|
89
|
+
end
|
90
|
+
|
91
|
+
def store_credentials(creds)
|
92
|
+
ENV['AWS_ACCESS_KEY_ID'] = creds['username']
|
93
|
+
ENV['AWS_SECRET_ACCESS_KEY'] = creds['password']
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
data/lib/zine/version.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.15.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mike Kreuzer
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-05-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -16,156 +16,184 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '1
|
19
|
+
version: '2.1'
|
20
20
|
- - ">="
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version: 1.
|
22
|
+
version: 2.1.4
|
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: '1
|
29
|
+
version: '2.1'
|
30
30
|
- - ">="
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version: 1.
|
32
|
+
version: 2.1.4
|
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.9.
|
39
|
+
version: 0.9.10
|
40
40
|
type: :development
|
41
41
|
prerelease: false
|
42
42
|
version_requirements: !ruby/object:Gem::Requirement
|
43
43
|
requirements:
|
44
44
|
- - "~>"
|
45
45
|
- !ruby/object:Gem::Version
|
46
|
-
version: 0.9.
|
46
|
+
version: 0.9.10
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: rake
|
49
49
|
requirement: !ruby/object:Gem::Requirement
|
50
50
|
requirements:
|
51
51
|
- - "~>"
|
52
52
|
- !ruby/object:Gem::Version
|
53
|
-
version: '
|
53
|
+
version: '13.0'
|
54
|
+
- - ">="
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: 13.0.1
|
54
57
|
type: :development
|
55
58
|
prerelease: false
|
56
59
|
version_requirements: !ruby/object:Gem::Requirement
|
57
60
|
requirements:
|
58
61
|
- - "~>"
|
59
62
|
- !ruby/object:Gem::Version
|
60
|
-
version: '
|
63
|
+
version: '13.0'
|
64
|
+
- - ">="
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: 13.0.1
|
61
67
|
- !ruby/object:Gem::Dependency
|
62
68
|
name: rspec
|
63
69
|
requirement: !ruby/object:Gem::Requirement
|
64
70
|
requirements:
|
65
71
|
- - "~>"
|
66
72
|
- !ruby/object:Gem::Version
|
67
|
-
version: '3.
|
73
|
+
version: '3.9'
|
68
74
|
type: :development
|
69
75
|
prerelease: false
|
70
76
|
version_requirements: !ruby/object:Gem::Requirement
|
71
77
|
requirements:
|
72
78
|
- - "~>"
|
73
79
|
- !ruby/object:Gem::Version
|
74
|
-
version: '3.
|
80
|
+
version: '3.9'
|
75
81
|
- !ruby/object:Gem::Dependency
|
76
82
|
name: simplecov
|
77
83
|
requirement: !ruby/object:Gem::Requirement
|
78
84
|
requirements:
|
79
85
|
- - "~>"
|
80
86
|
- !ruby/object:Gem::Version
|
81
|
-
version: 0.
|
87
|
+
version: 0.18.5
|
82
88
|
type: :development
|
83
89
|
prerelease: false
|
84
90
|
version_requirements: !ruby/object:Gem::Requirement
|
85
91
|
requirements:
|
86
92
|
- - "~>"
|
87
93
|
- !ruby/object:Gem::Version
|
88
|
-
version: 0.
|
94
|
+
version: 0.18.5
|
89
95
|
- !ruby/object:Gem::Dependency
|
90
|
-
name:
|
96
|
+
name: aws-sdk-cloudfront
|
91
97
|
requirement: !ruby/object:Gem::Requirement
|
92
98
|
requirements:
|
93
99
|
- - "~>"
|
94
100
|
- !ruby/object:Gem::Version
|
95
|
-
version: '1.
|
101
|
+
version: '1.27'
|
96
102
|
- - ">="
|
97
103
|
- !ruby/object:Gem::Version
|
98
|
-
version: 1.
|
104
|
+
version: 1.27.1
|
99
105
|
type: :runtime
|
100
106
|
prerelease: false
|
101
107
|
version_requirements: !ruby/object:Gem::Requirement
|
102
108
|
requirements:
|
103
109
|
- - "~>"
|
104
110
|
- !ruby/object:Gem::Version
|
105
|
-
version: '1.
|
111
|
+
version: '1.27'
|
106
112
|
- - ">="
|
107
113
|
- !ruby/object:Gem::Version
|
108
|
-
version: 1.
|
114
|
+
version: 1.27.1
|
109
115
|
- !ruby/object:Gem::Dependency
|
110
|
-
name:
|
116
|
+
name: aws-sdk-s3
|
111
117
|
requirement: !ruby/object:Gem::Requirement
|
112
118
|
requirements:
|
113
119
|
- - "~>"
|
114
120
|
- !ruby/object:Gem::Version
|
115
|
-
version: '
|
116
|
-
- - ">="
|
117
|
-
- !ruby/object:Gem::Version
|
118
|
-
version: 0.3.1
|
121
|
+
version: '1.66'
|
119
122
|
type: :runtime
|
120
123
|
prerelease: false
|
121
124
|
version_requirements: !ruby/object:Gem::Requirement
|
122
125
|
requirements:
|
123
126
|
- - "~>"
|
124
127
|
- !ruby/object:Gem::Version
|
125
|
-
version: '
|
126
|
-
|
128
|
+
version: '1.66'
|
129
|
+
- !ruby/object:Gem::Dependency
|
130
|
+
name: htmlcompressor
|
131
|
+
requirement: !ruby/object:Gem::Requirement
|
132
|
+
requirements:
|
133
|
+
- - "~>"
|
127
134
|
- !ruby/object:Gem::Version
|
128
|
-
version: 0.
|
135
|
+
version: 0.4.0
|
136
|
+
type: :runtime
|
137
|
+
prerelease: false
|
138
|
+
version_requirements: !ruby/object:Gem::Requirement
|
139
|
+
requirements:
|
140
|
+
- - "~>"
|
141
|
+
- !ruby/object:Gem::Version
|
142
|
+
version: 0.4.0
|
129
143
|
- !ruby/object:Gem::Dependency
|
130
144
|
name: kramdown
|
131
145
|
requirement: !ruby/object:Gem::Requirement
|
132
146
|
requirements:
|
133
147
|
- - "~>"
|
134
148
|
- !ruby/object:Gem::Version
|
135
|
-
version: '
|
149
|
+
version: '2.2'
|
136
150
|
- - ">="
|
137
151
|
- !ruby/object:Gem::Version
|
138
|
-
version:
|
152
|
+
version: 2.2.1
|
139
153
|
type: :runtime
|
140
154
|
prerelease: false
|
141
155
|
version_requirements: !ruby/object:Gem::Requirement
|
142
156
|
requirements:
|
143
157
|
- - "~>"
|
144
158
|
- !ruby/object:Gem::Version
|
145
|
-
version: '
|
159
|
+
version: '2.2'
|
146
160
|
- - ">="
|
147
161
|
- !ruby/object:Gem::Version
|
148
|
-
version:
|
162
|
+
version: 2.2.1
|
163
|
+
- !ruby/object:Gem::Dependency
|
164
|
+
name: kramdown-parser-gfm
|
165
|
+
requirement: !ruby/object:Gem::Requirement
|
166
|
+
requirements:
|
167
|
+
- - "~>"
|
168
|
+
- !ruby/object:Gem::Version
|
169
|
+
version: '1.1'
|
170
|
+
type: :runtime
|
171
|
+
prerelease: false
|
172
|
+
version_requirements: !ruby/object:Gem::Requirement
|
173
|
+
requirements:
|
174
|
+
- - "~>"
|
175
|
+
- !ruby/object:Gem::Version
|
176
|
+
version: '1.1'
|
149
177
|
- !ruby/object:Gem::Dependency
|
150
178
|
name: listen
|
151
179
|
requirement: !ruby/object:Gem::Requirement
|
152
180
|
requirements:
|
153
181
|
- - "~>"
|
154
182
|
- !ruby/object:Gem::Version
|
155
|
-
version: '3.
|
183
|
+
version: '3.2'
|
156
184
|
- - ">="
|
157
185
|
- !ruby/object:Gem::Version
|
158
|
-
version: 3.1
|
186
|
+
version: 3.2.1
|
159
187
|
type: :runtime
|
160
188
|
prerelease: false
|
161
189
|
version_requirements: !ruby/object:Gem::Requirement
|
162
190
|
requirements:
|
163
191
|
- - "~>"
|
164
192
|
- !ruby/object:Gem::Version
|
165
|
-
version: '3.
|
193
|
+
version: '3.2'
|
166
194
|
- - ">="
|
167
195
|
- !ruby/object:Gem::Version
|
168
|
-
version: 3.1
|
196
|
+
version: 3.2.1
|
169
197
|
- !ruby/object:Gem::Dependency
|
170
198
|
name: net-sftp
|
171
199
|
requirement: !ruby/object:Gem::Requirement
|
@@ -192,54 +220,42 @@ dependencies:
|
|
192
220
|
requirements:
|
193
221
|
- - "~>"
|
194
222
|
- !ruby/object:Gem::Version
|
195
|
-
version: '4.
|
223
|
+
version: '4.18'
|
196
224
|
type: :runtime
|
197
225
|
prerelease: false
|
198
226
|
version_requirements: !ruby/object:Gem::Requirement
|
199
227
|
requirements:
|
200
228
|
- - "~>"
|
201
229
|
- !ruby/object:Gem::Version
|
202
|
-
version: '4.
|
230
|
+
version: '4.18'
|
203
231
|
- !ruby/object:Gem::Dependency
|
204
232
|
name: rainbow
|
205
233
|
requirement: !ruby/object:Gem::Requirement
|
206
234
|
requirements:
|
207
235
|
- - "~>"
|
208
236
|
- !ruby/object:Gem::Version
|
209
|
-
version: '
|
210
|
-
- - ">="
|
211
|
-
- !ruby/object:Gem::Version
|
212
|
-
version: 2.2.1
|
237
|
+
version: '3.0'
|
213
238
|
type: :runtime
|
214
239
|
prerelease: false
|
215
240
|
version_requirements: !ruby/object:Gem::Requirement
|
216
241
|
requirements:
|
217
242
|
- - "~>"
|
218
243
|
- !ruby/object:Gem::Version
|
219
|
-
version: '
|
220
|
-
- - ">="
|
221
|
-
- !ruby/object:Gem::Version
|
222
|
-
version: 2.2.1
|
244
|
+
version: '3.0'
|
223
245
|
- !ruby/object:Gem::Dependency
|
224
246
|
name: sassc
|
225
247
|
requirement: !ruby/object:Gem::Requirement
|
226
248
|
requirements:
|
227
249
|
- - "~>"
|
228
250
|
- !ruby/object:Gem::Version
|
229
|
-
version: '
|
230
|
-
- - ">="
|
231
|
-
- !ruby/object:Gem::Version
|
232
|
-
version: 1.11.2
|
251
|
+
version: '2.3'
|
233
252
|
type: :runtime
|
234
253
|
prerelease: false
|
235
254
|
version_requirements: !ruby/object:Gem::Requirement
|
236
255
|
requirements:
|
237
256
|
- - "~>"
|
238
257
|
- !ruby/object:Gem::Version
|
239
|
-
version: '
|
240
|
-
- - ">="
|
241
|
-
- !ruby/object:Gem::Version
|
242
|
-
version: 1.11.2
|
258
|
+
version: '2.3'
|
243
259
|
- !ruby/object:Gem::Dependency
|
244
260
|
name: thin
|
245
261
|
requirement: !ruby/object:Gem::Requirement
|
@@ -260,23 +276,23 @@ dependencies:
|
|
260
276
|
requirements:
|
261
277
|
- - "~>"
|
262
278
|
- !ruby/object:Gem::Version
|
263
|
-
version: '0
|
279
|
+
version: '1.0'
|
264
280
|
- - ">="
|
265
281
|
- !ruby/object:Gem::Version
|
266
|
-
version: 0.
|
282
|
+
version: 1.0.1
|
267
283
|
type: :runtime
|
268
284
|
prerelease: false
|
269
285
|
version_requirements: !ruby/object:Gem::Requirement
|
270
286
|
requirements:
|
271
287
|
- - "~>"
|
272
288
|
- !ruby/object:Gem::Version
|
273
|
-
version: '0
|
289
|
+
version: '1.0'
|
274
290
|
- - ">="
|
275
291
|
- !ruby/object:Gem::Version
|
276
|
-
version: 0.
|
292
|
+
version: 1.0.1
|
277
293
|
description: |-
|
278
294
|
Yet another blog aware static site generator.
|
279
|
-
|
295
|
+
There are many like it, but this one is mine.
|
280
296
|
email:
|
281
297
|
- mike@mikekreuzer.com
|
282
298
|
executables:
|
@@ -296,6 +312,7 @@ files:
|
|
296
312
|
- lib/zine/page.rb
|
297
313
|
- lib/zine/post.rb
|
298
314
|
- lib/zine/posts_and_headlines.rb
|
315
|
+
- lib/zine/query.rb
|
299
316
|
- lib/zine/server.rb
|
300
317
|
- lib/zine/skeleton/source/about.md
|
301
318
|
- lib/zine/skeleton/source/assets/webicon-rss-m.png
|
@@ -303,6 +320,7 @@ files:
|
|
303
320
|
- lib/zine/skeleton/source/assets/webicon-twitter-m.png
|
304
321
|
- lib/zine/skeleton/source/assets/webicon-twitter.svg
|
305
322
|
- lib/zine/skeleton/source/posts/2017-01-25-my-new-blog.md
|
323
|
+
- lib/zine/skeleton/source/robots.txt
|
306
324
|
- lib/zine/skeleton/source/screen.css
|
307
325
|
- lib/zine/skeleton/source/styles/screen.scss
|
308
326
|
- lib/zine/skeleton/source/templates/articles.erb
|
@@ -320,11 +338,12 @@ files:
|
|
320
338
|
- lib/zine/tag.rb
|
321
339
|
- lib/zine/templates.rb
|
322
340
|
- lib/zine/upload.rb
|
341
|
+
- lib/zine/uploader_aws.rb
|
323
342
|
- lib/zine/uploader_github.rb
|
324
343
|
- lib/zine/uploader_sftp.rb
|
325
344
|
- lib/zine/version.rb
|
326
345
|
- lib/zine/watcher.rb
|
327
|
-
homepage: https://
|
346
|
+
homepage: https://mikekreuzer.com/projects/zine/
|
328
347
|
licenses:
|
329
348
|
- MIT
|
330
349
|
metadata: {}
|
@@ -336,15 +355,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
336
355
|
requirements:
|
337
356
|
- - ">="
|
338
357
|
- !ruby/object:Gem::Version
|
339
|
-
version: 2.
|
358
|
+
version: '2.3'
|
340
359
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
341
360
|
requirements:
|
342
361
|
- - ">="
|
343
362
|
- !ruby/object:Gem::Version
|
344
363
|
version: '0'
|
345
364
|
requirements: []
|
346
|
-
|
347
|
-
rubygems_version: 2.6.13
|
365
|
+
rubygems_version: 3.0.6
|
348
366
|
signing_key:
|
349
367
|
specification_version: 4
|
350
368
|
summary: Yet another blog aware static site generator.
|