dimples 2.0.0 → 2.0.1

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: 2f30fbd75e775cf280a833ceb82d300e49a50d9a
4
- data.tar.gz: afe74aa069759f960a01dc4aac48ceb562123964
3
+ metadata.gz: b735e5c1923e5031dcf45fcb806258bf9f54edcd
4
+ data.tar.gz: 8b82d836b87a8d3cab0a4c2c44b64bd37782670f
5
5
  SHA512:
6
- metadata.gz: 70a4771af0e75ee3fa7cca7eaaded26f5a3fe22869dc76e5d58e6310f47838d8db3f2d8437fd44ba56ec0c41a466d9a4a7af9d43979366d7263fd97831e9a83a
7
- data.tar.gz: dfdfebedfb6e403a86f58d6cd3b76d47a55933ac6579318b480de6a1f1eca46577fcaf16d3c13ded38283cc9a5594d253456c11ea91cd109ea736fa43dda1e0d
6
+ metadata.gz: 04b49469ca3ec690671015dcc885553be7d2f728f48b3a14da141e81f40b60cdf0441c423c3369608e2a6369b563a4a6be21942fdaeddf68fefc21f8e4e42ad3
7
+ data.tar.gz: 9fac79f506828681abb38006beb7efaaf1cf71554499c8670348a27327ef09e14b0ce3f9c87d9fe08e44986fafb5eba7e702cffa6457170885bc1d8395c1d507
@@ -12,12 +12,13 @@ options = Trollop::options do
12
12
  A very, very simple static site generator.
13
13
 
14
14
  Usage:
15
- dimples [#{valid_commands.join('|')}] [options]
15
+ dimples <#{valid_commands.join('|')}> [options]
16
16
 
17
17
  Options:
18
18
  EOS
19
19
  opt :config, "Config file path", default: File.join('config', 'site.yml')
20
20
  opt :lib, "Library file path", default: 'lib'
21
+ opt :verbose, "Verbose mode", default: false
21
22
  end
22
23
 
23
24
  Trollop::educate if ARGV.empty?
@@ -42,6 +43,8 @@ end
42
43
 
43
44
  begin
44
45
  config_hash = YAML.load_file(config_path)
46
+ config_hash['verbose_logging'] = true if options[:verbose]
47
+
45
48
  config = Dimples::Configuration.new(config_hash)
46
49
  rescue
47
50
  Trollop::die "Invalid or malformed YAML config file"
@@ -52,6 +55,5 @@ site = site_klass.new(config)
52
55
 
53
56
  case command.to_sym
54
57
  when :build
55
- puts "Generating site at #{site.output_paths[:site]}"
56
58
  site.generate
57
59
  end
@@ -1,10 +1,13 @@
1
1
  $LOAD_PATH.unshift(__dir__)
2
2
 
3
+ require 'benchmark'
3
4
  require 'fileutils'
4
- require 'yaml'
5
+ require 'logger'
5
6
  require 'tilt'
7
+ require 'yaml'
6
8
 
7
9
  require 'dimples/errors'
10
+ require 'dimples/logger'
8
11
 
9
12
  require 'dimples/frontable'
10
13
  require 'dimples/writeable'
@@ -15,3 +18,11 @@ require 'dimples/page'
15
18
  require 'dimples/post'
16
19
  require 'dimples/site'
17
20
  require 'dimples/template'
21
+
22
+ module Dimples
23
+ class << self
24
+ def logger
25
+ @logger ||= Dimples::Logger.new(STDOUT)
26
+ end
27
+ end
28
+ end
@@ -27,6 +27,7 @@ module Dimples
27
27
  {
28
28
  'source_path' => current_path,
29
29
  'destination_path' => File.join(current_path, 'site'),
30
+ 'verbose_logging' => false,
30
31
  'class_overrides' => { site: nil, post: nil, page: nil },
31
32
  'rendering' => {},
32
33
  'category_names' => {},
@@ -80,7 +81,8 @@ module Dimples
80
81
  def self.default_file_extensions
81
82
  {
82
83
  'pages' => 'html',
83
- 'posts' => 'html'
84
+ 'posts' => 'html',
85
+ 'feeds' => 'atom'
84
86
  }
85
87
  end
86
88
 
@@ -0,0 +1,22 @@
1
+ module Dimples
2
+ class Logger < Logger
3
+ def initialize(*)
4
+ super
5
+ @formatter = LogFormatter
6
+ end
7
+
8
+ def debug_generation(type, count)
9
+ message = "Generating #{type} (#{count} item"
10
+ message += 's' if count != 1
11
+ message += ')...'
12
+
13
+ debug(message)
14
+ end
15
+ end
16
+
17
+ class LogFormatter < Logger::Formatter
18
+ def self.call(severity, time, program_name, message)
19
+ "#{time.strftime('%r')}: #{'- ' if severity == 'DEBUG'}#{message}\n"
20
+ end
21
+ end
22
+ end
@@ -43,16 +43,30 @@ module Dimples
43
43
  end
44
44
 
45
45
  def generate
46
- prepare_output_directory
47
- scan_files
48
- generate_files
49
- copy_assets
46
+ Dimples.logger.info("Building site at #{@output_paths[:site]}...")
47
+
48
+ result = Benchmark.measure do
49
+ prepare_output_directory
50
+ scan_files
51
+ generate_files
52
+ copy_assets
53
+ end
54
+
55
+ generation_time = result.real.round(2)
56
+
57
+ message = "Done! Site built in #{generation_time} second"
58
+ message += 's' if generation_time != 1
59
+ message += '.'
60
+
61
+ Dimples.logger.info(message)
50
62
  rescue Errors::RenderingError => e
51
- puts "Error: Failed to render #{e.file}: #{e.message}"
63
+ Dimples.logger.error("Failed to render #{e.file}: #{e.message}")
52
64
  rescue Errors::PublishingError => e
53
- puts "Error: Failed to publish #{e.file}: #{e.message}"
65
+ Dimples.logger.error("Failed to publish #{e.file}: #{e.message}")
54
66
  end
55
67
 
68
+ private
69
+
56
70
  def prepare_output_directory
57
71
  if Dir.exist?(@output_paths[:site])
58
72
  FileUtils.remove_dir(@output_paths[:site])
@@ -148,6 +162,8 @@ module Dimples
148
162
  end
149
163
 
150
164
  def generate_posts
165
+ Dimples.logger.debug_generation('posts', @posts.length) if @config['verbose_logging']
166
+
151
167
  @posts.each do |post|
152
168
  generate_post(post)
153
169
  end
@@ -165,6 +181,8 @@ module Dimples
165
181
  end
166
182
 
167
183
  def generate_pages
184
+ Dimples.logger.debug_generation('pages', @pages.length) if @config['verbose_logging']
185
+
168
186
  @pages.each do |page|
169
187
  generate_page(page)
170
188
  end
@@ -175,6 +193,8 @@ module Dimples
175
193
  end
176
194
 
177
195
  def generate_categories
196
+ Dimples.logger.debug_generation('category pages', @categories.length) if @config['verbose_logging']
197
+
178
198
  @categories.each do |slug, posts|
179
199
  generate_category(slug, posts)
180
200
  end
@@ -192,9 +212,15 @@ module Dimples
192
212
  def generate_archives
193
213
  %w(year month day).each do |date_type|
194
214
  if @config['generation']["#{date_type}_archives"]
215
+ date_type_sym = date_type.to_sym
216
+
217
+ if @config['verbose_logging']
218
+ Dimples.logger.debug_generation("#{date_type} archives", @archives[date_type_sym].count)
219
+ end
220
+
195
221
  layout = @config['layouts']["#{date_type}_archives"]
196
222
 
197
- @archives[date_type.to_sym].each_value do |posts|
223
+ @archives[date_type_sym].each_value do |posts|
198
224
  title = posts[0].date.strftime(@config['date_formats'][date_type])
199
225
  paths = [@output_paths[:archives], posts[0].year]
200
226
  dates = { year: posts[0].year }
@@ -218,7 +244,7 @@ module Dimples
218
244
  feed = @page_class.new(self)
219
245
 
220
246
  feed.filename = 'feed'
221
- feed.extension = 'atom'
247
+ feed.extension = @config['file_extensions']['feeds']
222
248
  feed.layout = 'feed'
223
249
 
224
250
  feed.write(feed.output_path(path), options)
@@ -240,6 +266,8 @@ module Dimples
240
266
 
241
267
  def copy_assets
242
268
  if Dir.exist?(@source_paths[:public])
269
+ Dimples.logger.debug("Copying assets...") if @config['verbose_logging']
270
+
243
271
  path = File.join(@source_paths[:public], '.')
244
272
  FileUtils.cp_r(path, @output_paths[:site])
245
273
  end
@@ -1,3 +1,3 @@
1
1
  module Dimples
2
- VERSION = '2.0.0'.freeze
2
+ VERSION = '2.0.1'.freeze
3
3
  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: 2.0.0
4
+ version: 2.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Bogan
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-02-21 00:00:00.000000000 Z
11
+ date: 2017-02-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: tilt
@@ -121,6 +121,7 @@ files:
121
121
  - lib/dimples/configuration.rb
122
122
  - lib/dimples/errors.rb
123
123
  - lib/dimples/frontable.rb
124
+ - lib/dimples/logger.rb
124
125
  - lib/dimples/page.rb
125
126
  - lib/dimples/post.rb
126
127
  - lib/dimples/renderable.rb