dimples 6.1.0 → 6.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 92e195459728e28b5120a92a4282b2dbf7fe169f
4
- data.tar.gz: ff63f1c065662ccc3dd8b64ca66e5a28fa78d398
3
+ metadata.gz: 6afbd71e5416934a021d53ad883b21c5b3e7d919
4
+ data.tar.gz: 342eb97cfe1817bfb00e910582710b49c99a25fc
5
5
  SHA512:
6
- metadata.gz: e2bbd4a0f7e1165e4d2e3d2e8411d3ebe14a105cac745bc363d7638babecb673a3b6bc79c073a1c41c3ce99f9405302163f1fc30e1797fb9a6545d19570e3b63
7
- data.tar.gz: e63c7504d58398086e15a4f42c3df8b281e59e50964aa28dd8467215b14a1c7a43e135acc79d1535988de4063e73cae5af012d2a1a0212cbfc7c7af434b3007c
6
+ metadata.gz: fa79976d760b83d9cb8f6125b38ffd6fd71adee6e9cbdfaae730407933e38743a19da11f5e8783af938901313f3f8ce99226f27661520af6b6357751ca5e4ead
7
+ data.tar.gz: 2e3df64946baed2bdf1a8837f25ee0f709c00a0f0f3b9d8e972964d4957a34c7e60570a2d591fddd2ebc211980edc175cb7d63ac1d62ec6cc955a3e85e29ac16
@@ -8,12 +8,16 @@ require 'yaml'
8
8
 
9
9
  require 'dimples/frontable'
10
10
 
11
+ require 'dimples/archive'
11
12
  require 'dimples/category'
12
13
  require 'dimples/configuration'
13
14
  require 'dimples/errors'
14
- require 'dimples/page'
15
15
  require 'dimples/pager'
16
- require 'dimples/post'
17
16
  require 'dimples/renderer'
18
- require 'dimples/site'
17
+
18
+ require 'dimples/page'
19
+ require 'dimples/feed'
20
+ require 'dimples/post'
19
21
  require 'dimples/template'
22
+
23
+ require 'dimples/site'
@@ -0,0 +1,64 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Dimples
4
+ # A collection of posts, organised by date.
5
+ class Archive
6
+ def initialize
7
+ @years = {}
8
+ end
9
+
10
+ def add_post(post)
11
+ year(post.year)[:posts] << post
12
+ month(post.year, post.month)[:posts] << post
13
+ day(post.year, post.month, post.day)[:posts] << post
14
+ end
15
+
16
+ def years
17
+ @years.keys
18
+ end
19
+
20
+ def months(year)
21
+ year(year)[:months].keys
22
+ end
23
+
24
+ def days(year, month)
25
+ month(year, month)[:days].keys
26
+ end
27
+
28
+ def posts_for_date(year, month = nil, day = nil)
29
+ if day
30
+ day_posts(year, month, day)
31
+ elsif month
32
+ month_posts(year, month)
33
+ else
34
+ year_posts(year)
35
+ end
36
+ end
37
+
38
+ def year_posts(year)
39
+ year(year)[:posts]
40
+ end
41
+
42
+ def month_posts(year, month)
43
+ month(year, month)[:posts]
44
+ end
45
+
46
+ def day_posts(year, month, day)
47
+ day(year, month, day)[:posts]
48
+ end
49
+
50
+ private
51
+
52
+ def year(year)
53
+ @years[year.to_s] ||= { months: {}, posts: [] }
54
+ end
55
+
56
+ def month(year, month)
57
+ year(year)[:months][month.to_s] ||= { days: {}, posts: [] }
58
+ end
59
+
60
+ def day(year, month, day)
61
+ month(year, month)[:days][day.to_s] ||= { posts: [] }
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Dimples
4
+ # A single feed.
5
+ class Feed < Page
6
+ def initialize(site, format)
7
+ super(site)
8
+
9
+ self.filename = 'feed'
10
+ self.extension = format
11
+ self.layout = "feeds.#{format}"
12
+ end
13
+ end
14
+ end
@@ -13,6 +13,31 @@ module Dimples
13
13
  attr_reader :page_count
14
14
  attr_reader :item_count
15
15
 
16
+ def self.paginate(site, posts, path, layout, context = {})
17
+ pager = Pager.new(
18
+ path.sub(site.paths[:destination], '') + '/',
19
+ posts,
20
+ site.config.pagination
21
+ )
22
+
23
+ pager.each do |index|
24
+ page = Page.new(site)
25
+ page.layout = layout
26
+
27
+ page_prefix = site.config.pagination.page_prefix
28
+ page_path = if index == 1
29
+ path
30
+ else
31
+ File.join(path, "#{page_prefix}#{index}")
32
+ end
33
+
34
+ page.write(
35
+ page_path,
36
+ context.merge(pagination: pager.to_context)
37
+ )
38
+ end
39
+ end
40
+
16
41
  def initialize(url, posts, options = {})
17
42
  @url = url
18
43
  @posts = posts
@@ -9,7 +9,7 @@ module Dimples
9
9
  attr_reader :paths
10
10
  attr_reader :posts
11
11
  attr_reader :pages
12
- attr_reader :archives
12
+ attr_reader :archive
13
13
  attr_reader :templates
14
14
  attr_reader :latest_post
15
15
 
@@ -57,7 +57,7 @@ module Dimples
57
57
  private
58
58
 
59
59
  def prepare
60
- @archives = { year: {} }
60
+ @archive = Dimples::Archive.new
61
61
 
62
62
  @categories = {}
63
63
  @templates = {}
@@ -69,11 +69,14 @@ module Dimples
69
69
  @latest_post = nil
70
70
  end
71
71
 
72
+ def read_files(path)
73
+ Dir.glob(File.join(path, '**', '*.*')).sort
74
+ end
75
+
72
76
  def read_templates
73
77
  @templates = {}
74
- template_glob = File.join(@paths[:templates], '**', '*.*')
75
78
 
76
- Dir.glob(template_glob).each do |path|
79
+ read_files(@paths[:templates]).each do |path|
77
80
  basename = File.basename(path, File.extname(path))
78
81
  dir_name = File.dirname(path)
79
82
 
@@ -86,11 +89,9 @@ module Dimples
86
89
  end
87
90
 
88
91
  def read_posts
89
- post_glob = File.join(@paths[:posts], '**', '*.*')
90
-
91
- @posts = Dir.glob(post_glob).sort.map do |path|
92
+ @posts = read_files(@paths[:posts]).map do |path|
92
93
  Post.new(self, path).tap do |post|
93
- add_archive_post(post)
94
+ @archive.add_post(post)
94
95
  categorise_post(post)
95
96
  end
96
97
  end.reverse
@@ -99,14 +100,7 @@ module Dimples
99
100
  end
100
101
 
101
102
  def read_pages
102
- page_glob = File.join(@paths[:pages], '**', '*.*')
103
- @pages = Dir.glob(page_glob).sort.map { |path| Page.new(self, path) }
104
- end
105
-
106
- def add_archive_post(post)
107
- archive_year(post.year)[:posts] << post
108
- archive_month(post.year, post.month)[:posts] << post
109
- archive_day(post.year, post.month, post.day)[:posts] << post
103
+ @pages = read_files(@paths[:pages]).map { |path| Page.new(self, path) }
110
104
  end
111
105
 
112
106
  def categorise_post(post)
@@ -137,15 +131,7 @@ module Dimples
137
131
  end
138
132
 
139
133
  def publish_posts
140
- @posts.each do |post|
141
- path = File.join(
142
- @paths[:destination],
143
- post.date.strftime(@config.paths.posts),
144
- post.slug
145
- )
146
-
147
- post.write(path)
148
- end
134
+ @posts.each { |post| publish_post(post) }
149
135
 
150
136
  if @config.generation.main_feed
151
137
  publish_feeds(@posts, @paths[:destination])
@@ -153,45 +139,58 @@ module Dimples
153
139
 
154
140
  return unless @config.generation.paginated_posts
155
141
 
156
- paginate_posts(
142
+ Dimples::Pager.paginate(
143
+ self,
157
144
  @posts,
158
145
  File.join(@paths[:destination], @config.paths.paginated_posts),
159
146
  @config.layouts.paginated_post
160
147
  )
161
148
  end
162
149
 
150
+ def publish_post(post)
151
+ path = File.join(
152
+ @paths[:destination],
153
+ post.date.strftime(@config.paths.posts),
154
+ post.slug
155
+ )
156
+
157
+ post.write(path)
158
+ end
159
+
163
160
  def publish_pages
164
- @pages.each do |page|
165
- path = if page.path
166
- File.dirname(page.path).sub(
167
- @paths[:pages],
168
- @paths[:destination]
169
- )
170
- else
161
+ @pages.each { |page| publish_page(page) }
162
+ end
163
+
164
+ def publish_page(page)
165
+ path = if page.path
166
+ File.dirname(page.path).sub(
167
+ @paths[:pages],
171
168
  @paths[:destination]
172
- end
169
+ )
170
+ else
171
+ @paths[:destination]
172
+ end
173
173
 
174
- page.write(path)
175
- end
174
+ page.write(path)
176
175
  end
177
176
 
178
177
  def publish_archives
179
- @archives[:year].each do |year, year_archive|
180
- publish_date_archive(year)
178
+ @archive.years.each do |year|
179
+ publish_archive(year)
181
180
  next unless @config.generation.month_archives
182
181
 
183
- year_archive[:month].each do |month, month_archive|
184
- publish_date_archive(year, month)
182
+ @archive.months(year).each do |month|
183
+ publish_archive(year, month)
185
184
  next unless @config.generation.day_archives
186
185
 
187
- month_archive[:day].each_key do |day|
188
- publish_date_archive(year, month, day)
186
+ @archive.days(year, month).each do |day|
187
+ publish_archive(year, month, day)
189
188
  end
190
189
  end
191
190
  end
192
191
  end
193
192
 
194
- def publish_date_archive(year, month = nil, day = nil)
193
+ def publish_archive(year, month = nil, day = nil)
195
194
  date_type = if day
196
195
  'day'
197
196
  elsif month
@@ -200,106 +199,59 @@ module Dimples
200
199
  'year'
201
200
  end
202
201
 
202
+ posts = @archive.posts_for_date(year, month, day)
203
+
203
204
  date_parts = [year, month, day].compact
204
205
  path = File.join(@paths[:destination], @config.paths.archives, date_parts)
206
+ layout = @config.layouts.date_archive
205
207
 
206
- posts = archive(year, month, day)[:posts]
207
-
208
- paginate_posts(
209
- posts.reverse,
210
- path,
211
- @config.layouts.date_archive,
208
+ data = {
212
209
  page: {
213
210
  title: posts[0].date.strftime(@config.date_formats[date_type]),
214
211
  archive_date: posts[0].date,
215
212
  archive_type: date_type
216
213
  }
217
- )
214
+ }
215
+
216
+ Dimples::Pager.paginate(self, posts.reverse, path, layout, data)
218
217
  end
219
218
 
220
219
  def publish_categories
221
- @categories.each_value do |category|
222
- path = File.join(
223
- @paths[:destination],
224
- @config.paths.categories,
225
- category.slug
226
- )
227
-
228
- category_posts = category.posts.reverse
229
- context = { page: { title: category.name, category: category } }
230
-
231
- paginate_posts(
232
- category_posts,
233
- path,
234
- @config.layouts.category,
235
- context
236
- )
237
-
238
- publish_feeds(category_posts, path, context)
239
- end
220
+ @categories.each_value { |category| publish_category(category) }
240
221
  end
241
222
 
242
- def paginate_posts(posts, path, layout, context = {})
243
- pager = Pager.new(
244
- path.sub(@paths[:destination], '') + '/',
245
- posts,
246
- @config.pagination
223
+ def publish_category(category)
224
+ path = File.join(
225
+ @paths[:destination],
226
+ @config.paths.categories,
227
+ category.slug
247
228
  )
248
229
 
249
- pager.each do |index|
250
- page = Page.new(self)
251
- page.layout = layout
252
-
253
- page_prefix = @config.pagination.page_prefix
254
- page_path = if index == 1
255
- path
256
- else
257
- File.join(path, "#{page_prefix}#{index}")
258
- end
259
-
260
- page.write(
261
- page_path,
262
- context.merge(pagination: pager.to_context)
263
- )
264
- end
265
- end
266
-
267
- def publish_feeds(posts, path, context = {})
268
- @config.feed_formats.each do |feed_format|
269
- feed_layout = "feeds.#{feed_format}"
270
- next unless @templates.key?(feed_layout)
271
-
272
- page = Page.new(self)
230
+ category_posts = category.posts.reverse
231
+ context = { page: { title: category.name, category: category } }
273
232
 
274
- page.layout = feed_layout
275
- page.feed_posts = posts.slice(0, @config.pagination.per_page)
276
- page.filename = 'feed'
277
- page.extension = feed_format
233
+ Dimples::Pager.paginate(
234
+ self,
235
+ category_posts,
236
+ path,
237
+ @config.layouts.category,
238
+ context
239
+ )
278
240
 
279
- page.write(path, context)
280
- end
241
+ publish_feeds(category_posts, path, context)
281
242
  end
282
243
 
283
- def archive(year, month = nil, day = nil)
284
- if day
285
- archive_day(year, month, day)
286
- elsif month
287
- archive_month(year, month)
288
- else
289
- archive_year(year)
244
+ def publish_feeds(posts, path, context = {})
245
+ @config.feed_formats.each do |format|
246
+ publish_feed(format, posts, path, context)
290
247
  end
291
248
  end
292
249
 
293
- def archive_year(year)
294
- @archives[:year][year.to_s] ||= { month: {}, posts: [] }
295
- end
296
-
297
- def archive_month(year, month)
298
- archive_year(year)[:month][month.to_s] ||= { day: {}, posts: [] }
299
- end
250
+ def publish_feed(format, posts, path, context = {})
251
+ feed = Feed.new(self, format)
300
252
 
301
- def archive_day(year, month, day)
302
- archive_month(year, month)[:day][day.to_s] ||= { posts: [] }
253
+ feed.feed_posts = posts.slice(0, @config.pagination.per_page)
254
+ feed.write(path, context)
303
255
  end
304
256
  end
305
257
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Dimples
4
- VERSION = '6.1.0'
4
+ VERSION = '6.2.0'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dimples
3
3
  version: !ruby/object:Gem::Version
4
- version: 6.1.0
4
+ version: 6.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Bogan
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-09-10 00:00:00.000000000 Z
11
+ date: 2018-09-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: hashie
@@ -178,9 +178,11 @@ extra_rdoc_files: []
178
178
  files:
179
179
  - bin/dimples
180
180
  - lib/dimples.rb
181
+ - lib/dimples/archive.rb
181
182
  - lib/dimples/category.rb
182
183
  - lib/dimples/configuration.rb
183
184
  - lib/dimples/errors.rb
185
+ - lib/dimples/feed.rb
184
186
  - lib/dimples/frontable.rb
185
187
  - lib/dimples/page.rb
186
188
  - lib/dimples/pager.rb