nanoc3 3.2.4 → 3.3.0
Sign up to get free protection for your applications and to get access to all the features.
- metadata +14 -313
- data/.gemtest +0 -0
- data/ChangeLog +0 -3
- data/Gemfile +0 -29
- data/LICENSE +0 -19
- data/NEWS.md +0 -449
- data/README.md +0 -108
- data/Rakefile +0 -14
- data/bin/nanoc3 +0 -12
- data/doc/yardoc_templates/default/layout/html/footer.erb +0 -10
- data/lib/nanoc3.rb +0 -28
- data/lib/nanoc3/base.rb +0 -49
- data/lib/nanoc3/base/compilation/checksum_store.rb +0 -57
- data/lib/nanoc3/base/compilation/compiled_content_cache.rb +0 -62
- data/lib/nanoc3/base/compilation/compiler.rb +0 -455
- data/lib/nanoc3/base/compilation/compiler_dsl.rb +0 -214
- data/lib/nanoc3/base/compilation/dependency_tracker.rb +0 -196
- data/lib/nanoc3/base/compilation/filter.rb +0 -165
- data/lib/nanoc3/base/compilation/item_rep_proxy.rb +0 -102
- data/lib/nanoc3/base/compilation/item_rep_recorder_proxy.rb +0 -88
- data/lib/nanoc3/base/compilation/outdatedness_checker.rb +0 -223
- data/lib/nanoc3/base/compilation/outdatedness_reasons.rb +0 -46
- data/lib/nanoc3/base/compilation/rule.rb +0 -73
- data/lib/nanoc3/base/compilation/rule_context.rb +0 -84
- data/lib/nanoc3/base/compilation/rule_memory_calculator.rb +0 -40
- data/lib/nanoc3/base/compilation/rule_memory_store.rb +0 -53
- data/lib/nanoc3/base/compilation/rules_collection.rb +0 -231
- data/lib/nanoc3/base/context.rb +0 -47
- data/lib/nanoc3/base/core_ext.rb +0 -6
- data/lib/nanoc3/base/core_ext/array.rb +0 -62
- data/lib/nanoc3/base/core_ext/hash.rb +0 -63
- data/lib/nanoc3/base/core_ext/pathname.rb +0 -26
- data/lib/nanoc3/base/core_ext/string.rb +0 -46
- data/lib/nanoc3/base/directed_graph.rb +0 -275
- data/lib/nanoc3/base/errors.rb +0 -174
- data/lib/nanoc3/base/memoization.rb +0 -67
- data/lib/nanoc3/base/notification_center.rb +0 -84
- data/lib/nanoc3/base/ordered_hash.rb +0 -200
- data/lib/nanoc3/base/plugin_registry.rb +0 -165
- data/lib/nanoc3/base/result_data/item_rep.rb +0 -488
- data/lib/nanoc3/base/source_data/code_snippet.rb +0 -58
- data/lib/nanoc3/base/source_data/configuration.rb +0 -24
- data/lib/nanoc3/base/source_data/data_source.rb +0 -234
- data/lib/nanoc3/base/source_data/item.rb +0 -301
- data/lib/nanoc3/base/source_data/layout.rb +0 -130
- data/lib/nanoc3/base/source_data/site.rb +0 -361
- data/lib/nanoc3/base/store.rb +0 -135
- data/lib/nanoc3/cli.rb +0 -133
- data/lib/nanoc3/cli/command.rb +0 -139
- data/lib/nanoc3/cli/commands/autocompile.rb +0 -60
- data/lib/nanoc3/cli/commands/compile.rb +0 -280
- data/lib/nanoc3/cli/commands/create_item.rb +0 -62
- data/lib/nanoc3/cli/commands/create_layout.rb +0 -75
- data/lib/nanoc3/cli/commands/create_site.rb +0 -410
- data/lib/nanoc3/cli/commands/debug.rb +0 -119
- data/lib/nanoc3/cli/commands/info.rb +0 -98
- data/lib/nanoc3/cli/commands/nanoc.rb +0 -37
- data/lib/nanoc3/cli/commands/update.rb +0 -72
- data/lib/nanoc3/cli/commands/view.rb +0 -84
- data/lib/nanoc3/cli/commands/watch.rb +0 -125
- data/lib/nanoc3/cli/error_handler.rb +0 -193
- data/lib/nanoc3/cli/logger.rb +0 -91
- data/lib/nanoc3/data_sources.rb +0 -29
- data/lib/nanoc3/data_sources/deprecated/delicious.rb +0 -42
- data/lib/nanoc3/data_sources/deprecated/last_fm.rb +0 -87
- data/lib/nanoc3/data_sources/deprecated/twitter.rb +0 -38
- data/lib/nanoc3/data_sources/filesystem.rb +0 -299
- data/lib/nanoc3/data_sources/filesystem_unified.rb +0 -116
- data/lib/nanoc3/data_sources/filesystem_verbose.rb +0 -86
- data/lib/nanoc3/extra.rb +0 -22
- data/lib/nanoc3/extra/auto_compiler.rb +0 -103
- data/lib/nanoc3/extra/chick.rb +0 -125
- data/lib/nanoc3/extra/core_ext.rb +0 -4
- data/lib/nanoc3/extra/core_ext/enumerable.rb +0 -33
- data/lib/nanoc3/extra/core_ext/time.rb +0 -19
- data/lib/nanoc3/extra/deployers.rb +0 -11
- data/lib/nanoc3/extra/deployers/rsync.rb +0 -114
- data/lib/nanoc3/extra/file_proxy.rb +0 -40
- data/lib/nanoc3/extra/validators.rb +0 -12
- data/lib/nanoc3/extra/validators/links.rb +0 -264
- data/lib/nanoc3/extra/validators/w3c.rb +0 -95
- data/lib/nanoc3/extra/vcs.rb +0 -66
- data/lib/nanoc3/extra/vcses.rb +0 -17
- data/lib/nanoc3/extra/vcses/bazaar.rb +0 -25
- data/lib/nanoc3/extra/vcses/dummy.rb +0 -24
- data/lib/nanoc3/extra/vcses/git.rb +0 -25
- data/lib/nanoc3/extra/vcses/mercurial.rb +0 -25
- data/lib/nanoc3/extra/vcses/subversion.rb +0 -25
- data/lib/nanoc3/filters.rb +0 -53
- data/lib/nanoc3/filters/asciidoc.rb +0 -38
- data/lib/nanoc3/filters/bluecloth.rb +0 -19
- data/lib/nanoc3/filters/coderay.rb +0 -21
- data/lib/nanoc3/filters/colorize_syntax.rb +0 -261
- data/lib/nanoc3/filters/erb.rb +0 -35
- data/lib/nanoc3/filters/erubis.rb +0 -27
- data/lib/nanoc3/filters/haml.rb +0 -27
- data/lib/nanoc3/filters/kramdown.rb +0 -20
- data/lib/nanoc3/filters/less.rb +0 -53
- data/lib/nanoc3/filters/markaby.rb +0 -20
- data/lib/nanoc3/filters/maruku.rb +0 -20
- data/lib/nanoc3/filters/mustache.rb +0 -24
- data/lib/nanoc3/filters/rainpress.rb +0 -19
- data/lib/nanoc3/filters/rdiscount.rb +0 -22
- data/lib/nanoc3/filters/rdoc.rb +0 -33
- data/lib/nanoc3/filters/redcarpet.rb +0 -27
- data/lib/nanoc3/filters/redcloth.rb +0 -47
- data/lib/nanoc3/filters/relativize_paths.rb +0 -45
- data/lib/nanoc3/filters/rubypants.rb +0 -20
- data/lib/nanoc3/filters/sass.rb +0 -66
- data/lib/nanoc3/filters/slim.rb +0 -25
- data/lib/nanoc3/filters/typogruby.rb +0 -23
- data/lib/nanoc3/filters/uglify_js.rb +0 -42
- data/lib/nanoc3/helpers.rb +0 -16
- data/lib/nanoc3/helpers/blogging.rb +0 -319
- data/lib/nanoc3/helpers/breadcrumbs.rb +0 -40
- data/lib/nanoc3/helpers/capturing.rb +0 -138
- data/lib/nanoc3/helpers/filtering.rb +0 -50
- data/lib/nanoc3/helpers/html_escape.rb +0 -55
- data/lib/nanoc3/helpers/link_to.rb +0 -151
- data/lib/nanoc3/helpers/rendering.rb +0 -140
- data/lib/nanoc3/helpers/tagging.rb +0 -71
- data/lib/nanoc3/helpers/text.rb +0 -44
- data/lib/nanoc3/helpers/xml_sitemap.rb +0 -76
- data/lib/nanoc3/tasks.rb +0 -10
- data/lib/nanoc3/tasks/clean.rake +0 -16
- data/lib/nanoc3/tasks/clean.rb +0 -29
- data/lib/nanoc3/tasks/deploy/rsync.rake +0 -14
- data/lib/nanoc3/tasks/validate.rake +0 -92
- data/nanoc3.gemspec +0 -49
- data/tasks/doc.rake +0 -16
- data/tasks/test.rake +0 -44
- data/test/base/core_ext/array_spec.rb +0 -73
- data/test/base/core_ext/hash_spec.rb +0 -98
- data/test/base/core_ext/pathname_spec.rb +0 -27
- data/test/base/core_ext/string_spec.rb +0 -37
- data/test/base/test_checksum_store.rb +0 -35
- data/test/base/test_code_snippet.rb +0 -31
- data/test/base/test_compiler.rb +0 -316
- data/test/base/test_compiler_dsl.rb +0 -161
- data/test/base/test_context.rb +0 -31
- data/test/base/test_data_source.rb +0 -46
- data/test/base/test_dependency_tracker.rb +0 -262
- data/test/base/test_directed_graph.rb +0 -283
- data/test/base/test_filter.rb +0 -83
- data/test/base/test_item.rb +0 -179
- data/test/base/test_item_rep.rb +0 -553
- data/test/base/test_layout.rb +0 -59
- data/test/base/test_memoization.rb +0 -90
- data/test/base/test_notification_center.rb +0 -34
- data/test/base/test_outdatedness_checker.rb +0 -394
- data/test/base/test_plugin.rb +0 -30
- data/test/base/test_rule.rb +0 -19
- data/test/base/test_rule_context.rb +0 -65
- data/test/base/test_site.rb +0 -190
- data/test/cli/commands/test_compile.rb +0 -33
- data/test/cli/commands/test_create_item.rb +0 -14
- data/test/cli/commands/test_create_layout.rb +0 -28
- data/test/cli/commands/test_create_site.rb +0 -24
- data/test/cli/commands/test_help.rb +0 -12
- data/test/cli/commands/test_info.rb +0 -11
- data/test/cli/commands/test_update.rb +0 -10
- data/test/cli/test_cli.rb +0 -102
- data/test/cli/test_error_handler.rb +0 -29
- data/test/cli/test_logger.rb +0 -10
- data/test/data_sources/test_filesystem.rb +0 -433
- data/test/data_sources/test_filesystem_unified.rb +0 -536
- data/test/data_sources/test_filesystem_verbose.rb +0 -357
- data/test/extra/core_ext/test_enumerable.rb +0 -30
- data/test/extra/core_ext/test_time.rb +0 -15
- data/test/extra/deployers/test_rsync.rb +0 -232
- data/test/extra/test_auto_compiler.rb +0 -417
- data/test/extra/test_file_proxy.rb +0 -19
- data/test/extra/test_vcs.rb +0 -22
- data/test/extra/validators/test_links.rb +0 -51
- data/test/extra/validators/test_w3c.rb +0 -47
- data/test/filters/test_asciidoc.rb +0 -22
- data/test/filters/test_bluecloth.rb +0 -18
- data/test/filters/test_coderay.rb +0 -44
- data/test/filters/test_colorize_syntax.rb +0 -283
- data/test/filters/test_erb.rb +0 -99
- data/test/filters/test_erubis.rb +0 -70
- data/test/filters/test_haml.rb +0 -96
- data/test/filters/test_kramdown.rb +0 -18
- data/test/filters/test_less.rb +0 -113
- data/test/filters/test_markaby.rb +0 -24
- data/test/filters/test_maruku.rb +0 -18
- data/test/filters/test_mustache.rb +0 -25
- data/test/filters/test_rainpress.rb +0 -29
- data/test/filters/test_rdiscount.rb +0 -31
- data/test/filters/test_rdoc.rb +0 -18
- data/test/filters/test_redcarpet.rb +0 -63
- data/test/filters/test_redcloth.rb +0 -33
- data/test/filters/test_relativize_paths.rb +0 -332
- data/test/filters/test_rubypants.rb +0 -18
- data/test/filters/test_sass.rb +0 -229
- data/test/filters/test_slim.rb +0 -35
- data/test/filters/test_typogruby.rb +0 -21
- data/test/filters/test_uglify_js.rb +0 -30
- data/test/gem_loader.rb +0 -11
- data/test/helper.rb +0 -179
- data/test/helpers/test_blogging.rb +0 -754
- data/test/helpers/test_breadcrumbs.rb +0 -81
- data/test/helpers/test_capturing.rb +0 -41
- data/test/helpers/test_filtering.rb +0 -106
- data/test/helpers/test_html_escape.rb +0 -32
- data/test/helpers/test_link_to.rb +0 -249
- data/test/helpers/test_rendering.rb +0 -89
- data/test/helpers/test_tagging.rb +0 -87
- data/test/helpers/test_text.rb +0 -24
- data/test/helpers/test_xml_sitemap.rb +0 -103
- data/test/tasks/test_clean.rb +0 -67
@@ -1,119 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
usage 'debug'
|
4
|
-
summary 'show debug information for this site'
|
5
|
-
description <<-EOS
|
6
|
-
Show information about all items, item representations and layouts in the
|
7
|
-
current site.
|
8
|
-
EOS
|
9
|
-
|
10
|
-
run do |opts, args, cmd|
|
11
|
-
Nanoc3::CLI::Commands::Debug.call(opts, args, cmd)
|
12
|
-
end
|
13
|
-
|
14
|
-
module Nanoc3::CLI::Commands
|
15
|
-
|
16
|
-
class Debug < ::Nanoc3::CLI::Command
|
17
|
-
|
18
|
-
def run
|
19
|
-
# Make sure we are in a nanoc site directory
|
20
|
-
print "Loading site data... "
|
21
|
-
self.require_site
|
22
|
-
puts "done"
|
23
|
-
puts
|
24
|
-
|
25
|
-
# Get data
|
26
|
-
items = self.site.items
|
27
|
-
reps = items.map { |i| i.reps }.flatten
|
28
|
-
layouts = self.site.layouts
|
29
|
-
|
30
|
-
# Get dependency tracker
|
31
|
-
compiler = self.site.compiler
|
32
|
-
compiler.load
|
33
|
-
dependency_tracker = compiler.dependency_tracker
|
34
|
-
|
35
|
-
# Print item dependencies
|
36
|
-
puts '=== Item dependencies ======================================================='
|
37
|
-
puts
|
38
|
-
items.sort_by { |i| i.identifier }.each do |item|
|
39
|
-
puts "item #{item.identifier} depends on:"
|
40
|
-
predecessors = dependency_tracker.objects_causing_outdatedness_of(item).sort_by { |i| i ? i.identifier : '' }
|
41
|
-
predecessors.each do |pred|
|
42
|
-
if pred
|
43
|
-
puts " [ #{format '%6s', pred.type} ] #{pred.identifier}"
|
44
|
-
else
|
45
|
-
puts " ( removed item )"
|
46
|
-
end
|
47
|
-
end
|
48
|
-
puts " (nothing)" if predecessors.empty?
|
49
|
-
puts
|
50
|
-
end
|
51
|
-
|
52
|
-
# Print representation paths
|
53
|
-
puts '=== Representation paths ===================================================='
|
54
|
-
puts
|
55
|
-
items.sort_by { |i| i.identifier }.each do |item|
|
56
|
-
item.reps.sort_by { |r| r.name.to_s }.each do |rep|
|
57
|
-
puts "item #{item.identifier}, rep #{rep.name}:"
|
58
|
-
if rep.raw_paths.empty?
|
59
|
-
puts " (not written)"
|
60
|
-
end
|
61
|
-
length = rep.raw_paths.keys.map { |s| s.to_s.length }.max
|
62
|
-
rep.raw_paths.each do |snapshot_name, raw_path|
|
63
|
-
puts " [ %-#{length}s ] %s" % [ snapshot_name, raw_path ]
|
64
|
-
end
|
65
|
-
end
|
66
|
-
puts
|
67
|
-
end
|
68
|
-
|
69
|
-
# Print representation outdatedness
|
70
|
-
puts '=== Representation outdatedness ============================================='
|
71
|
-
puts
|
72
|
-
items.sort_by { |i| i.identifier }.each do |item|
|
73
|
-
item.reps.sort_by { |r| r.name.to_s }.each do |rep|
|
74
|
-
puts "item #{item.identifier}, rep #{rep.name}:"
|
75
|
-
outdatedness_reason = compiler.outdatedness_checker.outdatedness_reason_for(rep)
|
76
|
-
if outdatedness_reason
|
77
|
-
puts " is outdated: #{outdatedness_reason.message}"
|
78
|
-
else
|
79
|
-
puts " is not outdated"
|
80
|
-
end
|
81
|
-
end
|
82
|
-
puts
|
83
|
-
end
|
84
|
-
|
85
|
-
# Print layout dependencies
|
86
|
-
puts '=== Layout dependencies ====================================================='
|
87
|
-
puts
|
88
|
-
layouts.sort_by { |l| l.identifier }.each do |layout|
|
89
|
-
puts "layout #{layout.identifier} depends on:"
|
90
|
-
predecessors = dependency_tracker.objects_causing_outdatedness_of(layout).sort_by { |i| i ? i.identifier : '' }
|
91
|
-
predecessors.each do |pred|
|
92
|
-
if pred
|
93
|
-
puts " [ #{format '%6s', pred.type} ] #{pred.identifier}"
|
94
|
-
else
|
95
|
-
puts " ( removed item )"
|
96
|
-
end
|
97
|
-
end
|
98
|
-
puts " (nothing)" if predecessors.empty?
|
99
|
-
puts
|
100
|
-
end
|
101
|
-
|
102
|
-
# Print layouts
|
103
|
-
puts '=== Layouts'
|
104
|
-
puts
|
105
|
-
layouts.sort_by { |l| l.identifier }.each do |layout|
|
106
|
-
puts "layout #{layout.identifier}:"
|
107
|
-
outdatedness_reason = compiler.outdatedness_checker.outdatedness_reason_for(layout)
|
108
|
-
if outdatedness_reason
|
109
|
-
puts " is outdated: #{outdatedness_reason.message}"
|
110
|
-
else
|
111
|
-
puts " is not outdated"
|
112
|
-
end
|
113
|
-
puts
|
114
|
-
end
|
115
|
-
end
|
116
|
-
|
117
|
-
end
|
118
|
-
|
119
|
-
end
|
@@ -1,98 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
summary 'show info about available plugins'
|
4
|
-
usage 'info [options]'
|
5
|
-
description <<-EOS
|
6
|
-
Show a list of available plugins, including filters, data sources and VCSes.
|
7
|
-
If the current directory contains a nanoc web site, the plugins defined in this site will be shown as well.
|
8
|
-
EOS
|
9
|
-
|
10
|
-
run do |opts, args, cmd|
|
11
|
-
Nanoc3::CLI::Commands::Info.call(opts, args, cmd)
|
12
|
-
end
|
13
|
-
|
14
|
-
module Nanoc3::CLI::Commands
|
15
|
-
|
16
|
-
class Info < ::Nanoc3::CLI::Command
|
17
|
-
|
18
|
-
def run
|
19
|
-
# Check arguments
|
20
|
-
if arguments.size != 0
|
21
|
-
$stderr.puts "usage: #{command.usage}"
|
22
|
-
exit 1
|
23
|
-
end
|
24
|
-
|
25
|
-
# Get list of plugins (before and after)
|
26
|
-
plugins_before = Nanoc3::Plugin.all
|
27
|
-
self.site.code_snippets if self.site
|
28
|
-
plugins_after = Nanoc3::Plugin.all
|
29
|
-
|
30
|
-
# Divide list of plugins into builtin and custom
|
31
|
-
plugins_builtin = plugins_before
|
32
|
-
plugins_custom = plugins_after - plugins_before
|
33
|
-
|
34
|
-
# Find max identifiers length
|
35
|
-
plugin_with_longest_identifiers = plugins_after.inject do |longest, current|
|
36
|
-
longest[:identifiers].join(', ').size > current[:identifiers].join(', ').size ? longest : current
|
37
|
-
end
|
38
|
-
max_identifiers_length = plugin_with_longest_identifiers[:identifiers].join(', ').size
|
39
|
-
|
40
|
-
PLUGIN_CLASS_ORDER.each do |superclass|
|
41
|
-
plugins_with_this_superclass = {
|
42
|
-
:builtin => plugins_builtin.select { |p| p[:superclass] == superclass },
|
43
|
-
:custom => plugins_custom.select { |p| p[:superclass] == superclass }
|
44
|
-
}
|
45
|
-
|
46
|
-
# Print kind
|
47
|
-
kind = name_for_plugin_class(superclass)
|
48
|
-
puts "#{kind}:"
|
49
|
-
puts
|
50
|
-
|
51
|
-
# Print plugins organised by subtype
|
52
|
-
[ :builtin, :custom ].each do |type|
|
53
|
-
# Find relevant plugins
|
54
|
-
relevant_plugins = plugins_with_this_superclass[type]
|
55
|
-
|
56
|
-
# Print type
|
57
|
-
puts " #{type}:"
|
58
|
-
if relevant_plugins.empty?
|
59
|
-
puts " (none)"
|
60
|
-
next
|
61
|
-
end
|
62
|
-
|
63
|
-
# Print plugins
|
64
|
-
relevant_plugins.sort_by { |k| k[:identifiers].join(', ') }.each do |plugin|
|
65
|
-
# Display
|
66
|
-
puts sprintf(
|
67
|
-
" %-#{max_identifiers_length}s (%s)",
|
68
|
-
plugin[:identifiers].join(', '),
|
69
|
-
plugin[:class].to_s.sub(/^::/, '')
|
70
|
-
)
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
|
-
puts
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
private
|
79
|
-
|
80
|
-
PLUGIN_CLASS_ORDER = [
|
81
|
-
Nanoc3::Filter,
|
82
|
-
Nanoc3::Extra::VCS,
|
83
|
-
Nanoc3::DataSource
|
84
|
-
]
|
85
|
-
|
86
|
-
PLUGIN_CLASSES = {
|
87
|
-
Nanoc3::Filter => 'Filters',
|
88
|
-
Nanoc3::DataSource => 'Data Sources',
|
89
|
-
Nanoc3::Extra::VCS => 'VCSes'
|
90
|
-
}
|
91
|
-
|
92
|
-
def name_for_plugin_class(klass)
|
93
|
-
PLUGIN_CLASSES[klass]
|
94
|
-
end
|
95
|
-
|
96
|
-
end
|
97
|
-
|
98
|
-
end
|
@@ -1,37 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
usage 'nanoc command [options] [arguments]'
|
4
|
-
summary 'nanoc, a static site compiler written in Ruby'
|
5
|
-
|
6
|
-
opt :l, :color, 'enable color' do
|
7
|
-
Nanoc3::CLI::Logger.instance.color = true
|
8
|
-
end
|
9
|
-
|
10
|
-
opt :d, :debug, 'enable debugging' do
|
11
|
-
Nanoc3::CLI.debug = true
|
12
|
-
end
|
13
|
-
|
14
|
-
opt :h, :help, 'show the help message and quit' do |value, cmd|
|
15
|
-
puts cmd.help
|
16
|
-
exit 0
|
17
|
-
end
|
18
|
-
|
19
|
-
opt :C, :'no-color', 'disable color' do
|
20
|
-
Nanoc3::CLI::Logger.instance.color = false
|
21
|
-
end
|
22
|
-
|
23
|
-
opt :V, :verbose, 'make nanoc output more detailed' do
|
24
|
-
Nanoc3::CLI::Logger.instance.level = :low
|
25
|
-
end
|
26
|
-
|
27
|
-
opt :v, :version, 'show version information and quit' do
|
28
|
-
gem_info = defined?(Gem) ? "with RubyGems #{Gem::VERSION}" : "without RubyGems"
|
29
|
-
engine = defined?(RUBY_ENGINE) ? RUBY_ENGINE : "ruby"
|
30
|
-
puts "nanoc #{Nanoc3::VERSION} (c) 2007-2012 Denis Defreyne."
|
31
|
-
puts "Running #{engine} #{RUBY_VERSION} (#{RUBY_RELEASE_DATE}) on #{RUBY_PLATFORM} #{gem_info}"
|
32
|
-
exit 0
|
33
|
-
end
|
34
|
-
|
35
|
-
opt :w, :warn, 'enable warnings' do
|
36
|
-
$-w = true
|
37
|
-
end
|
@@ -1,72 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
usage 'update [options]'
|
4
|
-
summary 'update the data stored by the data source to a newer version'
|
5
|
-
description <<-EOS
|
6
|
-
Update the data stored by the data source to a newer format. The format in
|
7
|
-
which data is stored can change between releases, and even though backward
|
8
|
-
compatibility is usually preserved, it is often a good idea to store the site
|
9
|
-
data in a newer format so newer features can be taken advantage of.
|
10
|
-
|
11
|
-
This command will change data, and it is therefore recommended to make a
|
12
|
-
backup in case something goes wrong.
|
13
|
-
EOS
|
14
|
-
|
15
|
-
required :c, :vcs, 'select the VCS to use'
|
16
|
-
flag :y, :yes, 'update the data without warning'
|
17
|
-
|
18
|
-
run do |opts, args, cmd|
|
19
|
-
Nanoc3::CLI::Commands::Update.call(opts, args, cmd)
|
20
|
-
end
|
21
|
-
|
22
|
-
module Nanoc3::CLI::Commands
|
23
|
-
|
24
|
-
class Update < ::Nanoc3::CLI::Command
|
25
|
-
|
26
|
-
def run
|
27
|
-
# Check arguments
|
28
|
-
if arguments.size != 0
|
29
|
-
$stderr.puts "usage: #{command.usage}"
|
30
|
-
exit 1
|
31
|
-
end
|
32
|
-
|
33
|
-
# Make sure we are in a nanoc site directory
|
34
|
-
self.require_site
|
35
|
-
|
36
|
-
# Set VCS if possible
|
37
|
-
self.set_vcs(options[:vcs])
|
38
|
-
|
39
|
-
# Check for -y switch
|
40
|
-
unless options.has_key?(:yes)
|
41
|
-
$stderr.puts '*************'
|
42
|
-
$stderr.puts '** WARNING **'
|
43
|
-
$stderr.puts '*************'
|
44
|
-
$stderr.puts
|
45
|
-
$stderr.puts 'Are you absolutely sure you want to update the ' +
|
46
|
-
'content for this site? Updating the site content ' +
|
47
|
-
'will change the structure of existing data. This ' +
|
48
|
-
'operation is destructive and cannot be reverted. ' +
|
49
|
-
'Please do not interrupt this operation; doing so can ' +
|
50
|
-
'result in data loss. As always, consider making a ' +
|
51
|
-
'backup copy.'
|
52
|
-
$stderr.puts
|
53
|
-
$stderr.puts 'If this nanoc site is versioned using a VCS ' +
|
54
|
-
'supported by nanoc, consider using the --vcs option ' +
|
55
|
-
'to have nanoc perform add/delete/move operations ' +
|
56
|
-
'using the specified VCS. To get a list of VCSes ' +
|
57
|
-
'supported by nanoc, issue the "info" command.'
|
58
|
-
$stderr.puts
|
59
|
-
$stderr.puts 'To continue, use the -y/--yes option, like "nanoc3 ' +
|
60
|
-
'update -y".'
|
61
|
-
exit 1
|
62
|
-
end
|
63
|
-
|
64
|
-
# Update
|
65
|
-
self.site.data_sources.each do |data_source|
|
66
|
-
data_source.update
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
end
|
71
|
-
|
72
|
-
end
|
@@ -1,84 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
usage 'view [options]'
|
4
|
-
summary 'start the web server that serves static files'
|
5
|
-
description <<-EOS
|
6
|
-
Start the static web server. Unless specified, the web server will run on port 3000 and listen on all IP addresses. Running this static web server requires 'adsf' (not 'asdf'!).
|
7
|
-
EOS
|
8
|
-
|
9
|
-
required :H, :handler, 'specify the handler to use (webrick/mongrel/...)'
|
10
|
-
required :o, :host, 'specify the host to listen on (default: 0.0.0.0)'
|
11
|
-
required :p, :port, 'specify the port to listen on (default: 3000)'
|
12
|
-
|
13
|
-
run do |opts, args, cmd|
|
14
|
-
Nanoc3::CLI::Commands::View.call(opts, args, cmd)
|
15
|
-
end
|
16
|
-
|
17
|
-
module Nanoc3::CLI::Commands
|
18
|
-
|
19
|
-
class View < ::Nanoc3::CLI::Command
|
20
|
-
|
21
|
-
def run
|
22
|
-
load_adsf
|
23
|
-
require 'rack'
|
24
|
-
|
25
|
-
# Make sure we are in a nanoc site directory
|
26
|
-
self.require_site
|
27
|
-
|
28
|
-
# Set options
|
29
|
-
options_for_rack = {
|
30
|
-
:Port => (options[:port] || 3000).to_i,
|
31
|
-
:Host => (options[:host] || '0.0.0.0')
|
32
|
-
}
|
33
|
-
|
34
|
-
# Guess which handler we should use
|
35
|
-
unless handler = Rack::Handler.get(options[:handler])
|
36
|
-
begin
|
37
|
-
handler = Rack::Handler::Mongrel
|
38
|
-
rescue LoadError => e
|
39
|
-
handler = Rack::Handler::WEBrick
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
# Build app
|
44
|
-
site = self.site
|
45
|
-
app = Rack::Builder.new do
|
46
|
-
use Rack::CommonLogger
|
47
|
-
use Rack::ShowExceptions
|
48
|
-
use Rack::Lint
|
49
|
-
use Rack::Head
|
50
|
-
use Adsf::Rack::IndexFileFinder, :root => site.config[:output_dir]
|
51
|
-
run Rack::File.new(site.config[:output_dir])
|
52
|
-
end.to_app
|
53
|
-
|
54
|
-
# Run autocompiler
|
55
|
-
handler.run(app, options_for_rack)
|
56
|
-
end
|
57
|
-
|
58
|
-
protected
|
59
|
-
|
60
|
-
def load_adsf
|
61
|
-
# Load adsf
|
62
|
-
begin
|
63
|
-
require 'adsf'
|
64
|
-
return
|
65
|
-
rescue LoadError
|
66
|
-
$stderr.puts "Could not find the required 'adsf' gem, " \
|
67
|
-
"which is necessary for the view command."
|
68
|
-
end
|
69
|
-
|
70
|
-
# Check asdf
|
71
|
-
begin
|
72
|
-
require 'asdf'
|
73
|
-
$stderr.puts "You appear to have 'asdf' installed, " \
|
74
|
-
"but not 'adsf'. Please install 'adsf' (check the spelling)!"
|
75
|
-
rescue LoadError
|
76
|
-
end
|
77
|
-
|
78
|
-
# Done
|
79
|
-
exit 1
|
80
|
-
end
|
81
|
-
|
82
|
-
end
|
83
|
-
|
84
|
-
end
|
@@ -1,125 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
usage 'watch [options]'
|
4
|
-
summary 'start the watcher'
|
5
|
-
description <<-EOS
|
6
|
-
Start the watcher. When a change is detected, the site will be recompiled.
|
7
|
-
EOS
|
8
|
-
|
9
|
-
run do |opts, args, cmd|
|
10
|
-
Nanoc3::CLI::Commands::Watch.call(opts, args, cmd)
|
11
|
-
end
|
12
|
-
|
13
|
-
module Nanoc3::CLI::Commands
|
14
|
-
|
15
|
-
class Watch < ::Nanoc3::CLI::Command
|
16
|
-
|
17
|
-
def run
|
18
|
-
require 'fssm'
|
19
|
-
require 'pathname'
|
20
|
-
|
21
|
-
watcher_config = self.site.config[:watcher] || {}
|
22
|
-
|
23
|
-
@notifier = Notifier.new
|
24
|
-
|
25
|
-
# Define rebuilder
|
26
|
-
rebuilder = lambda do |base, relative|
|
27
|
-
# Determine filename
|
28
|
-
if base.nil? || relative.nil?
|
29
|
-
filename = nil
|
30
|
-
else
|
31
|
-
filename = ::Pathname.new(File.join([ base, relative ])).relative_path_from(::Pathname.new(Dir.getwd)).to_s
|
32
|
-
end
|
33
|
-
|
34
|
-
# Notify
|
35
|
-
if filename
|
36
|
-
print "Change detected to #{filename}; recompiling… ".make_compatible_with_env
|
37
|
-
else
|
38
|
-
print "Watcher started; compiling the entire site… ".make_compatible_with_env
|
39
|
-
end
|
40
|
-
|
41
|
-
# Recompile
|
42
|
-
start = Time.now
|
43
|
-
site = Nanoc3::Site.new('.')
|
44
|
-
begin
|
45
|
-
site.compile
|
46
|
-
|
47
|
-
# TODO include icon (--image misc/success-icon.png)
|
48
|
-
notify_on_compilation_success = watcher_config.fetch(:notify_on_compilation_success) { true }
|
49
|
-
if notify_on_compilation_success
|
50
|
-
@notifier.notify('Compilation complete')
|
51
|
-
end
|
52
|
-
|
53
|
-
time_spent = ((Time.now - start)*1000.0).round
|
54
|
-
puts "done in #{format '%is %ims', *(time_spent.divmod(1000))}"
|
55
|
-
rescue Exception => e
|
56
|
-
# TODO include icon (--image misc/error-icon.png)
|
57
|
-
notify_on_compilation_failure = watcher_config.fetch(:notify_on_compilation_failure) { true }
|
58
|
-
if notify_on_compilation_failure
|
59
|
-
@notifier.notify('Compilation failed')
|
60
|
-
end
|
61
|
-
|
62
|
-
puts
|
63
|
-
Nanoc3::CLI::ErrorHandler.print_error(e)
|
64
|
-
puts
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
# Rebuild once
|
69
|
-
rebuilder.call(nil, nil)
|
70
|
-
|
71
|
-
# Get directories to watch
|
72
|
-
dirs_to_watch = watcher_config[:dirs_to_watch] || %w( content layouts lib )
|
73
|
-
files_to_watch = watcher_config[:files_to_watch] || %w( config.yaml Rules rules Rules.rb rules.rb' )
|
74
|
-
files_to_watch.delete_if { |f| !File.file?(f) }
|
75
|
-
|
76
|
-
# Watch
|
77
|
-
puts "Watching for changes…".make_compatible_with_env
|
78
|
-
watcher = lambda do |*args|
|
79
|
-
update(&rebuilder)
|
80
|
-
delete(&rebuilder)
|
81
|
-
create(&rebuilder)
|
82
|
-
end
|
83
|
-
monitor = FSSM::Monitor.new
|
84
|
-
dirs_to_watch.each { |dir| monitor.path(dir, '**/*', &watcher) }
|
85
|
-
files_to_watch.each { |filename| monitor.file(filename, &watcher) }
|
86
|
-
monitor.run
|
87
|
-
end
|
88
|
-
|
89
|
-
# Allows sending user notifications in a cross-platform way.
|
90
|
-
class Notifier
|
91
|
-
|
92
|
-
# A list of commandline tool names that can be used to send notifications
|
93
|
-
TOOLS = %w( growlnotify notify-send )
|
94
|
-
|
95
|
-
# The tool to use for discovering binaries' locations
|
96
|
-
FIND_BINARY_COMMAND = RUBY_PLATFORM =~ /mingw|mswin/ ? "where" : "which"
|
97
|
-
|
98
|
-
# Send a notification. If no notifier is found, no notification will be
|
99
|
-
# created.
|
100
|
-
#
|
101
|
-
# @param [String] message The message to include in the notification
|
102
|
-
def notify(message)
|
103
|
-
return if tool.nil?
|
104
|
-
send(tool.tr('-', '_'), message)
|
105
|
-
end
|
106
|
-
|
107
|
-
private
|
108
|
-
|
109
|
-
def tool
|
110
|
-
@tool ||= TOOLS.find { |t| !`#{FIND_BINARY_COMMAND} #{t}`.empty? }
|
111
|
-
end
|
112
|
-
|
113
|
-
def growlnotify(message)
|
114
|
-
system('growlnotify', '-m', message)
|
115
|
-
end
|
116
|
-
|
117
|
-
def notify_send(message)
|
118
|
-
system('notify-send', message)
|
119
|
-
end
|
120
|
-
|
121
|
-
end
|
122
|
-
|
123
|
-
end
|
124
|
-
|
125
|
-
end
|