nanoc 3.6.6 → 3.6.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (39) hide show
  1. checksums.yaml +15 -0
  2. data/Gemfile +4 -3
  3. data/Gemfile.lock +48 -40
  4. data/NEWS.md +20 -2
  5. data/lib/nanoc/cli/cleaning_stream.rb +21 -6
  6. data/lib/nanoc/cli/commands/autocompile.rb +1 -0
  7. data/lib/nanoc/cli/commands/compile.rb +57 -25
  8. data/lib/nanoc/cli/commands/create-site.rb +1 -1
  9. data/lib/nanoc/cli/commands/watch.rb +3 -2
  10. data/lib/nanoc/cli.rb +9 -4
  11. data/lib/nanoc/extra/deployers/fog.rb +5 -5
  12. data/lib/nanoc/filters/handlebars.rb +3 -1
  13. data/lib/nanoc/filters/sass/sass_filesystem_importer.rb +13 -20
  14. data/lib/nanoc/filters/sass.rb +5 -20
  15. data/lib/nanoc/version.rb +1 -1
  16. data/lib/nanoc.rb +5 -0
  17. data/tasks/test.rake +16 -25
  18. data/test/base/test_context.rb +1 -1
  19. data/test/base/test_directed_graph.rb +1 -1
  20. data/test/cli/commands/test_compile.rb +61 -0
  21. data/test/cli/commands/test_deploy.rb +3 -0
  22. data/test/cli/commands/test_prune.rb +1 -0
  23. data/test/cli/commands/test_watch.rb +2 -0
  24. data/test/cli/test_cleaning_stream.rb +9 -1
  25. data/test/data_sources/test_filesystem.rb +1 -1
  26. data/test/data_sources/test_static.rb +2 -0
  27. data/test/extra/test_filesystem_tools.rb +4 -0
  28. data/test/filters/test_asciidoc.rb +1 -3
  29. data/test/filters/test_colorize_syntax.rb +4 -10
  30. data/test/filters/test_handlebars.rb +21 -0
  31. data/test/filters/test_less.rb +1 -1
  32. data/test/filters/test_maruku.rb +1 -1
  33. data/test/filters/test_pandoc.rb +1 -3
  34. data/test/filters/test_sass.rb +65 -0
  35. data/test/helper.rb +36 -5
  36. data/test/helpers/test_link_to.rb +3 -3
  37. data/test/helpers/test_rendering.rb +2 -2
  38. data/test/test_gem.rb +1 -1
  39. metadata +5 -19
checksums.yaml ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ NDYwZDczMTNhNTI0MzcxNDYwZjAzY2ZhMzRiY2E1OTA5ZmJjZDZjZg==
5
+ data.tar.gz: !binary |-
6
+ NzhlNjQyMjdiMmQ0ZWEzZGM2NWMwNjRjZWI4NTVmN2YzYTE3MWM5NA==
7
+ SHA512:
8
+ metadata.gz: !binary |-
9
+ MTY3NDMxNjY3ZWFlY2FkN2EwZjA2ZWNiMGI2MDJiYTRlY2Y5N2Y4Y2QxZjQ0
10
+ NThlYTg0ZTQ4OWU0YjA2YjM4ZDBlOTQwY2ExNTQxMDdhMTZhYzM1NmUyZDQx
11
+ YThkZDI5ZjdmYmZmMGE5NGU0ZDZjMzMyNjk0YWM1NTNlYzM3NmE=
12
+ data.tar.gz: !binary |-
13
+ NWEwMzcxMTY2ODBjMDBkYWE5NjUyNjI1MTEyMDU4MDNlNGI4NDcwMWI0ZTJj
14
+ OTVmNWY2YjU4ZTQ4N2I2YmRjNzdkYWQ3ZjhkY2RiNzdjN2FhN2VkNTQ0Mjc4
15
+ MGIyNWI2M2NlNmQ2ZWYyZmZmN2I1YTcwNzIxZTFhY2VmNmM4NGY=
data/Gemfile CHANGED
@@ -3,16 +3,17 @@ source "http://rubygems.org"
3
3
  gemspec
4
4
 
5
5
  gem 'adsf'
6
- gem 'bluecloth'
6
+ gem 'bluecloth', :platforms => :ruby
7
7
  gem 'builder'
8
8
  gem 'coderay'
9
+ gem 'compass'
9
10
  gem 'coffee-script'
10
11
  gem 'erubis'
11
12
  gem 'fog'
12
13
  gem 'haml'
13
- gem 'handlebars'
14
+ gem 'handlebars', :platforms => :ruby
14
15
  gem 'kramdown'
15
- gem 'less', '~> 2.0'
16
+ gem 'less', '~> 2.0', :platforms => :ruby
16
17
  gem 'listen'
17
18
  gem 'markaby'
18
19
  gem 'maruku'
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- nanoc (3.6.5)
4
+ nanoc (3.6.7)
5
5
  cri (~> 2.3)
6
6
 
7
7
  GEM
@@ -12,22 +12,29 @@ GEM
12
12
  rack (>= 1.0.0)
13
13
  bluecloth (2.2.0)
14
14
  builder (3.2.2)
15
- coderay (1.0.9)
15
+ celluloid (0.15.2)
16
+ timers (~> 1.1.0)
17
+ chunky_png (1.2.9)
18
+ coderay (1.1.0)
16
19
  coffee-script (2.2.0)
17
20
  coffee-script-source
18
21
  execjs
19
22
  coffee-script-source (1.6.3)
20
23
  colored (1.2)
21
- commonjs (0.2.6)
24
+ commonjs (0.2.7)
25
+ compass (0.12.2)
26
+ chunky_png (~> 1.2)
27
+ fssm (>= 0.2.7)
28
+ sass (~> 3.1)
22
29
  cri (2.4.0)
23
30
  colored (>= 1.2)
24
31
  erubis (2.7.0)
25
- excon (0.25.3)
26
- execjs (2.0.1)
27
- ffi (1.9.0)
28
- fog (1.15.0)
32
+ excon (0.28.0)
33
+ execjs (2.0.2)
34
+ ffi (1.9.3)
35
+ fog (1.18.0)
29
36
  builder
30
- excon (~> 0.25.0)
37
+ excon (~> 0.28.0)
31
38
  formatador (~> 0.2.0)
32
39
  mime-types
33
40
  multi_json (~> 1.0)
@@ -36,82 +43,82 @@ GEM
36
43
  nokogiri (~> 1.5)
37
44
  ruby-hmac
38
45
  formatador (0.2.4)
39
- haml (4.0.3)
46
+ fssm (0.2.10)
47
+ haml (4.0.4)
40
48
  tilt
41
- handlebars (0.4.0)
49
+ handlebars (0.5.0)
42
50
  commonjs (~> 0.2.3)
43
- therubyracer (~> 0.11.1)
44
- json (1.8.0)
51
+ handlebars-source (~> 1.0.12)
52
+ therubyracer (~> 0.12.0)
53
+ handlebars-source (1.0.12)
54
+ json (1.8.1)
45
55
  kramdown (1.2.0)
46
- less (2.3.3)
47
- commonjs (~> 0.2.6)
48
- libv8 (3.11.8.17)
49
- listen (1.3.0)
56
+ less (2.4.0)
57
+ commonjs (~> 0.2.7)
58
+ libv8 (3.16.14.3)
59
+ listen (2.2.0)
60
+ celluloid (>= 0.15.2)
50
61
  rb-fsevent (>= 0.9.3)
51
62
  rb-inotify (>= 0.9)
52
- rb-kqueue (>= 0.2)
53
63
  markaby (0.7.2)
54
64
  builder (>= 2.0.0)
55
- maruku (0.6.1)
56
- syntax (>= 1.0.0)
65
+ maruku (0.7.0)
57
66
  metaclass (0.0.1)
58
67
  method_source (0.8.2)
59
- mime-types (1.25)
68
+ mime-types (2.0)
60
69
  minitest (4.7.5)
61
70
  mocha (0.14.0)
62
71
  metaclass (~> 0.0.1)
63
- multi_json (1.7.9)
64
- mustache (0.99.4)
72
+ multi_json (1.8.2)
73
+ mustache (0.99.5)
65
74
  net-scp (1.1.2)
66
75
  net-ssh (>= 2.6.5)
67
- net-ssh (2.6.8)
76
+ net-ssh (2.7.0)
68
77
  nokogiri (1.5.10)
69
78
  pandoc-ruby (0.7.5)
70
79
  posix-spawn (0.3.6)
71
- pry (0.9.12.2)
72
- coderay (~> 1.0.5)
80
+ pry (0.9.12.4)
81
+ coderay (~> 1.0)
73
82
  method_source (~> 0.8)
74
83
  slop (~> 3.4)
75
- pygments.rb (0.5.2)
84
+ pygments.rb (0.5.4)
76
85
  posix-spawn (~> 0.3.6)
77
86
  yajl-ruby (~> 1.1.0)
78
87
  rack (1.5.2)
79
88
  rainpress (1.0)
80
89
  rake (10.1.0)
81
90
  rb-fsevent (0.9.3)
82
- rb-inotify (0.9.1)
91
+ rb-inotify (0.9.2)
83
92
  ffi (>= 0.5.0)
84
- rb-kqueue (0.2.0)
85
- ffi (>= 0.5.0)
86
- rdiscount (2.1.6)
93
+ rdiscount (2.1.7)
87
94
  rdoc (4.0.1)
88
95
  json (~> 1.4)
89
96
  redcarpet (3.0.0)
90
97
  ref (1.0.5)
91
98
  ruby-hmac (0.4.0)
92
99
  rubypants (0.2.0)
93
- sass (3.2.10)
94
- slim (2.0.1)
100
+ sass (3.2.12)
101
+ slim (2.0.2)
95
102
  temple (~> 0.6.6)
96
103
  tilt (>= 1.3.3, < 2.1)
97
- slop (3.4.6)
98
- syntax (1.0.0)
104
+ slop (3.4.7)
99
105
  systemu (2.5.2)
100
- temple (0.6.6)
101
- therubyracer (0.11.4)
102
- libv8 (~> 3.11.8.12)
106
+ temple (0.6.7)
107
+ therubyracer (0.12.0)
108
+ libv8 (~> 3.16.14.0)
103
109
  ref
104
110
  tilt (1.4.1)
111
+ timers (1.1.0)
105
112
  typogruby (1.0.16)
106
113
  rubypants
107
- uglifier (2.2.1)
114
+ uglifier (2.3.1)
108
115
  execjs (>= 0.3.0)
109
- multi_json (~> 1.0, >= 1.0.2)
116
+ json (>= 1.8.0)
110
117
  w3c_validators (1.2)
111
118
  json
112
119
  nokogiri
113
120
  yajl-ruby (1.1.0)
114
- yard (0.8.7)
121
+ yard (0.8.7.3)
115
122
  yuicompressor (1.2.1)
116
123
 
117
124
  PLATFORMS
@@ -124,6 +131,7 @@ DEPENDENCIES
124
131
  builder
125
132
  coderay
126
133
  coffee-script
134
+ compass
127
135
  erubis
128
136
  fog
129
137
  haml
data/NEWS.md CHANGED
@@ -1,17 +1,35 @@
1
1
  # nanoc news
2
2
 
3
+ ## 3.6.7 (2013-12-09)
4
+
5
+ Fixes:
6
+
7
+ * Made Handlebars filter usable outside layouts (#346, #348)
8
+ * Fixed ANSI color support on Windows (#352, #356)
9
+ * Made fog deployer handle prefixes properly (#351) [Oliver Byford]
10
+ * Fixed crash in watcher (#358)
11
+ * Fixed huge durations when showing skipped items after compilation (#360, #364)
12
+ * Fixed output of `--verbose` compilation statistics (#359, #365)
13
+ * Fixed issue with Sass files not recompiling (#350, 370)
14
+
15
+ Enhancements:
16
+
17
+ * Fixed Windows compatibility issues in test suite (#353) [Raphael von der Grün]
18
+ * Hid deprecated `autocompile` and `watch` commands in help
19
+ * Made CLI swallow broken pipe errors when piping to a process that terminates prematurely (#318, #369)
20
+
3
21
  ## 3.6.6 (2013-11-08)
4
22
 
5
23
  Enhancements:
6
24
 
7
25
  * Reduced number of dependencies generated by Sass filter (#306) [Gregory Pakosz]
8
- * Recognised lowercase `utf` in language value (e.g. `en_US.utf8`) as being UTF-8 (#335)
26
+ * Recognised lowercase `utf` in language value (e.g. `en_US.utf8`) as being UTF-8 (#335, #338)
9
27
  * Set [Thin](http://code.macournoyer.com/thin/) as the default server for `nanoc view` (#342, #345)
10
28
  * Removed watcher section from the default configuration file (#343, #344)
11
29
 
12
30
  Fixes:
13
31
 
14
- * Prevented capturing helper from erroneously compiling items twice (#337)
32
+ * Prevented capturing helper from erroneously compiling items twice (#331, #337)
15
33
 
16
34
  ## 3.6.5 (2013-09-29)
17
35
 
@@ -41,12 +41,16 @@ module Nanoc::CLI
41
41
 
42
42
  # @see IO#write
43
43
  def write(s)
44
- @stream.write(self.clean(s))
44
+ self._nanoc_swallow_broken_pipe_errors_while do
45
+ @stream.write(self._nanoc_clean(s))
46
+ end
45
47
  end
46
48
 
47
49
  # @see IO#<<
48
50
  def <<(s)
49
- @stream.<<(self.clean(s))
51
+ self._nanoc_swallow_broken_pipe_errors_while do
52
+ @stream.<<(self._nanoc_clean(s))
53
+ end
50
54
  end
51
55
 
52
56
  # @see IO#tty?
@@ -56,7 +60,9 @@ module Nanoc::CLI
56
60
 
57
61
  # @see IO#flush
58
62
  def flush
59
- @stream.flush
63
+ self._nanoc_swallow_broken_pipe_errors_while do
64
+ @stream.flush
65
+ end
60
66
  end
61
67
 
62
68
  # @see IO#tell
@@ -66,12 +72,16 @@ module Nanoc::CLI
66
72
 
67
73
  # @see IO#print
68
74
  def print(s)
69
- @stream.print(self.clean(s))
75
+ self._nanoc_swallow_broken_pipe_errors_while do
76
+ @stream.print(self._nanoc_clean(s))
77
+ end
70
78
  end
71
79
 
72
80
  # @see IO#puts
73
81
  def puts(*s)
74
- @stream.puts(*s.map { |ss| self.clean(ss) })
82
+ self._nanoc_swallow_broken_pipe_errors_while do
83
+ @stream.puts(*s.map { |ss| self._nanoc_clean(ss) })
84
+ end
75
85
  end
76
86
 
77
87
  # @see StringIO#string
@@ -111,10 +121,15 @@ module Nanoc::CLI
111
121
 
112
122
  protected
113
123
 
114
- def clean(s)
124
+ def _nanoc_clean(s)
115
125
  @stream_cleaners.inject(s) { |m,c| c.clean(m) }
116
126
  end
117
127
 
128
+ def _nanoc_swallow_broken_pipe_errors_while
129
+ yield
130
+ rescue Errno::EPIPE
131
+ end
132
+
118
133
  end
119
134
 
120
135
  end
@@ -2,6 +2,7 @@
2
2
 
3
3
  usage 'autocompile [options]'
4
4
  summary 'start the autocompiler'
5
+ be_hidden
5
6
  aliases :aco
6
7
  description <<-EOS
7
8
  Start the autocompiler web server. Unless overridden with commandline options
@@ -162,33 +162,33 @@ module Nanoc::CLI::Commands
162
162
 
163
163
  # @option params [Array<Nanoc::ItemRep>] :reps The list of item representations in the site
164
164
  def initialize(params={})
165
- @filter_times = {}
165
+ @times = {}
166
166
 
167
- @reps = params.fetch(:reps)
167
+ @reps = params.fetch(:reps)
168
168
  end
169
169
 
170
170
  # @see Listener#start
171
171
  def start
172
172
  Nanoc::NotificationCenter.on(:filtering_started) do |rep, filter_name|
173
- @filter_times[filter_name] ||= []
174
- @filter_times[filter_name] << Time.now
173
+ @times[filter_name] ||= []
174
+ @times[filter_name] << { :start => Time.now }
175
175
  end
176
176
  Nanoc::NotificationCenter.on(:filtering_ended) do |rep, filter_name|
177
- @filter_times[filter_name] << Time.now - @filter_times[filter_name].pop
177
+ @times[filter_name].last[:stop] = Time.now
178
178
  end
179
179
  end
180
180
 
181
181
  # @see Listener#stop
182
182
  def stop
183
- super
184
183
  self.print_profiling_feedback
184
+ super
185
185
  end
186
186
 
187
187
  protected
188
188
 
189
189
  def print_profiling_feedback
190
190
  # Get max filter length
191
- max_filter_name_length = @filter_times.keys.map { |k| k.to_s.size }.max
191
+ max_filter_name_length = durations_per_filter.keys.map { |k| k.to_s.size }.max
192
192
  return if max_filter_name_length.nil?
193
193
 
194
194
  # Print warning if necessary
@@ -203,19 +203,19 @@ module Nanoc::CLI::Commands
203
203
  puts ' ' * max_filter_name_length + ' | count min avg max tot'
204
204
  puts '-' * max_filter_name_length + '-+-----------------------------------'
205
205
 
206
- @filter_times.to_a.sort_by { |r| r[1] }.each do |row|
207
- self.print_row(row)
206
+ durations_per_filter.to_a.sort_by { |r| r[1] }.each do |row|
207
+ self.print_row(row, max_filter_name_length)
208
208
  end
209
209
  end
210
210
 
211
- def print_row(row)
211
+ def print_row(row, length)
212
212
  # Extract data
213
213
  filter_name, samples = *row
214
214
 
215
215
  # Calculate stats
216
216
  count = samples.size
217
217
  min = samples.min
218
- tot = samples.inject { |memo, i| memo + i}
218
+ tot = samples.inject(0) { |memo, i| memo + i }
219
219
  avg = tot/count
220
220
  max = samples.max
221
221
 
@@ -227,8 +227,26 @@ module Nanoc::CLI::Commands
227
227
  tot = format('%5.2f', tot)
228
228
 
229
229
  # Output stats
230
- filter_name = format("%#{max}s", filter_name)
231
- puts "#{filter_name} | #{count} #{min}s #{avg}s #{max}s #{tot}s"
230
+ key = format("%#{length}s", filter_name)
231
+ puts "#{key} | #{count} #{min}s #{avg}s #{max}s #{tot}s"
232
+ end
233
+
234
+ def durations_per_filter
235
+ @_durations_per_filter ||= begin
236
+ @times.keys.each_with_object({}) do |filter_name, result|
237
+ if durations = durations_for_filter(filter_name)
238
+ result[filter_name] = durations
239
+ end
240
+ end
241
+ end
242
+ end
243
+
244
+ def durations_for_filter(filter_name)
245
+ @times[filter_name].each_with_object([]) do |sample, result|
246
+ if sample[:start] && sample[:stop]
247
+ result << sample[:stop] - sample[:start]
248
+ end
249
+ end
232
250
  end
233
251
 
234
252
  end
@@ -310,26 +328,26 @@ module Nanoc::CLI::Commands
310
328
  # Prints file actions (created, updated, deleted, identical, skipped)
311
329
  class FileActionPrinter < Listener
312
330
 
313
- # @option params [Array<Nanoc::ItemRep>] :reps The list of item representations in the site
331
+ # @option params [Array<Nanoc::ItemRep>] :reps The list of item representations in the site
314
332
  def initialize(params={})
315
- @rep_times = {}
333
+ @start_times = {}
334
+ @stop_times = {}
316
335
 
317
- @reps = params.fetch(:reps)
336
+ @reps = params.fetch(:reps)
318
337
  end
319
338
 
320
339
  # @see Listener#start
321
340
  def start
322
341
  Nanoc::NotificationCenter.on(:compilation_started) do |rep|
323
- @rep_times[rep.raw_path] = Time.now
342
+ @start_times[rep.raw_path] = Time.now
324
343
  end
325
344
  Nanoc::NotificationCenter.on(:compilation_ended) do |rep|
326
- @rep_times[rep.raw_path] = Time.now - @rep_times[rep.raw_path]
345
+ @stop_times[rep.raw_path] = Time.now
327
346
  end
328
347
  Nanoc::NotificationCenter.on(:rep_written) do |rep, path, is_created, is_modified|
329
348
  action = (is_created ? :create : (is_modified ? :update : :identical))
330
349
  level = (is_created ? :high : (is_modified ? :high : :low))
331
- duration = Time.now - @rep_times[rep.raw_path] if @rep_times[rep.raw_path]
332
- Nanoc::CLI::Logger.instance.file(level, action, path, duration)
350
+ log(level, action, path, duration_for(rep))
333
351
  end
334
352
  end
335
353
 
@@ -337,14 +355,28 @@ module Nanoc::CLI::Commands
337
355
  def stop
338
356
  super
339
357
  @reps.select { |r| !r.compiled? }.each do |rep|
340
- rep.raw_paths.each do |snapshot_name, filename|
341
- next if filename.nil?
342
- duration = @rep_times[filename]
343
- Nanoc::CLI::Logger.instance.file(:high, :skip, filename, duration)
358
+ rep.raw_paths.each do |snapshot_name, raw_path|
359
+ log(:low, :skip, raw_path, duration_for(rep))
344
360
  end
345
361
  end
346
362
  end
347
363
 
364
+ private
365
+
366
+ def duration_for(rep)
367
+ return nil if rep.raw_path.nil?
368
+
369
+ start = @start_times[rep.raw_path]
370
+ stop = @stop_times[rep.raw_path]
371
+ return nil if start.nil? || stop.nil?
372
+
373
+ stop - start
374
+ end
375
+
376
+ def log(level, action, path, duration)
377
+ Nanoc::CLI::Logger.instance.file(level, action, path, duration)
378
+ end
379
+
348
380
  end
349
381
 
350
382
  def initialize(options, arguments, command, params={})
@@ -371,7 +403,7 @@ module Nanoc::CLI::Commands
371
403
 
372
404
  protected
373
405
 
374
- def prune
406
+ def prune
375
407
  if self.site.config[:prune][:auto_prune]
376
408
  Nanoc::Extra::Pruner.new(self.site, :exclude => self.prune_config_exclude).run
377
409
  end
@@ -150,7 +150,7 @@ EOS
150
150
  margin: 0;
151
151
  padding: 0;
152
152
 
153
- font-family: Georgia, Palatino, Times, 'Times New Roman', sans-serif;
153
+ font-family: Georgia, Palatino, serif;
154
154
  }
155
155
 
156
156
  body {
@@ -2,6 +2,7 @@
2
2
 
3
3
  usage 'watch [options]'
4
4
  summary 'start the watcher'
5
+ be_hidden
5
6
  description <<-EOS
6
7
  Start the watcher. When a change is detected, the site will be recompiled.
7
8
  EOS
@@ -71,7 +72,7 @@ module Nanoc::CLI::Commands
71
72
  dirs_to_watch = watcher_config[:dirs_to_watch] || [ 'content', 'layouts', 'lib' ]
72
73
  files_to_watch = watcher_config[:files_to_watch] || [ 'nanoc.yaml', 'config.yaml', 'Rules', 'rules', 'Rules.rb', 'rules.rb' ]
73
74
  files_to_watch = Regexp.new(files_to_watch.map { |name| Regexp.quote(name) + '$' }.join('|'))
74
- ignore_dir = Regexp.new(Dir.glob('*').map { |dir| dir if File.dir?(dir) }.compact.join('|'))
75
+ ignore_dir = Regexp.new(Dir.glob('*').map { |dir| dir if File.directory?(dir) }.compact.join('|'))
75
76
 
76
77
  # Watch
77
78
  puts "Watching for changes…"
@@ -169,7 +170,7 @@ module Nanoc::CLI::Commands
169
170
  end
170
171
 
171
172
  def on_windows?
172
- !!(RUBY_PLATFORM =~ /(mingw|bccwin|wince|mswin32)/i)
173
+ Nanoc.on_windows?
173
174
  end
174
175
 
175
176
  end
data/lib/nanoc/cli.rb CHANGED
@@ -8,6 +8,13 @@ rescue LoadError => e
8
8
  exit 1
9
9
  end
10
10
 
11
+ if Nanoc.on_windows?
12
+ begin
13
+ require 'Win32/Console/ANSI'
14
+ rescue LoadError
15
+ end
16
+ end
17
+
11
18
  module Nanoc::CLI
12
19
 
13
20
  module Commands
@@ -191,10 +198,8 @@ protected
191
198
  def self.enable_ansi_colors?(io)
192
199
  return false if !io.tty?
193
200
 
194
- begin
195
- require 'Win32/Console/ANSI' if RUBY_PLATFORM =~ /mswin|mingw/
196
- rescue LoadError
197
- return false
201
+ if Nanoc.on_windows?
202
+ return defined?(::Win32::Console::ANSI)
198
203
  end
199
204
 
200
205
  return true
@@ -23,10 +23,10 @@ module Nanoc::Extra::Deployers
23
23
  def run
24
24
  require 'fog'
25
25
 
26
- # Get params
26
+ # Get params, unsetting anything we don't want to pass through to fog.
27
27
  src = File.expand_path(self.source_path)
28
28
  bucket = self.config.delete(:bucket) || self.config.delete(:bucket_name)
29
- path = self.config[:path]
29
+ path = self.config.delete(:path)
30
30
 
31
31
  self.config.delete(:kind)
32
32
 
@@ -45,7 +45,7 @@ module Nanoc::Extra::Deployers
45
45
  # Get bucket
46
46
  puts "Getting bucket"
47
47
  begin
48
- directory = connection.directories.get(bucket)
48
+ directory = connection.directories.get(bucket, :prefix => path)
49
49
  rescue ::Excon::Errors::NotFound
50
50
  should_create_bucket = true
51
51
  end
@@ -53,7 +53,7 @@ module Nanoc::Extra::Deployers
53
53
 
54
54
  # Create bucket if necessary
55
55
  if should_create_bucket
56
- directory = connection.directories.create(:key => bucket)
56
+ directory = connection.directories.create(:key => bucket, :prefix => path)
57
57
  end
58
58
 
59
59
  # Get list of remote files
@@ -71,7 +71,7 @@ module Nanoc::Extra::Deployers
71
71
  FileUtils.cd(src) do
72
72
  files = Dir['**/*'].select { |f| File.file?(f) }
73
73
  files.each do |file_path|
74
- key = "#{path}#{file_path}"
74
+ key = path ? File.join(path, file_path) : file_path
75
75
  directory.files.create(
76
76
  :key => key,
77
77
  :body => File.open(file_path),
@@ -18,9 +18,11 @@ module Nanoc::Filters
18
18
  def run(content, params={})
19
19
  context = item.attributes.dup
20
20
  context[:item] = assigns[:item].attributes
21
- context[:layout] = assigns[:layout].attributes
22
21
  context[:config] = assigns[:config]
23
22
  context[:yield] = assigns[:content]
23
+ if assigns.has_key?(:layout)
24
+ context[:layout] = assigns[:layout].attributes
25
+ end
24
26
 
25
27
  handlebars = ::Handlebars::Context.new
26
28
  template = handlebars.compile(content)
@@ -1,28 +1,21 @@
1
1
  # encoding: utf-8
2
2
 
3
- module Nanoc::Filters
4
- class Sass
3
+ class ::Sass::Importers::Filesystem
5
4
 
6
- # Essentially the `Sass::Importers::Filesystem` but registering each
7
- # import file path.
8
- class SassFilesystemImporter < ::Sass::Importers::Filesystem
5
+ alias_method :_orig_find, :_find
9
6
 
10
- private
7
+ def _find(dir, name, options)
8
+ # Find filename
9
+ full_filename, syntax = ::Sass::Util.destructure(find_real_file(dir, name, options))
10
+ return nil if full_filename.nil?
11
11
 
12
- def _find(dir, name, options)
13
- full_filename, syntax = ::Sass::Util.destructure(find_real_file(dir, name, options))
14
- return unless full_filename && File.readable?(full_filename)
15
-
16
- filter = options[:nanoc_current_filter]
17
- item = filter.imported_filename_to_item(full_filename)
18
- filter.depend_on([ item ]) unless item.nil?
19
-
20
- options[:syntax] = syntax
21
- options[:filename] = full_filename
22
- options[:importer] = self
23
- ::Sass::Engine.new(File.read(full_filename), options)
24
- end
25
- end
12
+ # Create dependency
13
+ filter = options[:nanoc_current_filter]
14
+ item = filter.imported_filename_to_item(full_filename)
15
+ filter.depend_on([ item ]) unless item.nil?
26
16
 
17
+ # Call original _find
18
+ _orig_find(dir, name, options)
27
19
  end
20
+
28
21
  end