nanoc3 3.1.0a2 → 3.1.0a3
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.
- data/LICENSE +1 -1
- data/NEWS.md +12 -2
- data/README.md +2 -0
- data/lib/nanoc3/base/code_snippet.rb +6 -2
- data/lib/nanoc3/base/compiler.rb +9 -6
- data/lib/nanoc3/base/compiler_dsl.rb +15 -9
- data/lib/nanoc3/base/data_source.rb +14 -14
- data/lib/nanoc3/base/dependency_tracker.rb +9 -9
- data/lib/nanoc3/base/directed_graph.rb +6 -7
- data/lib/nanoc3/base/errors.rb +48 -13
- data/lib/nanoc3/base/filter.rb +62 -16
- data/lib/nanoc3/base/item.rb +63 -20
- data/lib/nanoc3/base/item_rep.rb +117 -48
- data/lib/nanoc3/base/layout.rb +18 -5
- data/lib/nanoc3/base/notification_center.rb +8 -8
- data/lib/nanoc3/base/plugin_registry.rb +9 -9
- data/lib/nanoc3/base/rule.rb +8 -8
- data/lib/nanoc3/base/rule_context.rb +5 -5
- data/lib/nanoc3/base/site.rb +33 -29
- data/lib/nanoc3/cli/base.rb +1 -1
- data/lib/nanoc3/cli/commands/create_site.rb +12 -14
- data/lib/nanoc3/cli.rb +0 -1
- data/lib/nanoc3/data_sources/filesystem.rb +12 -2
- data/lib/nanoc3/data_sources/filesystem_unified.rb +22 -19
- data/lib/nanoc3/extra/auto_compiler.rb +12 -3
- data/lib/nanoc3/extra/chick.rb +12 -6
- data/lib/nanoc3/extra/deployers/rsync.rb +30 -27
- data/lib/nanoc3/extra/deployers.rb +0 -1
- data/lib/nanoc3/extra/file_proxy.rb +2 -15
- data/lib/nanoc3/extra/validators/links.rb +242 -0
- data/lib/nanoc3/extra/validators/w3c.rb +49 -25
- data/lib/nanoc3/extra/validators.rb +2 -2
- data/lib/nanoc3/extra/vcs.rb +1 -1
- data/lib/nanoc3/extra.rb +4 -1
- data/lib/nanoc3/helpers/blogging.rb +57 -29
- data/lib/nanoc3/helpers/breadcrumbs.rb +1 -1
- data/lib/nanoc3/helpers/capturing.rb +4 -2
- data/lib/nanoc3/helpers/filtering.rb +2 -1
- data/lib/nanoc3/helpers/link_to.rb +13 -6
- data/lib/nanoc3/helpers/rendering.rb +4 -3
- data/lib/nanoc3/helpers/tagging.rb +7 -6
- data/lib/nanoc3/helpers/text.rb +2 -2
- data/lib/nanoc3/tasks/validate.rake +62 -5
- data/lib/nanoc3.rb +2 -2
- metadata +23 -11
- data/lib/nanoc3/base/core_ext/enumerable.rb +0 -41
@@ -17,28 +17,32 @@ module Nanoc3::Helpers
|
|
17
17
|
# @param [String] text The visible link text
|
18
18
|
#
|
19
19
|
# @param [String, Nanoc3::Item, Nanoc3::ItemRep] target The path/URL,
|
20
|
-
#
|
20
|
+
# item or item representation that should be linked to
|
21
21
|
#
|
22
22
|
# @param [Hash] attributes A hash containing HTML attributes (e.g.
|
23
|
-
#
|
23
|
+
# `rel`, `title`, …) that will be added to the link.
|
24
24
|
#
|
25
25
|
# @return [String] The link text
|
26
26
|
#
|
27
27
|
# @example Linking to a path
|
28
|
+
#
|
28
29
|
# link_to('Blog', '/blog/')
|
29
30
|
# # => '<a href="/blog/">Blog</a>'
|
30
31
|
#
|
31
32
|
# @example Linking to an item
|
33
|
+
#
|
32
34
|
# about = @items.find { |i| i.identifier == '/about/' }
|
33
35
|
# link_to('About Me', about)
|
34
36
|
# # => '<a href="/about.html">About Me</a>'
|
35
37
|
#
|
36
38
|
# @example Linking to an item representation
|
39
|
+
#
|
37
40
|
# about = @items.find { |i| i.identifier == '/about/' }
|
38
41
|
# link_to('My vCard', about.rep(:vcard))
|
39
42
|
# # => '<a href="/about.vcf">My vCard</a>'
|
40
43
|
#
|
41
44
|
# @example Linking with custom attributes
|
45
|
+
#
|
42
46
|
# link_to('Blog', '/blog/', :title => 'My super cool blog')
|
43
47
|
# # => '<a title="My super cool blog" href="/blog/">Blog</a>'
|
44
48
|
def link_to(text, target, attributes={})
|
@@ -62,18 +66,20 @@ module Nanoc3::Helpers
|
|
62
66
|
# @param [String] text The visible link text
|
63
67
|
#
|
64
68
|
# @param [String, Nanoc3::Item, Nanoc3::ItemRep] target The path/URL,
|
65
|
-
#
|
69
|
+
# item or item representation that should be linked to
|
66
70
|
#
|
67
71
|
# @param [Hash] attributes A hash containing HTML attributes (e.g.
|
68
|
-
#
|
72
|
+
# `rel`, `title`, …) that will be added to the link.
|
69
73
|
#
|
70
74
|
# @return [String] The link text
|
71
75
|
#
|
72
76
|
# @example Linking to a different page
|
77
|
+
#
|
73
78
|
# link_to_unless_current('Blog', '/blog/')
|
74
79
|
# # => '<a href="/blog/">Blog</a>'
|
75
80
|
#
|
76
81
|
# @example Linking to the same page
|
82
|
+
#
|
77
83
|
# link_to_unless_current('This Item', @item)
|
78
84
|
# # => '<span class="active" title="You\'re here.">This Item</span>'
|
79
85
|
def link_to_unless_current(text, target, attributes={})
|
@@ -92,12 +98,13 @@ module Nanoc3::Helpers
|
|
92
98
|
# item representation. The returned path will not be HTML-escaped.
|
93
99
|
#
|
94
100
|
# @param [String, Nanoc3::Item, Nanoc3::ItemRep] target The path/URL,
|
95
|
-
#
|
96
|
-
#
|
101
|
+
# item or item representation to which the relative path should be
|
102
|
+
# generated
|
97
103
|
#
|
98
104
|
# @return [String] The relative path to the target
|
99
105
|
#
|
100
106
|
# @example
|
107
|
+
#
|
101
108
|
# # if the current item's path is /foo/bar/
|
102
109
|
# relative_path_to('/foo/qux/')
|
103
110
|
# # => '../qux/'
|
@@ -10,10 +10,10 @@ module Nanoc3::Helpers
|
|
10
10
|
# Returns a string containing the rendered given layout.
|
11
11
|
#
|
12
12
|
# @param [String] identifier The identifier of the layout that should be
|
13
|
-
#
|
13
|
+
# rendered
|
14
14
|
#
|
15
15
|
# @param [Hash] other_assigns A hash containing assigns that will be made
|
16
|
-
#
|
16
|
+
# available as instance variables in the partial
|
17
17
|
#
|
18
18
|
# @example Rendering a head and a foot partial around some text
|
19
19
|
#
|
@@ -29,7 +29,8 @@ module Nanoc3::Helpers
|
|
29
29
|
# <%= render 'head', :title => 'Foo' %>
|
30
30
|
# # => "<h1>Foo</h1>"
|
31
31
|
#
|
32
|
-
# @raise [Nanoc3::Errors::UnknownLayout] if the given layout does not
|
32
|
+
# @raise [Nanoc3::Errors::UnknownLayout] if the given layout does not
|
33
|
+
# exist
|
33
34
|
#
|
34
35
|
# @return [String] The rendered partial
|
35
36
|
def render(identifier, other_assigns={}, &block)
|
@@ -8,6 +8,7 @@ module Nanoc3::Helpers
|
|
8
8
|
# should be applied to the item.
|
9
9
|
#
|
10
10
|
# @example Adding tags to an item
|
11
|
+
#
|
11
12
|
# tags: [ 'foo', 'bar', 'baz' ]
|
12
13
|
module Tagging
|
13
14
|
|
@@ -19,14 +20,14 @@ module Nanoc3::Helpers
|
|
19
20
|
# HTML-escaping rules for {#link_for_tag} apply here as well.
|
20
21
|
#
|
21
22
|
# @option params [String] base_url ("http://technorati.com/tag/") The URL
|
22
|
-
#
|
23
|
-
#
|
23
|
+
# to which the tag will be appended to construct the link URL. This URL
|
24
|
+
# must have a trailing slash.
|
24
25
|
#
|
25
26
|
# @option params [String] none_text ("(none)") The text to display when
|
26
|
-
#
|
27
|
+
# the item has no tags
|
27
28
|
#
|
28
29
|
# @option params [String] separator (", ") The separator to put between
|
29
|
-
#
|
30
|
+
# tags
|
30
31
|
#
|
31
32
|
# @return [String] A hyperlinked list of tags for the given item
|
32
33
|
def tags_for(item, params={})
|
@@ -55,10 +56,10 @@ module Nanoc3::Helpers
|
|
55
56
|
# escaped, as will the content of the `a` element.
|
56
57
|
#
|
57
58
|
# @param [String] tag The name of the tag, which should consist of letters
|
58
|
-
#
|
59
|
+
# and numbers (no spaces, slashes, or other special characters).
|
59
60
|
#
|
60
61
|
# @param [String] base_url The URL to which the tag will be appended to
|
61
|
-
#
|
62
|
+
# construct the link URL. This URL must have a trailing slash.
|
62
63
|
#
|
63
64
|
# @return [String] A link for the given tag and the given base URL
|
64
65
|
def link_for_tag(tag, base_url)
|
data/lib/nanoc3/helpers/text.rb
CHANGED
@@ -12,10 +12,10 @@ module Nanoc3::Helpers
|
|
12
12
|
# @param [String] string The string for which to build an excerpt
|
13
13
|
#
|
14
14
|
# @option params [Number] length (25) The maximum number of characters
|
15
|
-
#
|
15
|
+
# this excerpt can contain, including the omission.
|
16
16
|
#
|
17
17
|
# @option params [String] omission ("...") The string to append to the
|
18
|
-
#
|
18
|
+
# excerpt when the excerpt is shorter than the original string
|
19
19
|
#
|
20
20
|
# @return [String] The excerpt of the given string
|
21
21
|
def excerptize(string, params={})
|
@@ -4,31 +4,88 @@ namespace :validate do
|
|
4
4
|
|
5
5
|
desc 'Validate the site\'s HTML files'
|
6
6
|
task :html do
|
7
|
-
#
|
7
|
+
# Get output directory
|
8
8
|
site = Nanoc3::Site.new('.')
|
9
9
|
if site.nil?
|
10
10
|
$stderr.puts 'The current working directory does not seem to be a ' +
|
11
11
|
'valid/complete nanoc site directory; aborting.'
|
12
12
|
exit 1
|
13
13
|
end
|
14
|
+
dir = site.config[:output_dir]
|
14
15
|
|
15
16
|
# Validate
|
16
|
-
validator = ::Nanoc3::Extra::Validators::W3C.new(
|
17
|
+
validator = ::Nanoc3::Extra::Validators::W3C.new(dir, [ :html ])
|
17
18
|
validator.run
|
18
19
|
end
|
19
20
|
|
20
21
|
desc 'Validate the site\'s CSS files'
|
21
22
|
task :css do
|
22
|
-
#
|
23
|
-
site = Nanoc3::Site.new(
|
23
|
+
# Get output directory
|
24
|
+
site = Nanoc3::Site.new('.')
|
25
|
+
if site.nil?
|
26
|
+
$stderr.puts 'The current working directory does not seem to be a ' +
|
27
|
+
'valid/complete nanoc site directory; aborting.'
|
28
|
+
exit 1
|
29
|
+
end
|
30
|
+
dir = site.config[:output_dir]
|
31
|
+
|
32
|
+
# Validate
|
33
|
+
validator = ::Nanoc3::Extra::Validators::W3C.new(dir, [ :css ])
|
34
|
+
validator.run
|
35
|
+
end
|
36
|
+
|
37
|
+
namespace :links do
|
38
|
+
|
39
|
+
desc 'Validate the site’s internal links'
|
40
|
+
task :internal do
|
41
|
+
# Get output directory
|
42
|
+
site = Nanoc3::Site.new('.')
|
43
|
+
if site.nil?
|
44
|
+
$stderr.puts 'The current working directory does not seem to be a ' +
|
45
|
+
'valid/complete nanoc site directory; aborting.'
|
46
|
+
exit 1
|
47
|
+
end
|
48
|
+
dir = site.config[:output_dir]
|
49
|
+
index_filenames = site.config[:index_filenames]
|
50
|
+
|
51
|
+
# Validate
|
52
|
+
validator = ::Nanoc3::Extra::Validators::Links.new(dir, index_filenames, :internal => true)
|
53
|
+
validator.run
|
54
|
+
end
|
55
|
+
|
56
|
+
desc 'Validate the site’s internal links'
|
57
|
+
task :external do
|
58
|
+
# Get output directory
|
59
|
+
site = Nanoc3::Site.new('.')
|
60
|
+
if site.nil?
|
61
|
+
$stderr.puts 'The current working directory does not seem to be a ' +
|
62
|
+
'valid/complete nanoc site directory; aborting.'
|
63
|
+
exit 1
|
64
|
+
end
|
65
|
+
dir = site.config[:output_dir]
|
66
|
+
index_filenames = site.config[:index_filenames]
|
67
|
+
|
68
|
+
# Validate
|
69
|
+
validator = ::Nanoc3::Extra::Validators::Links.new(dir, index_filenames, :external => true)
|
70
|
+
validator.run
|
71
|
+
end
|
72
|
+
|
73
|
+
end
|
74
|
+
|
75
|
+
desc 'Validate the site’s internal and external links'
|
76
|
+
task :links do
|
77
|
+
# Get output directory
|
78
|
+
site = Nanoc3::Site.new('.')
|
24
79
|
if site.nil?
|
25
80
|
$stderr.puts 'The current working directory does not seem to be a ' +
|
26
81
|
'valid/complete nanoc site directory; aborting.'
|
27
82
|
exit 1
|
28
83
|
end
|
84
|
+
dir = site.config[:output_dir]
|
85
|
+
index_filenames = site.config[:index_filenames]
|
29
86
|
|
30
87
|
# Validate
|
31
|
-
validator = ::Nanoc3::Extra::Validators::
|
88
|
+
validator = ::Nanoc3::Extra::Validators::Links.new(dir, index_filenames, :internal => true, :external => true)
|
32
89
|
validator.run
|
33
90
|
end
|
34
91
|
|
data/lib/nanoc3.rb
CHANGED
@@ -3,13 +3,13 @@
|
|
3
3
|
module Nanoc3
|
4
4
|
|
5
5
|
# The current nanoc version.
|
6
|
-
VERSION = '3.1.
|
6
|
+
VERSION = '3.1.0a3'
|
7
7
|
|
8
8
|
# Loads all nanoc3 plugins, i.e. requires all ruby gems whose name start
|
9
9
|
# with `nanoc3-`.
|
10
10
|
#
|
11
11
|
# @return [Boolean] true if all plugins were loaded successfully, false if
|
12
|
-
#
|
12
|
+
# rubygems isn’t loaded.
|
13
13
|
def self.load_plugins
|
14
14
|
# Don’t load if there’s no rubygems
|
15
15
|
return false if !defined?(Gem)
|
metadata
CHANGED
@@ -1,7 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nanoc3
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
prerelease: true
|
5
|
+
segments:
|
6
|
+
- 3
|
7
|
+
- 1
|
8
|
+
- 0a3
|
9
|
+
version: 3.1.0a3
|
5
10
|
platform: ruby
|
6
11
|
authors:
|
7
12
|
- Denis Defreyne
|
@@ -9,19 +14,23 @@ autorequire:
|
|
9
14
|
bindir: bin
|
10
15
|
cert_chain: []
|
11
16
|
|
12
|
-
date: 2010-02-
|
17
|
+
date: 2010-02-28 00:00:00 +01:00
|
13
18
|
default_executable: nanoc3
|
14
19
|
dependencies:
|
15
20
|
- !ruby/object:Gem::Dependency
|
16
21
|
name: cri
|
17
|
-
|
18
|
-
|
19
|
-
version_requirements: !ruby/object:Gem::Requirement
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
20
24
|
requirements:
|
21
25
|
- - ">="
|
22
26
|
- !ruby/object:Gem::Version
|
27
|
+
segments:
|
28
|
+
- 1
|
29
|
+
- 0
|
30
|
+
- 0
|
23
31
|
version: 1.0.0
|
24
|
-
|
32
|
+
type: :runtime
|
33
|
+
version_requirements: *id001
|
25
34
|
description:
|
26
35
|
email: denis.defreyne@stoneship.org
|
27
36
|
executables:
|
@@ -44,7 +53,6 @@ files:
|
|
44
53
|
- lib/nanoc3/base/compiler_dsl.rb
|
45
54
|
- lib/nanoc3/base/context.rb
|
46
55
|
- lib/nanoc3/base/core_ext/array.rb
|
47
|
-
- lib/nanoc3/base/core_ext/enumerable.rb
|
48
56
|
- lib/nanoc3/base/core_ext/hash.rb
|
49
57
|
- lib/nanoc3/base/core_ext/string.rb
|
50
58
|
- lib/nanoc3/base/core_ext.rb
|
@@ -158,7 +166,7 @@ post_install_message: |
|
|
158
166
|
------------------------------------------------------------------------------
|
159
167
|
|
160
168
|
rdoc_options:
|
161
|
-
- --
|
169
|
+
- --main
|
162
170
|
- README.md
|
163
171
|
require_paths:
|
164
172
|
- lib
|
@@ -166,18 +174,22 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
166
174
|
requirements:
|
167
175
|
- - ">="
|
168
176
|
- !ruby/object:Gem::Version
|
177
|
+
segments:
|
178
|
+
- 0
|
169
179
|
version: "0"
|
170
|
-
version:
|
171
180
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
172
181
|
requirements:
|
173
182
|
- - ">"
|
174
183
|
- !ruby/object:Gem::Version
|
184
|
+
segments:
|
185
|
+
- 1
|
186
|
+
- 3
|
187
|
+
- 1
|
175
188
|
version: 1.3.1
|
176
|
-
version:
|
177
189
|
requirements: []
|
178
190
|
|
179
191
|
rubyforge_project:
|
180
|
-
rubygems_version: 1.3.
|
192
|
+
rubygems_version: 1.3.6
|
181
193
|
signing_key:
|
182
194
|
specification_version: 3
|
183
195
|
summary: a web publishing system written in Ruby for building small to medium-sized websites.
|
@@ -1,41 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
module Nanoc3::EnumerableExtensions
|
4
|
-
|
5
|
-
module GroupBy
|
6
|
-
|
7
|
-
# Returns a hash, which keys are evaluated result from the block, and
|
8
|
-
# values are arrays of elements in enum corresponding to the key. This
|
9
|
-
# method is provided for backward compatibility with Ruby 1.8.6 and lower,
|
10
|
-
# since {#group_by} is only available in 1.8.7 and higher.
|
11
|
-
#
|
12
|
-
# @yieldparam [Object] obj The object to classify
|
13
|
-
#
|
14
|
-
# @return [Hash]
|
15
|
-
#
|
16
|
-
# @example Grouping integers by rest by division through 3
|
17
|
-
#
|
18
|
-
# (1..6).group_by { |i| i % 3 }
|
19
|
-
# # => { 0 => [3, 6], 1 => [1, 4], 2 => [2, 5] }
|
20
|
-
def group_by
|
21
|
-
groups = {}
|
22
|
-
each do |item|
|
23
|
-
key = yield(item)
|
24
|
-
|
25
|
-
groups[key] ||= []
|
26
|
-
groups[key] << item
|
27
|
-
end
|
28
|
-
groups
|
29
|
-
end
|
30
|
-
|
31
|
-
end
|
32
|
-
|
33
|
-
end
|
34
|
-
|
35
|
-
module Enumerable
|
36
|
-
|
37
|
-
if !Enumerable.instance_methods.include?('group_by')
|
38
|
-
include Nanoc3::EnumerableExtensions::GroupBy
|
39
|
-
end
|
40
|
-
|
41
|
-
end
|