zine 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/CHANGELOG.md +241 -0
- data/LICENSE +21 -0
- data/README.md +82 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/bin/zine +5 -0
- data/lib/zine.rb +156 -0
- data/lib/zine/cli.rb +57 -0
- data/lib/zine/data_page.rb +23 -0
- data/lib/zine/feed.rb +44 -0
- data/lib/zine/page.rb +118 -0
- data/lib/zine/post.rb +40 -0
- data/lib/zine/server.rb +40 -0
- data/lib/zine/skeleton/source/about.md +5 -0
- data/lib/zine/skeleton/source/posts/2017-01-25-my-new-blog.md +11 -0
- data/lib/zine/skeleton/source/screen.css +1 -0
- data/lib/zine/skeleton/source/templates/default.erb +8 -0
- data/lib/zine/skeleton/source/templates/footer_partial.erb +11 -0
- data/lib/zine/skeleton/source/templates/header_partial.erb +23 -0
- data/lib/zine/skeleton/source/templates/home.erb +18 -0
- data/lib/zine/skeleton/source/templates/new_post.erb +11 -0
- data/lib/zine/skeleton/source/templates/post.erb +16 -0
- data/lib/zine/skeleton/source/templates/post_index.erb +15 -0
- data/lib/zine/skeleton/source/templates/tag.erb +15 -0
- data/lib/zine/skeleton/source/templates/tag_index.erb +15 -0
- data/lib/zine/skeleton/zine.yaml +26 -0
- data/lib/zine/tag.rb +57 -0
- data/lib/zine/templates.rb +14 -0
- data/lib/zine/version.rb +3 -0
- metadata +200 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: a7ad3b9767a3c9799f9b328a1f28ca0435ca3b1b
|
4
|
+
data.tar.gz: ede87c6d35d6aae470c47c9df26c98259cbfe940
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 6e186e86c35fab7f7bd41ac7357c11585cf3a275bdc56618c426e79c9957ea138d45ffe46eddb3fd8986fabc408114f064bb209b2f20eb90427529cbe20ce7a2
|
7
|
+
data.tar.gz: 2d5f1023c075f0cb4b49c1c75ff9f2828f674e13a94ecff38e380f4021f3daa6911d332830ef71d57d5087cba0b9650ff8347811061da9ee3c0d1cd114968e19
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,241 @@
|
|
1
|
+
# 100 Days Of Code - Log
|
2
|
+
|
3
|
+
### Day 1: January 24, 2017
|
4
|
+
|
5
|
+
**Today's Progress**:
|
6
|
+
|
7
|
+
- set up the blog & repos, my first project is a static blog engine called Zine
|
8
|
+
- set up bundler, wrote some rspec tests & got the gem to build & installed it locally
|
9
|
+
- using Thor for the menu & as a generator for scaffold files for new blog posts is the first functional part of the gem
|
10
|
+
|
11
|
+
**Thoughts:**
|
12
|
+
|
13
|
+
I might push the code up every few days, not sure about that yet.
|
14
|
+
|
15
|
+
**Links to work**
|
16
|
+
|
17
|
+
1. [(empty) Zine repo](https://github.com/mikekreuzer/zine)
|
18
|
+
2. [Tweet](https://twitter.com/mikekreuzer/status/823876650316111872)
|
19
|
+
3. [Blog](https://mikekreuzer.com/blog/2017/1/100-days-of-code.html)
|
20
|
+
|
21
|
+
### Day 2: January 25, 2017
|
22
|
+
|
23
|
+
**Today's Progress**:
|
24
|
+
|
25
|
+
- generate a (still mostly empty) new site scaffold
|
26
|
+
- read a YAML options file
|
27
|
+
- have a Site object pushing file names to Page objects
|
28
|
+
|
29
|
+
**Thoughts:**
|
30
|
+
|
31
|
+
Next up is the the meat of the blog engine - reading the YAML & Markdown, generating the folder structure & pushing text through Kramdown & ERB. That's where I'd hoped to get to tonight.
|
32
|
+
|
33
|
+
**Links to work**
|
34
|
+
|
35
|
+
1. [Tweet](https://twitter.com/mikekreuzer/status/824237414306627589)
|
36
|
+
|
37
|
+
### Day 3: January 26, 2017
|
38
|
+
|
39
|
+
**Today's Progress**:
|
40
|
+
|
41
|
+
- reading the files' YAML front matter & Markdown
|
42
|
+
- generating the folder structure from the YAML dates (& spending ages with date errors in Psych.... they need to be quoted it turns out, it did used to know that I think)
|
43
|
+
- Kramdown
|
44
|
+
|
45
|
+
**Thoughts:**
|
46
|
+
|
47
|
+
Didn't get as far as the ERB templates - still have to translate my current Jade templates across, probably via the Jade's HTML output. That's for tomorrow.
|
48
|
+
|
49
|
+
Big time saver today was remembering to chain bash commands:
|
50
|
+
```bash
|
51
|
+
gem uninstall zine -x && gem build zine.gemspec && gem install ./zine-0.1.0.gem
|
52
|
+
```
|
53
|
+
|
54
|
+
**Links to work**
|
55
|
+
|
56
|
+
1. [Tweet](https://twitter.com/mikekreuzer/status/824602333359190017)
|
57
|
+
|
58
|
+
### Day 4: January 27, 2017
|
59
|
+
|
60
|
+
**Today's Progress**:
|
61
|
+
|
62
|
+
- moved the log to the Zine repo
|
63
|
+
- went with Slim templates instead - rendering & partials both working, yet to translate the existing templates though
|
64
|
+
- wrote some more rspec tests, played with cucumber for a while but decided not to use it, it's a DSL too far.
|
65
|
+
|
66
|
+
**Thoughts:**
|
67
|
+
|
68
|
+
Couldn't resist the terse syntax of Slim. Lagging behind on the test front.
|
69
|
+
|
70
|
+
**Links to work**
|
71
|
+
|
72
|
+
1. [Tweet](https://twitter.com/mikekreuzer/status/824948475355762688)
|
73
|
+
|
74
|
+
### Day 5: January 28, 2017
|
75
|
+
|
76
|
+
**Today's Progress**:
|
77
|
+
|
78
|
+
- dropped Slim, back with ERB - translation was going to take too long
|
79
|
+
- added HTML compression, even though the difference is only around 1kb a page
|
80
|
+
|
81
|
+
**Thoughts:**
|
82
|
+
|
83
|
+
Simplicity rules. Terse syntax is neat, but yet another DSL is a burden.
|
84
|
+
|
85
|
+
On a positive note I feel like I'm on a bit of a roll with this project now. Tags next, I think.
|
86
|
+
|
87
|
+
**Links to work**
|
88
|
+
|
89
|
+
1. [Tweet](https://twitter.com/mikekreuzer/status/825327843059994625)
|
90
|
+
|
91
|
+
### Day 6: January 29, 2017
|
92
|
+
|
93
|
+
**Today's Progress**:
|
94
|
+
|
95
|
+
- ERB partials
|
96
|
+
- working posts & tags
|
97
|
+
- draft of the README.md file
|
98
|
+
|
99
|
+
**Thoughts:**
|
100
|
+
|
101
|
+
I'm occasionally missing the safety check of a compile failing when using a compiled language. Also structs in Ruby aren't the best... but those are both partly a problem of my development habits. Still thinking about Cucumber & Slim, and seeing DSLs as a cost, as a topic for a blog post. Thinking of swapping colorize for pastel too (only because of the monkey patching).
|
102
|
+
|
103
|
+
Next up: the home & article list pages, pages that aren't posts like the about page, and copying across the CSS - all up that would probably represent a minimum viable product. Much less than I plan to do in the end, but enough for a first cut of the gem I think. End of week one tomorrow!
|
104
|
+
|
105
|
+
**Links to work**
|
106
|
+
|
107
|
+
1. [Tweet](https://twitter.com/mikekreuzer/status/825689819204300800)
|
108
|
+
|
109
|
+
### Day 7: January 30, 2017
|
110
|
+
|
111
|
+
**Today's Progress**:
|
112
|
+
|
113
|
+
- delete added as a CLI option
|
114
|
+
- refactoring of tags (to be continued, to swap out ERB::Util for a slug name method, I think)
|
115
|
+
|
116
|
+
**Thoughts:**
|
117
|
+
|
118
|
+
Might push the template and CSS folders into a layouts/default folder, in case anyone ever wants to make other layouts. Tomorrow. Busy day. One week though, nice.
|
119
|
+
|
120
|
+
**Links to work**
|
121
|
+
|
122
|
+
1. [Tweet](https://twitter.com/mikekreuzer/status/826045386405998594)
|
123
|
+
|
124
|
+
### Day 8: January 31, 2017
|
125
|
+
|
126
|
+
**Today's Progress**:
|
127
|
+
|
128
|
+
- replaced Colorize with Rainbow
|
129
|
+
- replaced ERB::Util with a slug name generator
|
130
|
+
- added dates to tag lists
|
131
|
+
|
132
|
+
**Thoughts:**
|
133
|
+
|
134
|
+
Refactoring my monolithic page class tomorrow, cleaning up tags was preparation for that.
|
135
|
+
|
136
|
+
**Links to work**
|
137
|
+
|
138
|
+
1. [Tweet](https://twitter.com/mikekreuzer/status/826414672542732288)
|
139
|
+
|
140
|
+
### Day 9: February 1, 2017
|
141
|
+
|
142
|
+
**Today's Progress**:
|
143
|
+
|
144
|
+
- Ripley for February
|
145
|
+
- Ripley 0.7.1
|
146
|
+
|
147
|
+
**Thoughts:**
|
148
|
+
|
149
|
+
A very brief break from Zine to detour back to some Elixir coding. The March edition of Ripley could be a Zine site, in time for its first anniversary in April.
|
150
|
+
|
151
|
+
**Links to work**
|
152
|
+
|
153
|
+
1. [Ripley](https://mikekreuzer.github.io/Ripley/)
|
154
|
+
2. [Ripley code](https://github.com/mikekreuzer/Ripley)
|
155
|
+
3. [Tweet](https://twitter.com/mikekreuzer/status/826775864696147969)
|
156
|
+
|
157
|
+
### Day 10: February 2, 2017
|
158
|
+
|
159
|
+
**Today's Progress**:
|
160
|
+
|
161
|
+
- copies files that aren't Markdown or templates to the build directory, preserving the folder structure
|
162
|
+
- a simple WEBrick server for preview, with SSL
|
163
|
+
|
164
|
+
**Thoughts:**
|
165
|
+
|
166
|
+
As well as breaking up Page I'm going to have break up a monolithic Site class, these things grow like topsy. Will do that when this cold abates.
|
167
|
+
|
168
|
+
**Links to work**
|
169
|
+
|
170
|
+
1. [Tweet](https://twitter.com/mikekreuzer/status/827135313621311488)
|
171
|
+
|
172
|
+
### Day 11: February 3, 2017
|
173
|
+
|
174
|
+
**Today's Progress**:
|
175
|
+
|
176
|
+
- moved yesterday's local server out of the site class
|
177
|
+
|
178
|
+
**Thoughts:**
|
179
|
+
|
180
|
+
Fruitlessly debugged ERB. The cold continues. Real progress when I stop coughing.
|
181
|
+
|
182
|
+
**Links to work**
|
183
|
+
|
184
|
+
1. [Tweet](https://twitter.com/mikekreuzer/status/827504315430367232)
|
185
|
+
|
186
|
+
### Day 12: February 4, 2017
|
187
|
+
|
188
|
+
**Today's Progress**:
|
189
|
+
|
190
|
+
- WEBrick swapped out for Thin - WEBrick's been ridiculously slow
|
191
|
+
- DataPage class carved out of Page
|
192
|
+
- home & all tags index pages
|
193
|
+
|
194
|
+
**Thoughts:**
|
195
|
+
|
196
|
+
The index page of all the tag pages is the first bit of Zine that pushes beyond the envelope of what I'm using now. That feels good.
|
197
|
+
|
198
|
+
I'm wondering how much of my memory of having speed issue with Jekyll was caused by WEBrick.
|
199
|
+
|
200
|
+
Finally starting to feel better, summer colds are the pits.
|
201
|
+
|
202
|
+
**Links to work**
|
203
|
+
|
204
|
+
1. [Tweet](https://twitter.com/mikekreuzer/status/827857782330138628)
|
205
|
+
|
206
|
+
### Day 13: February 5, 2017
|
207
|
+
|
208
|
+
**Today's Progress**:
|
209
|
+
|
210
|
+
- more serious site & page class refactoring
|
211
|
+
- pages that aren't blog posts
|
212
|
+
- started into RSS/Atom feeds, and the standard library docs are borderline nonexistent
|
213
|
+
|
214
|
+
**Thoughts:**
|
215
|
+
|
216
|
+
Lucky 13.
|
217
|
+
|
218
|
+
RSS would round out the two week mark nicely, if I get it to work. I have escaped content, but getting CDATA in there without writing the generator myself would be nice.
|
219
|
+
|
220
|
+
Two weeks to get the rough structure right, and to get something like a minimum viable product feels about right. While that would be much less than I intend to do it'd be time to start pushing code to GitHub & to release this as more than a stub of a gem. Tomorrow, maybe, with a bit of luck.
|
221
|
+
|
222
|
+
**Links to work**
|
223
|
+
|
224
|
+
1. [Tweet](https://twitter.com/mikekreuzer/status/828231071770632193)
|
225
|
+
|
226
|
+
### Day 14: February 6, 2017
|
227
|
+
|
228
|
+
**Today's Progress**:
|
229
|
+
|
230
|
+
- claimed the feed content's xhtml to get it to work, will revisit & fix this with CDATA
|
231
|
+
- started testing the engine against old blog posts
|
232
|
+
- first code to GitHub
|
233
|
+
- gem published
|
234
|
+
|
235
|
+
**Thoughts:**
|
236
|
+
|
237
|
+
Two weeks, and here's the first cut of code to GitHub & a (slightly) more than just a stub of a gem. Plenty of room to improve, but a nice start.
|
238
|
+
|
239
|
+
**Links to work**
|
240
|
+
|
241
|
+
To follow
|
data/LICENSE
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
MIT License
|
2
|
+
|
3
|
+
Copyright (c) 2017 Mike Kreuzer
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
13
|
+
copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21
|
+
SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,82 @@
|
|
1
|
+
# zine
|
2
|
+
Yet another blog aware static site generator.
|
3
|
+
|
4
|
+
## Warning: pre-release code
|
5
|
+
|
6
|
+
These are the very early days of zine, expect breaking changes.
|
7
|
+
|
8
|
+
## Why yet another static blog engine?
|
9
|
+
|
10
|
+
Written in a #100DaysOfCode challenge -- my [progress log's here](CHANGELOG.md). Despite the [proliferation in these things][engine_list] (450!) I still find it more comfortable to use my own tools.
|
11
|
+
|
12
|
+
Presented here in the hope it's of use to someone else too.
|
13
|
+
|
14
|
+
## Installation
|
15
|
+
|
16
|
+
Install the gem.
|
17
|
+
|
18
|
+
```shell
|
19
|
+
$ gem install zine
|
20
|
+
```
|
21
|
+
|
22
|
+
Then generate a new site scaffold, cd to a new folder and:
|
23
|
+
|
24
|
+
```shell
|
25
|
+
$ zine site
|
26
|
+
```
|
27
|
+
|
28
|
+
Then update your site's name, your name & so on in zine.yaml.
|
29
|
+
|
30
|
+
## Day to day usage
|
31
|
+
|
32
|
+
To set up a new blog post:
|
33
|
+
|
34
|
+
```shell
|
35
|
+
$ zine post 'Your chosen title'
|
36
|
+
```
|
37
|
+
|
38
|
+
Your new post will have some fields set up in the YAML front matter, feel free to edit them too.
|
39
|
+
|
40
|
+
Once you're done writing, build your new site:
|
41
|
+
|
42
|
+
```shell
|
43
|
+
$ zine build
|
44
|
+
```
|
45
|
+
|
46
|
+
### Halp!
|
47
|
+
|
48
|
+
To see the options available:
|
49
|
+
|
50
|
+
```shell
|
51
|
+
$ zine
|
52
|
+
```
|
53
|
+
|
54
|
+
### Up next
|
55
|
+
|
56
|
+
This is only a first cut at this gem, the stuff I considered a (barely) minimum viable product. Up next are:
|
57
|
+
|
58
|
+
- CSS preprocessing
|
59
|
+
- file watching
|
60
|
+
- migration scripts from eg Jekyll? Maybe.
|
61
|
+
- Apple News
|
62
|
+
- SSH uploads, as well as
|
63
|
+
- much refactoring
|
64
|
+
- docs
|
65
|
+
- tests, lots of tests
|
66
|
+
- and a few other things
|
67
|
+
|
68
|
+
## Contributing
|
69
|
+
|
70
|
+
Yes please. Bug reports and pull requests are welcome on GitHub at https://github.com/mikekreuzer/zine.
|
71
|
+
|
72
|
+
## Tests
|
73
|
+
|
74
|
+
```shell
|
75
|
+
bundle exec rspec spec # or your alias for that
|
76
|
+
```
|
77
|
+
|
78
|
+
## License
|
79
|
+
|
80
|
+
The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
|
81
|
+
|
82
|
+
[engine_list]: https://staticsitegenerators.net
|
data/bin/console
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'bundler/setup'
|
4
|
+
require 'zine'
|
5
|
+
|
6
|
+
# You can add fixtures and/or initialization code here to make experimenting
|
7
|
+
# with your gem easier. You can also use a different console, if you like.
|
8
|
+
|
9
|
+
# (If you use this, don't forget to add pry to your Gemfile!)
|
10
|
+
# require "pry"
|
11
|
+
# Pry.start
|
12
|
+
|
13
|
+
require 'irb'
|
14
|
+
IRB.start
|
data/bin/setup
ADDED
data/bin/zine
ADDED
data/lib/zine.rb
ADDED
@@ -0,0 +1,156 @@
|
|
1
|
+
require 'erb'
|
2
|
+
require 'rainbow'
|
3
|
+
require 'zine/data_page'
|
4
|
+
require 'zine/page'
|
5
|
+
require 'zine/feed'
|
6
|
+
require 'zine/post'
|
7
|
+
require 'zine/server'
|
8
|
+
require 'zine/tag'
|
9
|
+
require 'zine/templates'
|
10
|
+
require 'zine/version'
|
11
|
+
|
12
|
+
module Zine
|
13
|
+
# the site
|
14
|
+
class Site
|
15
|
+
attr_reader :options
|
16
|
+
|
17
|
+
def initialize
|
18
|
+
@post_array = []
|
19
|
+
@templates_by_name = {}
|
20
|
+
init_options
|
21
|
+
clean_option_paths
|
22
|
+
init_templates
|
23
|
+
end
|
24
|
+
|
25
|
+
def init_options
|
26
|
+
@options ||= begin
|
27
|
+
YAML.safe_load File.open('zine.yaml')
|
28
|
+
rescue ArgumentError => err
|
29
|
+
puts Rainbow("Could not parse YAML options: #{err.message}").red
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def init_templates
|
34
|
+
tem_array = Dir[File.join(@options['directories']['templates'], '*.erb')]
|
35
|
+
tem_array.each do |tem|
|
36
|
+
@templates_by_name.merge!(File.basename(tem, '.*') =>
|
37
|
+
ERB.new(File.read(tem), 0, '-'))
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def build_site
|
42
|
+
read_post_markdown_files
|
43
|
+
sort_posts_by_date
|
44
|
+
write_posts
|
45
|
+
housekeeping_copy
|
46
|
+
write_other_markdown_pages
|
47
|
+
write_feed
|
48
|
+
preview
|
49
|
+
end
|
50
|
+
|
51
|
+
def clean_option_paths
|
52
|
+
%w(assets posts styles templates).each do |dir|
|
53
|
+
@options['directories'][dir] =
|
54
|
+
File.join @options['directories']['source'],
|
55
|
+
@options['directories'][dir]
|
56
|
+
end
|
57
|
+
@options['directories']['blog'] =
|
58
|
+
File.join @options['directories']['build'],
|
59
|
+
@options['directories']['blog']
|
60
|
+
end
|
61
|
+
|
62
|
+
def housekeeping_copy
|
63
|
+
src_dir = @options['directories']['source']
|
64
|
+
search = File.join src_dir, '**', '*.*'
|
65
|
+
dir_options = @options['directories']
|
66
|
+
possible = Dir.glob(search, File::FNM_DOTMATCH).reject do |found|
|
67
|
+
found =~ /^.+\.md$|^.+\.erb$|^\.DS_Store$|^\.$|^\.\.$'/ ||
|
68
|
+
File.directory?(found) || found[dir_options['posts']] ||
|
69
|
+
found[dir_options['templates']]
|
70
|
+
end
|
71
|
+
possible.each do |file|
|
72
|
+
dir = Pathname(File.dirname(file)).relative_path_from(Pathname(src_dir))
|
73
|
+
filename = File.basename file
|
74
|
+
dest = File.join @options['directories']['build'], dir
|
75
|
+
FileUtils.mkdir_p dest
|
76
|
+
FileUtils.cp file, File.join(dest, filename)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
def make_template_bundle(type)
|
81
|
+
TemplateFiles.new(
|
82
|
+
if @templates_by_name.key?(type)
|
83
|
+
@templates_by_name[type]
|
84
|
+
else
|
85
|
+
@templates_by_name['default']
|
86
|
+
end,
|
87
|
+
@templates_by_name['header_partial'],
|
88
|
+
@templates_by_name['footer_partial']
|
89
|
+
)
|
90
|
+
end
|
91
|
+
|
92
|
+
def preview
|
93
|
+
Server.new File.absolute_path(@options['directories']['build'])
|
94
|
+
end
|
95
|
+
|
96
|
+
def read_post_markdown_files
|
97
|
+
file_name_array = Dir[File.join(@options['directories']['posts'], '*.md')]
|
98
|
+
file_name_array.each do |file|
|
99
|
+
@post_array << Zine::Post.new(file,
|
100
|
+
make_template_bundle('post'),
|
101
|
+
@options)
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
def sort_posts_by_date
|
106
|
+
@post_array.sort_by! do |post|
|
107
|
+
post.formatted_data.page[:date_rfc3339]
|
108
|
+
end.reverse!
|
109
|
+
@post_array.freeze
|
110
|
+
end
|
111
|
+
|
112
|
+
def write_feed
|
113
|
+
number = @options['options']['number_items_in_RSS']
|
114
|
+
feed = Zine::Feed.new(@post_array.first(number), @options)
|
115
|
+
feed.process
|
116
|
+
end
|
117
|
+
|
118
|
+
def write_homepage
|
119
|
+
homepage_data = { build_dir: @options['directories']['build'],
|
120
|
+
name: 'index', title: 'Home', post_array: [] }
|
121
|
+
@post_array.first(@options['options']['num_items_on_home']).each do |post|
|
122
|
+
homepage_data[:post_array] << { page: post.formatted_data.page,
|
123
|
+
html: post.formatted_data.html }
|
124
|
+
end
|
125
|
+
home_page = DataPage.new(homepage_data, make_template_bundle('home'),
|
126
|
+
@options)
|
127
|
+
home_page.write
|
128
|
+
end
|
129
|
+
|
130
|
+
def write_other_markdown_pages
|
131
|
+
dir_options = @options['directories']
|
132
|
+
src_dir = dir_options['source']
|
133
|
+
search = File.join src_dir, '**', '*.md'
|
134
|
+
Dir[search].reject { |found| found[dir_options['posts']] }.each do |file|
|
135
|
+
dir = Pathname(File.dirname(file)).relative_path_from(Pathname(src_dir))
|
136
|
+
file_name = "#{File.basename(file, '.*')}.html"
|
137
|
+
dest = File.join dir_options['build'], dir
|
138
|
+
FileUtils.mkdir_p dest
|
139
|
+
page = Zine::Page.new(file, File.join(dest, file_name),
|
140
|
+
make_template_bundle('default'), @options)
|
141
|
+
page.process
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
145
|
+
def write_posts
|
146
|
+
tags_by_post = []
|
147
|
+
@post_array.each do |post|
|
148
|
+
tags_by_post << post.process
|
149
|
+
end
|
150
|
+
tags = Zine::Tag.new tags_by_post, make_template_bundle('tag'),
|
151
|
+
make_template_bundle('tag_index'), @options
|
152
|
+
tags.write_tags
|
153
|
+
write_homepage
|
154
|
+
end
|
155
|
+
end
|
156
|
+
end
|