nanoc3 3.1.0a2 → 3.1.0a3
Sign up to get free protection for your applications and to get access to all the features.
- 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
|