nanoc 3.4.0 → 3.4.1

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -2,7 +2,7 @@ source "http://rubygems.org"
2
2
 
3
3
  gemspec
4
4
 
5
- gem 'albino'
5
+ gem 'adsf'
6
6
  gem 'bluecloth'
7
7
  gem 'builder'
8
8
  gem 'coderay'
@@ -16,7 +16,7 @@ gem 'markaby'
16
16
  gem 'maruku'
17
17
  gem 'mime-types'
18
18
  gem 'mustache'
19
- gem 'nokogiri'
19
+ gem 'nokogiri', '~> 1.5.5'
20
20
  gem 'pygments.rb'
21
21
  gem 'rack'
22
22
  gem 'rake'
data/Gemfile.lock CHANGED
@@ -8,12 +8,12 @@ GEM
8
8
  remote: http://rubygems.org/
9
9
  specs:
10
10
  RedCloth (4.2.9)
11
- albino (1.3.3)
12
- posix-spawn (>= 0.3.6)
11
+ adsf (1.1.1)
12
+ rack (>= 1.0.0)
13
13
  blankslate (2.1.2.4)
14
14
  bluecloth (2.2.0)
15
15
  builder (3.0.0)
16
- coderay (1.0.6)
16
+ coderay (1.0.7)
17
17
  coffee-script (2.2.0)
18
18
  coffee-script-source
19
19
  execjs
@@ -23,13 +23,13 @@ GEM
23
23
  cri (2.3.0)
24
24
  colored (>= 1.2)
25
25
  erubis (2.7.0)
26
- excon (0.13.4)
26
+ excon (0.16.2)
27
27
  execjs (1.4.0)
28
28
  multi_json (~> 1.0)
29
29
  ffi (1.0.11)
30
- fog (1.3.1)
30
+ fog (1.5.0)
31
31
  builder
32
- excon (~> 0.13.0)
32
+ excon (~> 0.14)
33
33
  formatador (~> 0.2.0)
34
34
  mime-types
35
35
  multi_json (~> 1.0)
@@ -38,8 +38,8 @@ GEM
38
38
  nokogiri (~> 1.5.0)
39
39
  ruby-hmac
40
40
  formatador (0.2.3)
41
- haml (3.1.6)
42
- json (1.7.3)
41
+ haml (3.1.7)
42
+ json (1.7.5)
43
43
  kramdown (0.13.7)
44
44
  less (2.2.1)
45
45
  commonjs (~> 0.2.6)
@@ -48,18 +48,17 @@ GEM
48
48
  maruku (0.6.0)
49
49
  syntax (>= 1.0.0)
50
50
  metaclass (0.0.1)
51
- mime-types (1.18)
52
- minitest (3.0.1)
53
- mocha (0.11.4)
51
+ mime-types (1.19)
52
+ minitest (3.3.0)
53
+ mocha (0.12.3)
54
54
  metaclass (~> 0.0.1)
55
55
  multi_json (1.3.6)
56
56
  mustache (0.99.4)
57
57
  net-scp (1.0.4)
58
58
  net-ssh (>= 1.99.1)
59
59
  net-ssh (2.5.2)
60
- nokogiri (1.5.3)
61
- posix-spawn (0.3.6)
62
- pygments.rb (0.2.12)
60
+ nokogiri (1.5.5)
61
+ pygments.rb (0.2.13)
63
62
  rubypython (~> 0.5.3)
64
63
  rack (1.4.1)
65
64
  rainpress (1.0)
@@ -73,23 +72,23 @@ GEM
73
72
  rubypython (0.5.3)
74
73
  blankslate (>= 2.1.2.3)
75
74
  ffi (~> 1.0.7)
76
- sass (3.1.19)
77
- slim (1.2.1)
75
+ sass (3.2.1)
76
+ slim (1.2.2)
78
77
  temple (~> 0.4.0)
79
78
  tilt (~> 1.3.3)
80
79
  syntax (1.0.0)
81
- systemu (2.5.1)
80
+ systemu (2.5.2)
82
81
  temple (0.4.0)
83
82
  tilt (1.3.3)
84
83
  typogruby (1.0.15)
85
84
  rubypants
86
- uglifier (1.2.4)
85
+ uglifier (1.2.7)
87
86
  execjs (>= 0.3.0)
88
- multi_json (>= 1.0.2)
87
+ multi_json (~> 1.3)
89
88
  w3c_validators (1.2)
90
89
  json
91
90
  nokogiri
92
- yard (0.8.2)
91
+ yard (0.8.2.1)
93
92
  yuicompressor (1.2.0)
94
93
 
95
94
  PLATFORMS
@@ -97,7 +96,7 @@ PLATFORMS
97
96
 
98
97
  DEPENDENCIES
99
98
  RedCloth
100
- albino
99
+ adsf
101
100
  bluecloth
102
101
  builder
103
102
  coderay
data/NEWS.md CHANGED
@@ -1,5 +1,22 @@
1
1
  # nanoc news
2
2
 
3
+ ## 3.4.1 (2012-09-22)
4
+
5
+ Fixes:
6
+
7
+ * Fixed auto-pruning
8
+ * Made slim filter work with the capturing helper [Bil Bas]
9
+
10
+ Improvements:
11
+
12
+ * Made several speed improvements
13
+ * Added prune configuration to config.yaml
14
+ * Made nanoc check for presence of nanoc in Gemfile
15
+ * Made compile command not show identicals (use `--verbose` if you want them)
16
+ * Made relativize_paths filter recognise more paths to relativize [Arnau Siches]
17
+ * Fixed #passthrough for items without extensions [Justin Hileman]
18
+ * Added more IO/File proxy methods to cleaning streams
19
+
3
20
  ## 3.4 (2012-06-09)
4
21
 
5
22
  * Improved error output and added crash log
data/README.md CHANGED
@@ -16,6 +16,10 @@ the following places will help you out:
16
16
  * The [discussion group](http://groups.google.com/group/nanoc)
17
17
  * The [IRC channel](irc://chat.freenode.net/#nanoc)
18
18
 
19
+ ## Versioning
20
+
21
+ nanoc uses [Semantic Versioning](semver.org).
22
+
19
23
  ## Source Code Documentation
20
24
 
21
25
  The source code is located in `lib/nanoc` and is structured in a few
@@ -184,7 +184,7 @@ module Nanoc
184
184
 
185
185
  # Create routing rule
186
186
  routing_block = proc do
187
- item.identifier.chop + '.' + item[:extension]
187
+ item[:extension].nil? ? item.identifier.chop : item.identifier.chop + '.' + item[:extension]
188
188
  end
189
189
  routing_rule = Rule.new(identifier_to_regex(identifier), rep_name, routing_block)
190
190
  @rules_collection.add_item_routing_rule(routing_rule, :before)
@@ -7,6 +7,8 @@ module Nanoc
7
7
  # ({Nanoc::Extra::VCS}).
8
8
  class PluginRegistry
9
9
 
10
+ extend Nanoc::Memoization
11
+
10
12
  # A module that contains class methods for plugins. It provides functions
11
13
  # for setting identifiers, registering plugins and finding plugins. Plugin
12
14
  # classes should extend this module.
@@ -178,6 +180,7 @@ module Nanoc
178
180
  class_or_name
179
181
  end
180
182
  end
183
+ memoize :resolve
181
184
 
182
185
  end
183
186
 
@@ -36,7 +36,8 @@ module Nanoc
36
36
  :output_dir => 'output',
37
37
  :data_sources => [ {} ],
38
38
  :index_filenames => [ 'index.html' ],
39
- :enable_output_diff => false
39
+ :enable_output_diff => false,
40
+ :prune => { :auto_prune => false, :exclude => [ '.git', '.hg', '.svn', 'CVS' ] }
40
41
  }
41
42
 
42
43
  # Creates a site object for the site specified by the given
@@ -51,7 +51,7 @@ module Nanoc::CLI
51
51
 
52
52
  # @see IO#tty?
53
53
  def tty?
54
- @stream.tty?
54
+ @cached_is_tty ||= @stream.tty?
55
55
  end
56
56
 
57
57
  # @see IO#flush
@@ -79,6 +79,21 @@ module Nanoc::CLI
79
79
  @stream.string
80
80
  end
81
81
 
82
+ # @see IO#reopen
83
+ def reopen(*a)
84
+ @stream.reopen(*a)
85
+ end
86
+
87
+ # @see File#exist?
88
+ def exist?
89
+ @stream.exist?
90
+ end
91
+
92
+ # @see File.exists?
93
+ def exists?
94
+ @stream.exists?
95
+ end
96
+
82
97
  protected
83
98
 
84
99
  def clean(s)
@@ -50,9 +50,17 @@ module Nanoc::CLI::Commands
50
50
  @filter_times = {}
51
51
  setup_notifications
52
52
 
53
+ # Set up progress indicator threads
54
+ @progress_locks = {}
55
+ @progress_threads = {}
56
+
53
57
  # Prepare for generating diffs
54
58
  setup_diffs
55
59
 
60
+ # Set up GC control
61
+ @gc_lock = Mutex.new
62
+ @gc_count = 0
63
+
56
64
  # Compile
57
65
  self.site.compile
58
66
 
@@ -72,7 +80,7 @@ module Nanoc::CLI::Commands
72
80
  teardown_diffs
73
81
 
74
82
  # Prune
75
- if self.site.config[:auto_prune]
83
+ if self.site.config[:prune][:auto_prune]
76
84
  Nanoc::Extra::Pruner.new(self.site).run
77
85
  end
78
86
 
@@ -106,8 +114,9 @@ module Nanoc::CLI::Commands
106
114
  # File notifications
107
115
  Nanoc::NotificationCenter.on(:rep_written) do |rep, path, is_created, is_modified|
108
116
  action = (is_created ? :create : (is_modified ? :update : :identical))
117
+ level = (is_created ? :high : (is_modified ? :high : :low))
109
118
  duration = Time.now - @rep_times[rep.raw_path] if @rep_times[rep.raw_path]
110
- Nanoc::CLI::Logger.instance.file(:high, action, path, duration)
119
+ Nanoc::CLI::Logger.instance.file(level, action, path, duration)
111
120
  end
112
121
 
113
122
  # Debug notifications
@@ -144,6 +153,12 @@ module Nanoc::CLI::Commands
144
153
 
145
154
  # Timing notifications
146
155
  Nanoc::NotificationCenter.on(:compilation_started) do |rep|
156
+ if @gc_count % 20 == 0 && !ENV.has_key?('TRAVIS')
157
+ GC.enable
158
+ GC.start
159
+ GC.disable
160
+ end
161
+ @gc_count += 1
147
162
  @rep_times[rep.raw_path] = Time.now
148
163
  end
149
164
  Nanoc::NotificationCenter.on(:compilation_ended) do |rep|
@@ -217,27 +232,30 @@ module Nanoc::CLI::Commands
217
232
  # Only show progress on terminals
218
233
  return if !$stdout.tty?
219
234
 
220
- @progress_thread = Thread.new do
221
- delay = 1.0
222
- step = 0
235
+ @progress_locks[rep.inspect + filter_name.inspect] = lock = Mutex.new
236
+ lock.synchronize do
237
+ @progress_threads[rep.inspect + filter_name.inspect] = Thread.new do
238
+ delay = 1.0
239
+ step = 0
223
240
 
224
- text = "Running #{filter_name} filter… "
241
+ text = "Running #{filter_name} filter… "
225
242
 
226
- while !Thread.current[:stopped]
227
- sleep 0.1
243
+ while !Thread.current[:stopped]
244
+ sleep 0.1
228
245
 
229
- # Wait for a while before showing text
230
- delay -= 0.1
231
- next if delay > 0.05
246
+ # Wait for a while before showing text
247
+ delay -= 0.1
248
+ next if delay > 0.05
232
249
 
233
- # Print progress
234
- $stdout.print text + %w( | / - \\ )[step] + "\r"
235
- step = (step + 1) % 4
236
- end
250
+ # Print progress
251
+ $stdout.print text + %w( | / - \\ )[step] + "\r"
252
+ step = (step + 1) % 4
253
+ end
237
254
 
238
- # Clear text
239
- if delay < 0.05
240
- $stdout.print ' ' * (text.length + 1 + 1) + "\r"
255
+ # Clear text
256
+ if delay < 0.05
257
+ $stdout.print ' ' * (text.length + 1 + 1) + "\r"
258
+ end
241
259
  end
242
260
  end
243
261
  end
@@ -246,7 +264,10 @@ module Nanoc::CLI::Commands
246
264
  # Only show progress on terminals
247
265
  return if !$stdout.tty?
248
266
 
249
- @progress_thread[:stopped] = true
267
+ lock = @progress_locks[rep.inspect + filter_name.inspect]
268
+ lock.synchronize do
269
+ @progress_threads[rep.inspect + filter_name.inspect][:stopped] = true
270
+ end
250
271
  end
251
272
 
252
273
  def print_profiling_feedback(reps)
@@ -201,6 +201,16 @@ module Nanoc::CLI
201
201
  stream.puts Nanoc.version_information
202
202
  stream.puts
203
203
 
204
+ # System information
205
+ begin
206
+ uname = `uname -a`
207
+ stream.puts '=== SYSTEM INFORMATION:'
208
+ stream.puts
209
+ stream.puts uname
210
+ stream.puts
211
+ rescue Errno::ENOENT
212
+ end
213
+
204
214
  # Installed gems
205
215
  stream.puts '=== INSTALLED GEMS:'
206
216
  stream.puts
data/lib/nanoc/cli.rb CHANGED
@@ -1,6 +1,12 @@
1
1
  # encoding: utf-8
2
2
 
3
- require 'cri'
3
+ begin
4
+ require 'cri'
5
+ rescue LoadError => e
6
+ $stderr.puts e
7
+ $stderr.puts "If you are using a Gemfile, make sure that the Gemfile contains nanoc ('gem \"nanoc\"')."
8
+ exit 1
9
+ end
4
10
 
5
11
  module Nanoc::CLI
6
12
 
@@ -6,7 +6,7 @@ module Nanoc::Filters
6
6
  require 'nanoc/helpers/link_to'
7
7
  include Nanoc::Helpers::LinkTo
8
8
 
9
- SELECTORS = [ 'a/@href', 'img/@src', 'script/@src', 'link/@href' ]
9
+ SELECTORS = [ '*/@href', '*/@src', 'object/@data', 'param[@name="movie"]/@content', 'comment()' ]
10
10
 
11
11
  # Relativizes all paths in the given content, which can be HTML, XHTML, XML
12
12
  # or CSS. This filter is quite useful if a site needs to be hosted in a
@@ -20,8 +20,8 @@ module Nanoc::Filters
20
20
  # `:html`, `:xhtml`, `:xml` or `:css`.
21
21
  #
22
22
  # @option params [Array] :select The XPath expressions that matches the
23
- # nodes to modify. This param is useful only for the `:xml` and `:xhtml`
24
- # types.
23
+ # nodes to modify. This param is useful only for the `:html`, `:xml` and
24
+ # `:xhtml` types.
25
25
  #
26
26
  # @option params [Hash] :namespaces The pairs `prefix => uri` to define
27
27
  # any namespace you want to use in the XPath expressions. This param
@@ -76,7 +76,16 @@ module Nanoc::Filters
76
76
  doc = content =~ /<html[\s>]/ ? klass.parse(content) : klass.fragment(content)
77
77
  selectors.map { |sel| "descendant-or-self::#{sel}" }.each do |selector|
78
78
  doc.xpath(selector, namespaces).each do |node|
79
- if self.path_is_relativizable?(node.content)
79
+ if node.name == 'comment'
80
+ content = node.content.dup
81
+ content = content.sub(%r{^(\s*\[.+?\]>\s*)(.+?)(\s*<!\[endif\])}m) do |m|
82
+ fragment = nokogiri_process($2, selectors, namespaces, klass, type)
83
+ $1 + fragment + $3
84
+ end
85
+ comment = Nokogiri::XML::Comment.new(doc, content)
86
+ # Works w/ Nokogiri 1.5.5 but fails w/ Nokogiri 1.5.2
87
+ node.replace(comment)
88
+ elsif self.path_is_relativizable?(node.content)
80
89
  node.content = relative_path_to(node.content)
81
90
  end
82
91
  end
@@ -97,3 +106,4 @@ module Nanoc::Filters
97
106
 
98
107
  end
99
108
  end
109
+
@@ -14,10 +14,15 @@ module Nanoc::Filters
14
14
  #
15
15
  # @return [String] The filtered content
16
16
  def run(content, params={})
17
+ params = {
18
+ :disable_capture => true, # Capture managed by nanoc
19
+ :buffer => '_erbout', # Force slim to output to the buffer used by nanoc
20
+ }.merge params
21
+
17
22
  # Create context
18
23
  context = ::Nanoc::Context.new(assigns)
19
24
 
20
- ::Slim::Template.new { content }.render(context) { assigns[:content] }
25
+ ::Slim::Template.new(params) { content }.render(context) { assigns[:content] }
21
26
  end
22
27
 
23
28
  end
@@ -162,7 +162,11 @@ module Nanoc::Helpers
162
162
  # Remove addition
163
163
  erbout[erbout_length..-1] = ''
164
164
 
165
- # Done
165
+ # Depending on how the filter outputs, the result might be a
166
+ # single string or an array of strings (slim outputs the latter).
167
+ erbout_addition = erbout_addition.join if erbout_addition.is_a? Array
168
+
169
+ # Done.
166
170
  erbout_addition
167
171
  end
168
172
 
data/lib/nanoc.rb CHANGED
@@ -3,7 +3,7 @@
3
3
  module Nanoc
4
4
 
5
5
  # The current nanoc version.
6
- VERSION = '3.4.0'
6
+ VERSION = '3.4.1'
7
7
 
8
8
  # @return [String] A string containing information about this nanoc version
9
9
  # and its environment (Ruby engine and version, Rubygems version if any).
@@ -44,6 +44,34 @@ class Nanoc::CompilerDSLTest < MiniTest::Unit::TestCase
44
44
  end
45
45
  end
46
46
 
47
+ def test_passthrough_no_ext
48
+ # Create site
49
+ Nanoc::CLI.run %w( create_site bar)
50
+ FileUtils.cd('bar') do
51
+ # Create rep
52
+ item = Nanoc::Item.new('foo', { :extension => nil }, '/foo/')
53
+ rep = Nanoc::ItemRep.new(item, :default)
54
+
55
+ # Create other necessary stuff
56
+ site = Nanoc::Site.new('.')
57
+ site.items << item
58
+ compiler = site.compiler
59
+ dsl = site.compiler.rules_collection.dsl
60
+
61
+ # Create rule
62
+ dsl.passthrough '/foo/'
63
+
64
+ # Route and compile
65
+ rule = compiler.rules_collection.routing_rule_for(rep)
66
+ path = rule.apply_to(rep, :compiler => compiler)
67
+ compiler.send :compile_rep, rep
68
+
69
+ # Check result
70
+ assert_equal 'foo', rep.compiled_content
71
+ assert_equal '/foo', path
72
+ end
73
+ end
74
+
47
75
  def test_identifier_to_regex_without_wildcards
48
76
  # Create compiler DSL
49
77
  compiler_dsl = Nanoc::CompilerDSL.new(nil, {})
@@ -30,4 +30,45 @@ class Nanoc::CLI::Commands::CompileTest < MiniTest::Unit::TestCase
30
30
  end
31
31
  end
32
32
 
33
+ def test_auto_prune
34
+ with_site do |site|
35
+ Nanoc::CLI.run %w( create_item foo )
36
+ Nanoc::CLI.run %w( create_item bar )
37
+ Nanoc::CLI.run %w( create_item baz )
38
+
39
+ File.open('Rules', 'w') do |io|
40
+ io.write "compile '*' do\n"
41
+ io.write " filter :erb\n"
42
+ io.write "end\n"
43
+ io.write "\n"
44
+ io.write "route '*' do\n"
45
+ io.write " if item.binary?\n"
46
+ io.write " item.identifier.chop + '.' + item[:extension]\n"
47
+ io.write " else\n"
48
+ io.write " item.identifier + 'index.html'\n"
49
+ io.write " end\n"
50
+ io.write "end\n"
51
+ io.write "\n"
52
+ io.write "layout '*', :erb\n"
53
+ end
54
+
55
+ File.open('output/stray.html', 'w') do |io|
56
+ io.write 'I am a stray file and I am about to be deleted!'
57
+ end
58
+
59
+ assert File.file?('output/stray.html')
60
+ Nanoc::CLI.run %w( compile )
61
+ assert File.file?('output/stray.html')
62
+
63
+ File.open('config.yaml', 'w') do |io|
64
+ io.write "prune:\n"
65
+ io.write " auto_prune: true\n"
66
+ end
67
+
68
+ assert File.file?('output/stray.html')
69
+ Nanoc::CLI.run %w( compile )
70
+ refute File.file?('output/stray.html')
71
+ end
72
+ end
73
+
33
74
  end
@@ -0,0 +1,45 @@
1
+ # encoding: utf-8
2
+
3
+ class Nanoc::CLI::CleaningStreamTest < MiniTest::Unit::TestCase
4
+
5
+ include Nanoc::TestHelpers
6
+
7
+ class Stream
8
+
9
+ attr_accessor :called_methods
10
+
11
+ def initialize
12
+ @called_methods = Set.new
13
+ end
14
+
15
+ def method_missing(symbol, *args)
16
+ @called_methods << symbol
17
+ end
18
+
19
+ end
20
+
21
+ def test_forward
22
+ methods = [ :write, :<<, :tty?, :flush, :tell, :print, :puts, :string, :reopen, :exist?, :exists? ]
23
+
24
+ s = Stream.new
25
+ cs = Nanoc::CLI::CleaningStream.new(s)
26
+
27
+ cs.write('aaa')
28
+ cs << 'bb'
29
+ cs.tty?
30
+ cs.flush
31
+ cs.tell
32
+ cs.print('cc')
33
+ cs.puts('dd')
34
+ cs.string
35
+ cs.reopen('/dev/null', 'r')
36
+ cs.exist?
37
+ cs.exists?
38
+
39
+ methods.each do |m|
40
+ assert s.called_methods.include?(m), "expected #{m} to be called"
41
+ end
42
+ end
43
+
44
+ end
45
+
@@ -305,6 +305,32 @@ EOS
305
305
  assert_equal(expected_content, actual_content)
306
306
  end
307
307
 
308
+
309
+ def test_filter_html_object_with_relative_path
310
+ # Create filter with mock item
311
+ filter = Nanoc::Filters::RelativizePaths.new
312
+
313
+ # Mock item
314
+ filter.instance_eval do
315
+ @item_rep = Nanoc::ItemRep.new(
316
+ Nanoc::Item.new(
317
+ 'content',
318
+ {},
319
+ '/foo/bar/baz/'),
320
+ :blah)
321
+ @item_rep.path = '/woof/meow/'
322
+ end
323
+
324
+ # Set content
325
+ raw_content = %[<object data="/example"><param name="movie" content="/example"></object>]
326
+ expected_content = %[<object data="../../example"><param name="movie" content="../../example"></object>]
327
+
328
+ # Test
329
+ actual_content = filter.run(raw_content, :type => :html)
330
+ assert_equal(expected_content, actual_content)
331
+ end
332
+
333
+
308
334
  def test_filter_implicit
309
335
  # Create filter with mock item
310
336
  filter = Nanoc::Filters::RelativizePaths.new
@@ -659,5 +685,77 @@ XML
659
685
  end
660
686
  end
661
687
 
688
+ def test_filter_fragment_xhtml_with_comments
689
+ if_have 'nokogiri' do
690
+ # Create filter with mock item
691
+ filter = Nanoc::Filters::RelativizePaths.new
692
+
693
+ # Mock item
694
+ filter.instance_eval do
695
+ @item_rep = Nanoc::ItemRep.new(
696
+ Nanoc::Item.new(
697
+ 'content',
698
+ {},
699
+ '/foo/baz/'),
700
+ :blah)
701
+ @item_rep.path = '/foo/baz/'
702
+ end
703
+
704
+ # Set content
705
+ raw_content = %[
706
+ <link rel="stylesheet" href="/foo.css" />
707
+ <!--[if lt IE 9]>
708
+ <script src="/js/lib/html5shiv.js"></script>
709
+ <![endif]-->
710
+ ]
711
+
712
+ expected_content = %[
713
+ <link rel="stylesheet" href="../../foo.css" />
714
+ <!--[if lt IE 9]>
715
+ <script src="../../js/lib/html5shiv.js"></script>
716
+ <![endif]-->
717
+ ]
718
+
719
+ # Test
720
+ actual_content = filter.run(raw_content.freeze, :type => :xhtml)
721
+ assert_equal(expected_content, actual_content)
722
+ end
723
+ end
724
+
725
+
726
+ def test_filter_fragment_html_with_comments
727
+ if_have 'nokogiri' do
728
+ # Create filter with mock item
729
+ filter = Nanoc::Filters::RelativizePaths.new
730
+
731
+ # Mock item
732
+ filter.instance_eval do
733
+ @item_rep = Nanoc::ItemRep.new(
734
+ Nanoc::Item.new(
735
+ 'content',
736
+ {},
737
+ '/foo/baz/'),
738
+ :blah)
739
+ @item_rep.path = '/foo/baz/'
740
+ end
741
+
742
+ # Set content
743
+ raw_content = %[
744
+ <!--[if lt IE 9]>
745
+ <script src="/js/lib/html5shiv.js"></script>
746
+ <![endif]-->
747
+ ]
748
+
749
+ expected_content = %[
750
+ <!--[if lt IE 9]>
751
+ <script src="../../js/lib/html5shiv.js"></script>
752
+ <![endif]-->]
753
+
754
+ # Test
755
+ actual_content = filter.run(raw_content.freeze, :type => :html)
756
+ assert_equal(expected_content, actual_content)
757
+ end
758
+ end
759
+
662
760
 
663
761
  end
@@ -11,7 +11,7 @@ class Nanoc::Filters::UglifyJSTest < MiniTest::Unit::TestCase
11
11
 
12
12
  # Run filter
13
13
  result = filter.run("foo = 1; (function(bar) { if (true) alert(bar); })(foo)")
14
- assert_equal("foo=1,function(a){alert(a)}(foo);", result)
14
+ assert_match(/foo=1,function\((.)\){alert\(\1\)}\(foo\);/, result)
15
15
  end
16
16
  end
17
17
 
@@ -23,7 +23,7 @@ class Nanoc::Filters::UglifyJSTest < MiniTest::Unit::TestCase
23
23
 
24
24
  # Run filter
25
25
  result = filter.run("foo = 1; (function(bar) { if (true) alert(bar); })(foo)", :toplevel => true)
26
- assert_equal("foo=1,function(a){alert(a)}(foo);", result)
26
+ assert_match(/foo=1,function\((.)\){alert\(\1\)}\(foo\);/, result)
27
27
  end
28
28
  end
29
29
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nanoc
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.4.0
4
+ version: 3.4.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-06-09 00:00:00.000000000 Z
12
+ date: 2012-09-22 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: cri
@@ -308,6 +308,7 @@ files:
308
308
  - test/cli/commands/test_info.rb
309
309
  - test/cli/commands/test_prune.rb
310
310
  - test/cli/commands/test_update.rb
311
+ - test/cli/test_cleaning_stream.rb
311
312
  - test/cli/test_cli.rb
312
313
  - test/cli/test_error_handler.rb
313
314
  - test/cli/test_logger.rb