zine 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a7ad3b9767a3c9799f9b328a1f28ca0435ca3b1b
4
- data.tar.gz: ede87c6d35d6aae470c47c9df26c98259cbfe940
3
+ metadata.gz: 9ce608b8b5c136ee23895b7ee2771cc091a4a87a
4
+ data.tar.gz: ca955519ffe65010a7029f3f0d43f26bdeecee19
5
5
  SHA512:
6
- metadata.gz: 6e186e86c35fab7f7bd41ac7357c11585cf3a275bdc56618c426e79c9957ea138d45ffe46eddb3fd8986fabc408114f064bb209b2f20eb90427529cbe20ce7a2
7
- data.tar.gz: 2d5f1023c075f0cb4b49c1c75ff9f2828f674e13a94ecff38e380f4021f3daa6911d332830ef71d57d5087cba0b9650ff8347811061da9ee3c0d1cd114968e19
6
+ metadata.gz: 39009e82432ea5260a0f1178b87c2e92dc0f8bbbd8e09051d877d1e89f83e8a8752607d700d39c3000f0fc0a5ec09b05549575977e78c0929c181c062076a9ad
7
+ data.tar.gz: afaa3801a74fca91ed7d743f219c75776948aa1877e0df57aa26913941292cdd7b92764770cf2d91793f3e542e165e0f41d9a4f71e4e3bfe6b462da4bcfd4413
@@ -223,6 +223,8 @@ Two weeks to get the rough structure right, and to get something like a minimum
223
223
 
224
224
  1. [Tweet](https://twitter.com/mikekreuzer/status/828231071770632193)
225
225
 
226
+ ## v0.1.0
227
+
226
228
  ### Day 14: February 6, 2017
227
229
 
228
230
  **Today's Progress**:
@@ -238,4 +240,61 @@ Two weeks, and here's the first cut of code to GitHub & a (slightly) more than j
238
240
 
239
241
  **Links to work**
240
242
 
241
- To follow
243
+ 1. [Repo](https://github.com/mikekreuzer/zine)
244
+ 2. [Gem](https://rubygems.org/gems/zine)
245
+ 3. [Tweet](https://twitter.com/mikekreuzer/status/828584150479228928)
246
+
247
+ ### Day 15: February 7, 2017
248
+
249
+ **Today's Progress**:
250
+
251
+ - RSS now using DataPage & ERB, with CDATA tags
252
+ - added Ruby 2.0 as a minimum to the gemspec
253
+ - version headings added to this log
254
+
255
+ **Thoughts:**
256
+
257
+ My thoughts are in the blog post. Happy. :-)
258
+
259
+ **Links to work**
260
+
261
+ 1. [Blog post](https://mikekreuzer.com/blog/2017/2/two-weeks-of-code.html)
262
+ 2. [Repo](https://github.com/mikekreuzer/zine)
263
+ 3. [Tweet](https://twitter.com/mikekreuzer/status/828952725090037760)
264
+
265
+ ### Day 16: February 8, 2017
266
+
267
+ **Today's Progress**:
268
+
269
+ - template names from zine.yaml
270
+
271
+ **Thoughts:**
272
+
273
+ A stocktake sort of a day. Need to get some changes back into the templates, then do the articles index. May consolidate the DataPage calls, & maybe get posts out of Site at the same time.
274
+
275
+ **Links to work**
276
+
277
+ 1. [Repo](https://github.com/mikekreuzer/zine)
278
+ 2. [Tweet](https://twitter.com/mikekreuzer/status/829318150868983808)
279
+
280
+ ## v0.2.0
281
+
282
+ ### Day 17: February 9, 2017
283
+
284
+ **Today's Progress**:
285
+
286
+ - consolidated the DataPage calls in the Site class (the home page, feed, and now added an articles/archive index to that)
287
+ - added 'skip to main content' back into the header partial
288
+ - some bug fixes & minor refactoring
289
+ - version 0.2.0
290
+
291
+ **Thoughts:**
292
+
293
+ Played around with the concurrent-ruby gem - seems promising, inspired by Erlang it's got a lot in common with Elixir... but it doesn't work to just fling the local server into the background with async, & Thin itself uses EventMachine...
294
+
295
+ Was listening in on RubyConf_au going on in the background on Twitter all day -- inspirational. Couldn't wait to start my hour of coding, even more than usual. :-)
296
+
297
+ **Links to work**
298
+
299
+ 1. [Repo](https://github.com/mikekreuzer/zine)
300
+ 2. [Gem](https://rubygems.org/gems/zine)
@@ -2,7 +2,6 @@ require 'erb'
2
2
  require 'rainbow'
3
3
  require 'zine/data_page'
4
4
  require 'zine/page'
5
- require 'zine/feed'
6
5
  require 'zine/post'
7
6
  require 'zine/server'
8
7
  require 'zine/tag'
@@ -41,37 +40,33 @@ module Zine
41
40
  def build_site
42
41
  read_post_markdown_files
43
42
  sort_posts_by_date
44
- write_posts
43
+ write_posts_and_headlines
45
44
  housekeeping_copy
46
45
  write_other_markdown_pages
47
- write_feed
48
46
  preview
49
47
  end
50
48
 
51
49
  def clean_option_paths
50
+ directories = @options['directories']
52
51
  %w(assets posts styles templates).each do |dir|
53
- @options['directories'][dir] =
54
- File.join @options['directories']['source'],
55
- @options['directories'][dir]
52
+ directories[dir] = File.join directories['source'], directories[dir]
56
53
  end
57
- @options['directories']['blog'] =
58
- File.join @options['directories']['build'],
59
- @options['directories']['blog']
54
+ directories['blog'] = File.join directories['build'], directories['blog']
60
55
  end
61
56
 
62
57
  def housekeeping_copy
63
- src_dir = @options['directories']['source']
58
+ directories = @options['directories']
59
+ src_dir = directories['source']
64
60
  search = File.join src_dir, '**', '*.*'
65
- dir_options = @options['directories']
66
61
  possible = Dir.glob(search, File::FNM_DOTMATCH).reject do |found|
67
62
  found =~ /^.+\.md$|^.+\.erb$|^\.DS_Store$|^\.$|^\.\.$'/ ||
68
- File.directory?(found) || found[dir_options['posts']] ||
69
- found[dir_options['templates']]
63
+ File.directory?(found) || found[directories['posts']] ||
64
+ found[directories['templates']]
70
65
  end
71
66
  possible.each do |file|
72
67
  dir = Pathname(File.dirname(file)).relative_path_from(Pathname(src_dir))
73
68
  filename = File.basename file
74
- dest = File.join @options['directories']['build'], dir
69
+ dest = File.join directories['build'], dir
75
70
  FileUtils.mkdir_p dest
76
71
  FileUtils.cp file, File.join(dest, filename)
77
72
  end
@@ -95,9 +90,10 @@ module Zine
95
90
 
96
91
  def read_post_markdown_files
97
92
  file_name_array = Dir[File.join(@options['directories']['posts'], '*.md')]
93
+ post_name = @options['templates']['post']
98
94
  file_name_array.each do |file|
99
95
  @post_array << Zine::Post.new(file,
100
- make_template_bundle('post'),
96
+ make_template_bundle(post_name),
101
97
  @options)
102
98
  end
103
99
  end
@@ -109,48 +105,67 @@ module Zine
109
105
  @post_array.freeze
110
106
  end
111
107
 
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
108
+ def headline_pages
109
+ dir = @options['directories']['build']
110
+ options = @options['options']
111
+ templates = @options['templates']
112
+ [{ build_dir: dir, name: 'articles', number: @post_array.size,
113
+ suffix: '.html', template_name: templates['articles'],
114
+ title: 'Articles' },
115
+ { build_dir: dir, name: 'index',
116
+ number: options['num_items_on_home'], suffix: '.html',
117
+ template_name: templates['home'], title: 'Home' },
118
+ { build_dir: dir, name: 'rss',
119
+ number: options['number_items_in_RSS'], suffix: '.xml',
120
+ template_name: templates['rss'], title: '' }]
121
+ end
122
+
123
+ def wrangle_headlines
124
+ headline_pages.each do |page|
125
+ write_headline page
126
+ end
116
127
  end
117
128
 
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 }
129
+ def write_headline(page)
130
+ data = page
131
+ data[:post_array] = []
132
+ @post_array.first(page[:number]).each do |post|
133
+ post_data = post.formatted_data
134
+ data[:post_array] << { page: post_data.page, html: post_data.html,
135
+ uri: post_data.uri }
124
136
  end
125
- home_page = DataPage.new(homepage_data, make_template_bundle('home'),
126
- @options)
127
- home_page.write
137
+ data_page = DataPage.new(data, make_template_bundle(data[:template_name]),
138
+ @options, data[:suffix])
139
+ data_page.write
128
140
  end
129
141
 
130
142
  def write_other_markdown_pages
131
143
  dir_options = @options['directories']
132
144
  src_dir = dir_options['source']
133
145
  search = File.join src_dir, '**', '*.md'
146
+ default_name = @options['templates']['default']
134
147
  Dir[search].reject { |found| found[dir_options['posts']] }.each do |file|
135
148
  dir = Pathname(File.dirname(file)).relative_path_from(Pathname(src_dir))
136
149
  file_name = "#{File.basename(file, '.*')}.html"
137
150
  dest = File.join dir_options['build'], dir
138
151
  FileUtils.mkdir_p dest
139
152
  page = Zine::Page.new(file, File.join(dest, file_name),
140
- make_template_bundle('default'), @options)
153
+ make_template_bundle(default_name), @options)
141
154
  page.process
142
155
  end
143
156
  end
144
157
 
145
- def write_posts
158
+ def write_posts_and_headlines
146
159
  tags_by_post = []
147
160
  @post_array.each do |post|
148
161
  tags_by_post << post.process
149
162
  end
150
- tags = Zine::Tag.new tags_by_post, make_template_bundle('tag'),
151
- make_template_bundle('tag_index'), @options
163
+ tag_name = @options['templates']['tag']
164
+ tag_index_name = @options['templates']['tag_index']
165
+ tags = Zine::Tag.new tags_by_post, make_template_bundle(tag_name),
166
+ make_template_bundle(tag_index_name), @options
152
167
  tags.write_tags
153
- write_homepage
168
+ wrangle_headlines
154
169
  end
155
170
  end
156
171
  end
@@ -38,7 +38,8 @@ module Zine
38
38
  @date = DateTime.now
39
39
  @name = name
40
40
  file = "#{@date.strftime('%Y-%m-%d')}-#{Zine::Page.slug(name)}.md"
41
- template 'new_post.erb',
41
+ new_post_name = @site.options['templates']['new_post']
42
+ template new_post_name,
42
43
  File.join(Dir.pwd, option_dir['posts'], file)
43
44
  end
44
45
 
@@ -4,13 +4,13 @@ module Zine
4
4
  # A page where the content comes from an array, usually an array of
5
5
  # links to other pages, eg an index page like the home page
6
6
  class DataPage < Zine::Page
7
- def initialize(data, templates, site_options)
7
+ def initialize(data, templates, site_options, suffix = '.html')
8
8
  init_templates(templates)
9
9
  @formatted_data = FormattedData.new({}, site_options)
10
10
  @formatted_data.page[:title] = data[:title]
11
11
  @formatted_data.data = data[:post_array]
12
12
  @dest_path = File.join(data[:build_dir],
13
- Zine::Page.slug(data[:name]) + '.html')
13
+ Zine::Page.slug(data[:name]) + suffix)
14
14
  write
15
15
  end
16
16
 
@@ -15,11 +15,13 @@ module Zine
15
15
  attr_reader :formatted_data
16
16
  # the meta data, passed formatted to the template
17
17
  class FormattedData
18
+ include ERB::Util
19
+
18
20
  attr_accessor :data
19
21
  attr_accessor :footer_partial
20
22
  attr_accessor :header_partial
21
23
  attr_accessor :html
22
- attr_reader :page
24
+ attr_reader :page
23
25
  attr_accessor :uri
24
26
 
25
27
  def initialize(front_matter, site_opt)
@@ -32,12 +34,12 @@ module Zine
32
34
  site_name: site_opt['options']['site_name'],
33
35
  site_URL: site_opt['options']['site_URL'],
34
36
  tags: slugify_tags(front_matter['tags']),
35
- title: front_matter['title'],
37
+ title: html_escape(front_matter['title']),
36
38
  twitter_name: site_opt['options']['twitter_name'] }
37
39
  end
38
40
 
39
- def parse_date(_d)
40
- DateTime.rfc3339(front_matter['date']).strftime('%B %-d, %Y')
41
+ def parse_date(front_matter_date)
42
+ DateTime.rfc3339(front_matter_date).strftime('%B %-d, %Y')
41
43
  rescue
42
44
  ''
43
45
  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}h1,h2,h3,h4,h5,h6{color:#333;letter-spacing:.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 .809em}h2{font-weight:300;font-size:1.618em;margin:1.809em 0 .809em}h3,h4,h5,h6{font-weight:400;font-size:1em;margin:1.809em 0 .809em}p{margin:1em 0}a{color:#414f7c}a:hover{color:#212721}section{margin-bottom:1.618em}section>section{margin-bottom:3.236em}body>header{width:43em;text-align:center;margin:0 auto 0}body>header a{text-decoration:none;margin-left:.5em;margin-right:.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-indent:-999em;text-align:left;margin:20px}.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 .contact{float:left;margin-right:3em}footer .contact a,.tags a{color:#414f7c;text-decoration:none}footer .contact a:hover,.tags a:hover{color:#212721;text-decoration:none}.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:.8em}blockquote{margin:2em 2em 2em 1em;padding:0 .75em 0 1.25em;border-left:2px solid #ddd;border-right:0 solid #ddd}@media all and (max-width:736px){body>header,main,footer{width:86%;margin:0 auto 0;padding:12px 24px 12px}p{margin-bottom:2em}.button{width:50px;height:50px;margin:20px}}
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:.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 .809em}h2{font-weight:300;font-size:1.618em;margin:1.809em 0 .809em}h3,h4,h5,h6{font-weight:400;font-size:1em;margin:1.809em 0 .809em}p{margin:1em 0}a{color:#414f7c}a:hover{color:#212721}section{margin-bottom:1.618em}section>section{margin-bottom:3.236em}body>header{width:43em;text-align:center;margin:0 auto 0}body>header a{text-decoration:none;margin-left:.5em;margin-right:.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-indent:-999em;text-align:left;margin:20px}.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 .contact{float:left;margin-right:3em}footer .contact a,.tags a{color:#414f7c;text-decoration:none}footer .contact a:hover,.tags a:hover{color:#212721;text-decoration:none}.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:.8em}blockquote{margin:2em 2em 2em 1em;padding:0 .75em 0 1.25em;border-left:2px solid #ddd;border-right:0 solid #ddd}@media all and (max-width:736px){body>header,main,footer{width:86%;margin:0 auto 0;padding:12px 24px 12px}p{margin-bottom:2em}.button{width:50px;height:50px;margin:20px}}
@@ -0,0 +1,12 @@
1
+ <%= header_partial %>
2
+ <main>
3
+ <section>
4
+ <h2>Previously...</h2>
5
+ <ul>
6
+ <% for @post in data %>
7
+ <li><p><a href="<%= @post[:uri] %>"><%= @post[:page][:title] %></a> &mdash; <%= @post[:page][:date_us] %></p></li>
8
+ <% end %>
9
+ </ul>
10
+ </section>
11
+ </main>
12
+ <%= footer_partial %>
@@ -10,6 +10,9 @@
10
10
  <link rel="apple-touch-icon" href="/apple-touch-icon.png">
11
11
  </head>
12
12
  <body>
13
+ <div id="skiptocontent">
14
+ <a href="#maincontent">Skip to main content</a>
15
+ </div>
13
16
  <header>
14
17
  <div class="logo"></div>
15
18
  <h1><a href="<%= page[:site_URL] %>"><%= page[:site_name] %></a></h1>
@@ -21,3 +24,4 @@
21
24
  </ul><a href="https://twitter.com/<%= page[:twitter_name] %>" class="button twitter">Argue with me on Twitter</a><a href="<%= page[:site_URL] %>/rss.xml" rel="home" type="application/rss+xml" class="button rss">RSS Feed</a>
22
25
  </nav>
23
26
  </header>
27
+ <a name="maincontent"></a>
@@ -0,0 +1,21 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <feed xmlns="http://www.w3.org/2005/Atom"
3
+ xmlns:dc="http://purl.org/dc/elements/1.1/">
4
+ <author>
5
+ <name><%= page[:site_author] %></name>
6
+ </author>
7
+ <id><%= page[:site_URL] %>/rss.xml</id>
8
+ <title><%= page[:site_name] %></title>
9
+ <dc:date><%= data[0][:page][:date_rfc3339] %></dc:date>
10
+ <updated><%= data[0][:page][:date_rfc3339] %></updated>
11
+ <% for @post in data %>
12
+ <entry>
13
+ <content type="html"><![CDATA[<%= @post[:html] %>]]></content>
14
+ <id><%= @post[:uri] %></id>
15
+ <link href="<%= @post[:uri] %>"/>
16
+ <title><%= @post[:page][:title] %></title>
17
+ <updated><%= @post[:page][:date_rfc3339] %></updated>
18
+ <dc:date><%= @post[:page][:date_rfc3339] %></dc:date>
19
+ </entry>
20
+ <% end %>
21
+ </feed>
@@ -8,12 +8,14 @@ directories:
8
8
  styles: styles
9
9
  templates: templates
10
10
  templates:
11
- archive: achive.html.erb
12
- default: static.html.erb
13
- index: index.html.erb
14
- new_post: new_post.md.erb
15
- post: post.html.erb
16
- tag: tag.html.erb
11
+ articles: articles
12
+ default: default
13
+ home: home
14
+ new_post: new_post.erb
15
+ post: post
16
+ rss: rss
17
+ tag: tag
18
+ tag_index: tag_index
17
19
  options:
18
20
  css_preprocessor: less
19
21
  github_name: mikekreuzer
@@ -1,3 +1,3 @@
1
1
  module Zine
2
- VERSION = '0.1.0'.freeze
2
+ VERSION = '0.2.0'.freeze
3
3
  end
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.1.0
4
+ version: 0.2.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: 2017-02-06 00:00:00.000000000 Z
11
+ date: 2017-02-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -136,7 +136,9 @@ dependencies:
136
136
  - - "~>"
137
137
  - !ruby/object:Gem::Version
138
138
  version: '0.19'
139
- description:
139
+ description: |-
140
+ Yet another blog aware static site generator.
141
+ These are the very early days of zine, expect breaking changes.
140
142
  email:
141
143
  - mike@mikekreuzer.com
142
144
  executables:
@@ -153,20 +155,20 @@ files:
153
155
  - lib/zine.rb
154
156
  - lib/zine/cli.rb
155
157
  - lib/zine/data_page.rb
156
- - lib/zine/feed.rb
157
158
  - lib/zine/page.rb
158
159
  - lib/zine/post.rb
159
160
  - lib/zine/server.rb
160
161
  - lib/zine/skeleton/source/about.md
161
162
  - lib/zine/skeleton/source/posts/2017-01-25-my-new-blog.md
162
163
  - lib/zine/skeleton/source/screen.css
164
+ - lib/zine/skeleton/source/templates/articles.erb
163
165
  - lib/zine/skeleton/source/templates/default.erb
164
166
  - lib/zine/skeleton/source/templates/footer_partial.erb
165
167
  - lib/zine/skeleton/source/templates/header_partial.erb
166
168
  - lib/zine/skeleton/source/templates/home.erb
167
169
  - lib/zine/skeleton/source/templates/new_post.erb
168
170
  - lib/zine/skeleton/source/templates/post.erb
169
- - lib/zine/skeleton/source/templates/post_index.erb
171
+ - lib/zine/skeleton/source/templates/rss.erb
170
172
  - lib/zine/skeleton/source/templates/tag.erb
171
173
  - lib/zine/skeleton/source/templates/tag_index.erb
172
174
  - lib/zine/skeleton/zine.yaml
@@ -185,7 +187,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
185
187
  requirements:
186
188
  - - ">="
187
189
  - !ruby/object:Gem::Version
188
- version: '0'
190
+ version: '2.0'
189
191
  required_rubygems_version: !ruby/object:Gem::Requirement
190
192
  requirements:
191
193
  - - ">="
@@ -193,7 +195,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
193
195
  version: '0'
194
196
  requirements: []
195
197
  rubyforge_project:
196
- rubygems_version: 2.6.8
198
+ rubygems_version: 2.6.10
197
199
  signing_key:
198
200
  specification_version: 4
199
201
  summary: Yet another blog aware static site generator.
@@ -1,44 +0,0 @@
1
- require 'rss'
2
- require 'uri'
3
- # require 'zine/page'
4
-
5
- module Zine # < Zine::Page
6
- # produce the RSS/Atom feed for the site
7
- class Feed
8
- def initialize(post_array, options)
9
- @post_array = post_array
10
- @options = options['options']
11
- @rss = create_rss
12
- @dest_path = File.join(options['directories']['build'], 'rss.xml')
13
- end
14
-
15
- def create_rss
16
- RSS::Maker.make('atom') do |maker|
17
- maker.channel.author = @options['site_author']
18
- maker.channel.updated = @post_array[0].formatted_data
19
- .page[:date_rfc3339].to_s
20
- maker.channel.about = (URI.join @options['site_URL'], 'rss.xml').to_s
21
- maker.channel.title = @options['site_name']
22
-
23
- @post_array.each do |post|
24
- maker.items.new_item do |item|
25
- data = post.formatted_data
26
- meta = data.page
27
- item.link = data.uri
28
- item.title = meta[:title]
29
- item.updated = meta[:date_rfc3339].to_s
30
- # item.content.content = data.html
31
- # item.content.type = 'html'
32
- # =><content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">
33
- item.content.type = 'xhtml'
34
- item.content.xml_content = data.html
35
- end
36
- end
37
- end # rss
38
- end # fn
39
-
40
- def process
41
- File.write(@dest_path, @rss)
42
- end
43
- end
44
- end
@@ -1,15 +0,0 @@
1
- <%= header_partial %>
2
- <main>
3
- <section>
4
- <h2><%= page[:title] %></h2>
5
- <% for @name, @tag in data %>
6
- <h3><%= @name %></h3>
7
- <ul>
8
- <% for @post in @tag %>
9
- <li><a href="<%= @post[:destURL] %>"><%= @post[:pageTitle] %></a> <%= @post[:pageDateUS] %></li>
10
- <% end %>
11
- </ul>
12
- <% end %>
13
- </section>
14
- </main>
15
- <%= footer_partial %>