nanoc 3.3.3 → 3.3.4

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -8,6 +8,7 @@ gem 'builder'
8
8
  gem 'coderay'
9
9
  gem 'coffee-script'
10
10
  gem 'erubis'
11
+ gem 'fog'
11
12
  gem 'haml'
12
13
  gem 'kramdown'
13
14
  gem 'less', '~> 2.0'
@@ -16,6 +17,7 @@ gem 'maruku'
16
17
  gem 'mime-types'
17
18
  gem 'mustache'
18
19
  gem 'nokogiri'
20
+ gem 'pygments.rb'
19
21
  gem 'rack'
20
22
  gem 'rainpress'
21
23
  gem 'rdiscount'
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- nanoc (3.3.2)
4
+ nanoc (3.3.4)
5
5
  cri (~> 2.2)
6
6
 
7
7
  GEM
@@ -10,6 +10,7 @@ GEM
10
10
  RedCloth (4.2.9)
11
11
  albino (1.3.3)
12
12
  posix-spawn (>= 0.3.6)
13
+ blankslate (2.1.2.4)
13
14
  bluecloth (2.2.0)
14
15
  builder (3.0.0)
15
16
  coderay (1.0.6)
@@ -20,8 +21,21 @@ GEM
20
21
  commonjs (0.2.5)
21
22
  cri (2.2.1)
22
23
  erubis (2.7.0)
24
+ excon (0.13.4)
23
25
  execjs (1.3.0)
24
26
  multi_json (~> 1.0)
27
+ ffi (1.0.11)
28
+ fog (1.3.1)
29
+ builder
30
+ excon (~> 0.13.0)
31
+ formatador (~> 0.2.0)
32
+ mime-types
33
+ multi_json (~> 1.0)
34
+ net-scp (~> 1.0.4)
35
+ net-ssh (>= 2.1.3)
36
+ nokogiri (~> 1.5.0)
37
+ ruby-hmac
38
+ formatador (0.2.1)
25
39
  haml (3.1.4)
26
40
  json (1.6.6)
27
41
  kramdown (0.13.5)
@@ -40,8 +54,13 @@ GEM
40
54
  metaclass (~> 0.0.1)
41
55
  multi_json (1.2.0)
42
56
  mustache (0.99.4)
57
+ net-scp (1.0.4)
58
+ net-ssh (>= 1.99.1)
59
+ net-ssh (2.3.0)
43
60
  nokogiri (1.5.2)
44
61
  posix-spawn (0.3.6)
62
+ pygments.rb (0.2.12)
63
+ rubypython (~> 0.5.3)
45
64
  rack (1.4.1)
46
65
  rainpress (1.0)
47
66
  rake (0.9.2.2)
@@ -49,7 +68,11 @@ GEM
49
68
  rdoc (3.12)
50
69
  json (~> 1.4)
51
70
  redcarpet (2.1.1)
71
+ ruby-hmac (0.4.0)
52
72
  rubypants (0.2.0)
73
+ rubypython (0.5.3)
74
+ blankslate (>= 2.1.2.3)
75
+ ffi (~> 1.0.7)
53
76
  sass (3.1.15)
54
77
  slim (1.2.0)
55
78
  temple (~> 0.4.0)
@@ -82,6 +105,7 @@ DEPENDENCIES
82
105
  coderay
83
106
  coffee-script
84
107
  erubis
108
+ fog
85
109
  haml
86
110
  kramdown
87
111
  less (~> 2.0)
@@ -93,6 +117,7 @@ DEPENDENCIES
93
117
  mustache
94
118
  nanoc!
95
119
  nokogiri
120
+ pygments.rb
96
121
  rack
97
122
  rainpress
98
123
  rake
data/NEWS.md CHANGED
@@ -1,12 +1,17 @@
1
1
  # nanoc news
2
2
 
3
+ ## 3.3.4 (2012-04-23)
4
+
5
+ * Fixed bug which caused the compilation stack to be empty
6
+ * Restored Ruby 1.8 compatibility
7
+
3
8
  ## 3.3.3 (2012-04-11)
4
9
 
5
10
  * Fixed directed graph implementation on Rubinius
6
11
  * Made capturing helper not remember content between runs
7
12
  * Fixed Date#freeze issue on Ruby 1.8.x
8
13
  * Made it possible to have any kind of object as parameters in the Rules file
9
- * Fixed bug which caused changes routes not to cause a recompile
14
+ * Fixed bug which caused changed routes not to cause a recompile
10
15
 
11
16
  ## 3.3.2 (2012-03-16)
12
17
 
@@ -3,7 +3,7 @@
3
3
  module Nanoc
4
4
 
5
5
  # The current nanoc version.
6
- VERSION = '3.3.3'
6
+ VERSION = '3.3.4'
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).
@@ -385,14 +385,14 @@ module Nanoc
385
385
 
386
386
  rep.compiled = true
387
387
  compiled_content_cache[rep] = rep.content
388
+
389
+ Nanoc::NotificationCenter.post(:visit_ended, rep.item)
390
+ Nanoc::NotificationCenter.post(:processing_ended, rep)
391
+ Nanoc::NotificationCenter.post(:compilation_ended, rep)
388
392
  rescue => e
389
393
  rep.forget_progress
390
394
  Nanoc::NotificationCenter.post(:compilation_failed, rep, e)
391
395
  raise e
392
- ensure
393
- Nanoc::NotificationCenter.post(:visit_ended, rep.item)
394
- Nanoc::NotificationCenter.post(:processing_ended, rep)
395
- Nanoc::NotificationCenter.post(:compilation_ended, rep)
396
396
  end
397
397
 
398
398
  # Clears the list of dependencies for items that will be recompiled.
@@ -210,7 +210,7 @@ module Nanoc
210
210
  def make_rule_memory_serializable(rs)
211
211
  rs.map do |r|
212
212
  if r[0] == :filter
213
- [ r[0], r[1], r[2].to_a.sort.map { |a| a.inspect } ]
213
+ [ r[0], r[1], r[2].to_a.map { |a| a.inspect } ]
214
214
  else
215
215
  r
216
216
  end
@@ -34,21 +34,23 @@ module Nanoc::Filters
34
34
 
35
35
  # Filter
36
36
  case params[:type]
37
- when :html
38
- # FIXME parse HTML the proper way using nokogiri
39
- content.gsub(/(<[^>]+\s+(src|href))=(['"]?)(\/(?:[^\/].*?)?)\3([\s\/>])/) do
40
- $1 + '=' + $3 + relative_path_to($4) + $3 + $5
41
- end
42
37
  when :css
43
38
  # FIXME parse CSS the proper way using csspool or something
44
39
  content.gsub(/url\((['"]?)(\/(?:[^\/].*?)?)\1\)/) do
45
40
  'url(' + $1 + relative_path_to($2) + $1 + ')'
46
41
  end
47
- when :xml, :xhtml
42
+ when :html, :xml, :xhtml
48
43
  selectors = params.fetch(:select) { SELECTORS }
49
44
  namespaces = params[:namespaces] || {}
50
45
 
51
- if params[:type] == :xhtml
46
+ require 'nokogiri'
47
+ case params[:type]
48
+ when :html
49
+ klass = ::Nokogiri::HTML
50
+ when :xml
51
+ klass = ::Nokogiri::XML
52
+ when :xhtml
53
+ klass = ::Nokogiri::XML
52
54
  # FIXME cleanup because it is ugly
53
55
  # this cleans the XHTML namespace to process fragments and full
54
56
  # documents in the same way. At least, Nokogiri adds this namespace
@@ -56,7 +58,7 @@ module Nanoc::Filters
56
58
  content.sub!(%r{(<html[^>]+)xmlns="http://www.w3.org/1999/xhtml"}, '\1')
57
59
  end
58
60
 
59
- nokogiri_process(content, selectors, namespaces, params[:type])
61
+ nokogiri_process(content, selectors, namespaces, klass, params[:type])
60
62
  else
61
63
  raise RuntimeError.new(
62
64
  "The relativize_paths needs to know the type of content to " +
@@ -67,13 +69,11 @@ module Nanoc::Filters
67
69
 
68
70
  private
69
71
 
70
- def nokogiri_process(content, selectors, namespaces, type)
71
- require 'nokogiri'
72
-
72
+ def nokogiri_process(content, selectors, namespaces, klass, type)
73
73
  # Ensure that all prefixes are strings
74
74
  namespaces = namespaces.inject({}) { |new, (prefix, uri)| new.merge(prefix.to_s => uri) }
75
75
 
76
- doc = ::Nokogiri::XML.fragment(content)
76
+ doc = 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
79
  node.content = relative_path_to(node.content)
@@ -88,7 +88,6 @@ module Nanoc::Filters
88
88
 
89
89
  result
90
90
  end
91
-
92
-
91
+
93
92
  end
94
- end
93
+ end
@@ -124,6 +124,11 @@ module Nanoc::Helpers
124
124
  raise RuntimeError, "Cannot get the relative path to #{target.inspect} because this target is not outputted (its routing rule returns nil)" if path.nil?
125
125
  end
126
126
 
127
+ # Handle Windows network (UNC) paths
128
+ if path.start_with?('//') || path.start_with?('\\\\')
129
+ return path
130
+ end
131
+
127
132
  # Get source and destination paths
128
133
  dst_path = Pathname.new(path)
129
134
  raise RuntimeError, "Cannot get the relative path to #{path} because the current item representation, #{@item_rep.inspect}, is not outputted (its routing rule returns nil)" if @item_rep.path.nil?
@@ -399,7 +399,7 @@ class Nanoc::OutdatednessCheckerTest < MiniTest::Unit::TestCase
399
399
  io.write("compile '/' do\n")
400
400
  io.write(" c = Class.new {}\n")
401
401
  io.write(" def c.inspect ; 'I am so classy' ; end\n")
402
- io.write(" filter :erb, :stuff => c\n")
402
+ io.write(" filter :erb, :stuff => c, :more => 123\n")
403
403
  io.write("end\n")
404
404
  io.write("\n")
405
405
  io.write("route '/' do\n")
@@ -46,7 +46,7 @@ class Nanoc::Filters::RelativizePathsTest < MiniTest::Unit::TestCase
46
46
 
47
47
  # Set content
48
48
  raw_content = %[<a href='/foo'>foo</a>]
49
- expected_content = %[<a href='../..'>foo</a>]
49
+ expected_content = %[<a href="../..">foo</a>]
50
50
 
51
51
  # Test
52
52
  actual_content = filter.run(raw_content, :type => :html)
@@ -70,7 +70,7 @@ class Nanoc::Filters::RelativizePathsTest < MiniTest::Unit::TestCase
70
70
 
71
71
  # Set content
72
72
  raw_content = %[<a href=/foo>foo</a>]
73
- expected_content = %[<a href=../..>foo</a>]
73
+ expected_content = %[<a href="../..">foo</a>]
74
74
 
75
75
  # Test
76
76
  actual_content = filter.run(raw_content, :type => :html)
@@ -101,6 +101,30 @@ class Nanoc::Filters::RelativizePathsTest < MiniTest::Unit::TestCase
101
101
  assert_equal(expected_content, actual_content)
102
102
  end
103
103
 
104
+ def test_filter_html_nested
105
+ # Create filter with mock item
106
+ filter = Nanoc::Filters::RelativizePaths.new
107
+
108
+ # Mock item
109
+ filter.instance_eval do
110
+ @item_rep = Nanoc::ItemRep.new(
111
+ Nanoc::Item.new(
112
+ 'content',
113
+ {},
114
+ '/foo/bar/baz/'),
115
+ :blah)
116
+ @item_rep.path = '/foo/bar/baz/'
117
+ end
118
+
119
+ # Set content
120
+ raw_content = %[<a href="/"><img src="/bar.png" /></a>]
121
+ expected_content = %[<a href="../../../"><img src="../../../bar.png"></a>]
122
+
123
+ # Test
124
+ actual_content = filter.run(raw_content, :type => :html)
125
+ assert_equal(expected_content, actual_content)
126
+ end
127
+
104
128
  def test_filter_html_outside_tag
105
129
  # Create filter with mock item
106
130
  filter = Nanoc::Filters::RelativizePaths.new
@@ -530,4 +554,4 @@ XML
530
554
  end
531
555
 
532
556
 
533
- end
557
+ end
@@ -200,6 +200,13 @@ class Nanoc::Helpers::LinkToTest < MiniTest::Unit::TestCase
200
200
  end
201
201
  end
202
202
 
203
+ def test_relative_path_to_to_windows_path
204
+ @item_rep = mock
205
+ @item_rep.stubs(:path).returns('/foo/quux/')
206
+
207
+ assert_equal '//mydomain/tahontaenrat', relative_path_to('//mydomain/tahontaenrat')
208
+ end
209
+
203
210
  def test_examples_link_to
204
211
  # Parse
205
212
  YARD.parse('../lib/nanoc/helpers/link_to.rb')
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.3.3
4
+ version: 3.3.4
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-04-11 00:00:00.000000000 Z
12
+ date: 2012-04-23 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: cri
@@ -400,7 +400,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
400
400
  version: '0'
401
401
  requirements: []
402
402
  rubyforge_project:
403
- rubygems_version: 1.8.21
403
+ rubygems_version: 1.8.22
404
404
  signing_key:
405
405
  specification_version: 3
406
406
  summary: a web publishing system written in Ruby for building small to medium-sized