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
data/lib/nanoc3/extra.rb
DELETED
@@ -1,22 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
module Nanoc3::Extra
|
4
|
-
|
5
|
-
autoload 'AutoCompiler', 'nanoc3/extra/auto_compiler'
|
6
|
-
autoload 'CHiCk', 'nanoc3/extra/chick'
|
7
|
-
autoload 'Deployers', 'nanoc3/extra/deployers'
|
8
|
-
autoload 'Validators', 'nanoc3/extra/validators'
|
9
|
-
|
10
|
-
# Deprecated; use {Nanoc3::Context} instead
|
11
|
-
# TODO [in nanoc 4.0] remove me
|
12
|
-
Context = ::Nanoc3::Context
|
13
|
-
|
14
|
-
# Deprecated
|
15
|
-
# TODO [in nanoc 4.0] remove me
|
16
|
-
autoload 'FileProxy', 'nanoc3/extra/file_proxy'
|
17
|
-
|
18
|
-
end
|
19
|
-
|
20
|
-
require 'nanoc3/extra/core_ext'
|
21
|
-
require 'nanoc3/extra/vcs'
|
22
|
-
require 'nanoc3/extra/vcses'
|
@@ -1,103 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
module Nanoc3::Extra
|
4
|
-
|
5
|
-
# A web server that will automatically compile items as they are requested.
|
6
|
-
# It also serves static files such as stylesheets and images.
|
7
|
-
class AutoCompiler
|
8
|
-
|
9
|
-
# @return [Nanoc3::Site] The site this autocompiler belongs to
|
10
|
-
attr_reader :site
|
11
|
-
|
12
|
-
# Creates a new autocompiler for the given site.
|
13
|
-
#
|
14
|
-
# @param [String] site_path The path to the site to autocompile
|
15
|
-
def initialize(site_path)
|
16
|
-
require 'rack'
|
17
|
-
require 'mime/types'
|
18
|
-
|
19
|
-
# Set site
|
20
|
-
@site_path = site_path
|
21
|
-
|
22
|
-
# Create mutex to prevent parallel requests
|
23
|
-
require 'thread'
|
24
|
-
@mutex = Mutex.new
|
25
|
-
end
|
26
|
-
|
27
|
-
# Calls the autocompiler. The behaviour of this method is defined by the
|
28
|
-
# [Rack specification](http://rack.rubyforge.org/doc/files/SPEC.html).
|
29
|
-
#
|
30
|
-
# @param [Hash] env The environment, as defined by the Rack specification
|
31
|
-
#
|
32
|
-
# @return [Array] An array containing the status, the headers, and the
|
33
|
-
# body, as defined by the Rack specification
|
34
|
-
def call(env)
|
35
|
-
@mutex.synchronize do
|
36
|
-
# Start with a new site
|
37
|
-
build_site
|
38
|
-
|
39
|
-
# Find rep
|
40
|
-
path = Rack::Utils::unescape(env['PATH_INFO'])
|
41
|
-
reps = site.items.map { |i| i.reps }.flatten
|
42
|
-
rep = reps.find do |r|
|
43
|
-
r.path == path ||
|
44
|
-
r.raw_path == site.config[:output_dir] + path
|
45
|
-
end
|
46
|
-
|
47
|
-
# Recompile
|
48
|
-
site.compile if rep
|
49
|
-
|
50
|
-
# Get paths by appending index filenames
|
51
|
-
if path =~ /\/$/
|
52
|
-
possible_paths = site.config[:index_filenames].map { |f| path + f }
|
53
|
-
else
|
54
|
-
possible_paths = [ path ]
|
55
|
-
end
|
56
|
-
|
57
|
-
# Find matching file
|
58
|
-
modified_path = possible_paths.find { |f| File.file?(site.config[:output_dir] + f) }
|
59
|
-
modified_path ||= path
|
60
|
-
|
61
|
-
# Serve using Rack::File
|
62
|
-
puts "*** serving file #{modified_path}"
|
63
|
-
res = file_server.call(env.merge('PATH_INFO' => modified_path))
|
64
|
-
puts "*** done serving file #{modified_path}"
|
65
|
-
res
|
66
|
-
end
|
67
|
-
rescue StandardError, ScriptError => e
|
68
|
-
# Add compilation stack to env
|
69
|
-
env['nanoc.stack'] = []
|
70
|
-
stack.reverse.each do |obj|
|
71
|
-
if obj.is_a?(Nanoc3::ItemRep) # item rep
|
72
|
-
env['nanoc.stack'] << "[item] #{obj.item.identifier} (rep #{obj.name})"
|
73
|
-
else # layout
|
74
|
-
env['nanoc.stack'] << "[layout] #{obj.identifier}"
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
# Re-raise error
|
79
|
-
raise e
|
80
|
-
end
|
81
|
-
|
82
|
-
private
|
83
|
-
|
84
|
-
def build_site
|
85
|
-
@site = Nanoc3::Site.new(@site_path)
|
86
|
-
end
|
87
|
-
|
88
|
-
def mime_type_of(path, fallback)
|
89
|
-
mime_type = MIME::Types.of(path).first
|
90
|
-
mime_type = mime_type.nil? ? fallback : mime_type.simplified
|
91
|
-
end
|
92
|
-
|
93
|
-
def file_server
|
94
|
-
@file_server ||= ::Rack::File.new(site.config[:output_dir])
|
95
|
-
end
|
96
|
-
|
97
|
-
def stack
|
98
|
-
site.compiler.stack
|
99
|
-
end
|
100
|
-
|
101
|
-
end
|
102
|
-
|
103
|
-
end
|
data/lib/nanoc3/extra/chick.rb
DELETED
@@ -1,125 +0,0 @@
|
|
1
|
-
require 'net/http'
|
2
|
-
require 'rack'
|
3
|
-
require 'rack/cache'
|
4
|
-
|
5
|
-
module Nanoc3::Extra
|
6
|
-
|
7
|
-
# @deprecated Use a HTTP library such as
|
8
|
-
# [Net::HTTP](http://ruby-doc.org/stdlib/libdoc/net/http/rdoc/) or
|
9
|
-
# [Curb](http://curb.rubyforge.org/) instead.
|
10
|
-
module CHiCk
|
11
|
-
|
12
|
-
# @deprecated Use a HTTP library such as
|
13
|
-
# [Net::HTTP](http://ruby-doc.org/stdlib/libdoc/net/http/rdoc/) or
|
14
|
-
# [Curb](http://curb.rubyforge.org/) instead.
|
15
|
-
class Client
|
16
|
-
|
17
|
-
DEFAULT_OPTIONS = {
|
18
|
-
:cache => {
|
19
|
-
:metastore => 'file:tmp/rack/cache.meta',
|
20
|
-
:entitystore => 'file:tmp/rack/cache.body'
|
21
|
-
},
|
22
|
-
:cache_controller => {
|
23
|
-
:max_age => 60
|
24
|
-
}
|
25
|
-
}
|
26
|
-
|
27
|
-
def initialize(options={})
|
28
|
-
# Get options
|
29
|
-
@options = DEFAULT_OPTIONS.merge(options)
|
30
|
-
@options[:cache] = DEFAULT_OPTIONS[:cache].merge(@options[:cache])
|
31
|
-
@options[:cache_controller] = DEFAULT_OPTIONS[:cache_controller].merge(@options[:cache_controller])
|
32
|
-
end
|
33
|
-
|
34
|
-
def get(url)
|
35
|
-
# Build app
|
36
|
-
options = @options
|
37
|
-
@app ||= Rack::Builder.new {
|
38
|
-
use Rack::Cache, options[:cache].merge(:verbose => true)
|
39
|
-
use Nanoc3::Extra::CHiCk::CacheController, options[:cache_controller]
|
40
|
-
run Nanoc3::Extra::CHiCk::RackClient
|
41
|
-
}
|
42
|
-
|
43
|
-
# Build environment for request
|
44
|
-
env = Rack::MockRequest.env_for(url, :method => 'GET')
|
45
|
-
|
46
|
-
# Fetch
|
47
|
-
puts "[CHiCk] Fetching #{url}..." if $DEBUG
|
48
|
-
status, headers, body_parts = @app.call(env)
|
49
|
-
puts "[CHiCk] #{url}: #{headers['X-Rack-Cache']}" if $DEBUG
|
50
|
-
|
51
|
-
# Join body
|
52
|
-
body = ''
|
53
|
-
body_parts.each { |part| body << part }
|
54
|
-
|
55
|
-
# Done
|
56
|
-
[ status, headers, body ]
|
57
|
-
end
|
58
|
-
|
59
|
-
end
|
60
|
-
|
61
|
-
# @deprecated Use a HTTP library such as
|
62
|
-
# [Net::HTTP](http://ruby-doc.org/stdlib/libdoc/net/http/rdoc/) or
|
63
|
-
# [Curb](http://curb.rubyforge.org/) instead.
|
64
|
-
class CacheController
|
65
|
-
|
66
|
-
def initialize(app, options={})
|
67
|
-
@app = app
|
68
|
-
@options = options
|
69
|
-
end
|
70
|
-
|
71
|
-
def call(env)
|
72
|
-
res = @app.call(env)
|
73
|
-
unless res[1].has_key?('Cache-Control') || res[1].has_key?('Expires')
|
74
|
-
res[1]['Cache-Control'] = "max-age=#{@options[:max_age]}"
|
75
|
-
end
|
76
|
-
res
|
77
|
-
end
|
78
|
-
|
79
|
-
end
|
80
|
-
|
81
|
-
# @deprecated Use a HTTP library such as
|
82
|
-
# [Net::HTTP](http://ruby-doc.org/stdlib/libdoc/net/http/rdoc/) or
|
83
|
-
# [Curb](http://curb.rubyforge.org/) instead.
|
84
|
-
class RackClient
|
85
|
-
|
86
|
-
METHOD_TO_CLASS_MAPPING = {
|
87
|
-
'DELETE' => Net::HTTP::Delete,
|
88
|
-
'GET' => Net::HTTP::Get,
|
89
|
-
'HEAD' => Net::HTTP::Head,
|
90
|
-
'POST' => Net::HTTP::Post,
|
91
|
-
'PUT' => Net::HTTP::Put
|
92
|
-
}
|
93
|
-
|
94
|
-
def self.call(env)
|
95
|
-
# Build request
|
96
|
-
request = Rack::Request.new(env)
|
97
|
-
|
98
|
-
# Build headers and strip HTTP_
|
99
|
-
request_headers = env.inject({}) do |m,(k,v)|
|
100
|
-
k =~ /^HTTP_(.*)$/ && v ? m.merge($1.gsub(/_/, '-') => v) : m
|
101
|
-
end
|
102
|
-
|
103
|
-
# Build Net::HTTP request
|
104
|
-
http = Net::HTTP.new(request.host, request.port)
|
105
|
-
net_http_request_class = METHOD_TO_CLASS_MAPPING[request.request_method]
|
106
|
-
raise ArgumentError, "Unsupported method: #{request.request_method}" if net_http_request_class.nil?
|
107
|
-
net_http_request = net_http_request_class.new(request.fullpath, request_headers)
|
108
|
-
net_http_request.body = env['rack.input'].read if [ 'POST', 'PUT' ].include?(request.request_method)
|
109
|
-
|
110
|
-
# Perform request
|
111
|
-
http.request(net_http_request) do |response|
|
112
|
-
# Build Rack response triplet
|
113
|
-
return [
|
114
|
-
response.code.to_i,
|
115
|
-
response.to_hash.inject({}) { |m,(k,v)| m.merge(k => v[0]) },
|
116
|
-
[ response.body ]
|
117
|
-
]
|
118
|
-
end
|
119
|
-
end
|
120
|
-
|
121
|
-
end
|
122
|
-
|
123
|
-
end
|
124
|
-
|
125
|
-
end
|
@@ -1,33 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
module Enumerable
|
4
|
-
|
5
|
-
if !Enumerable.instance_methods.include?('group_by')
|
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
|
@@ -1,19 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
module Nanoc3::Extra::TimeExtensions
|
4
|
-
|
5
|
-
# @return [String] The time in an ISO-8601 date format.
|
6
|
-
def to_iso8601_date
|
7
|
-
self.strftime("%Y-%m-%d")
|
8
|
-
end
|
9
|
-
|
10
|
-
# @return [String] The time in an ISO-8601 time format.
|
11
|
-
def to_iso8601_time
|
12
|
-
self.getutc.strftime("%Y-%m-%dT%H:%M:%SZ")
|
13
|
-
end
|
14
|
-
|
15
|
-
end
|
16
|
-
|
17
|
-
class Time
|
18
|
-
include Nanoc3::Extra::TimeExtensions
|
19
|
-
end
|
@@ -1,114 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
module Nanoc3::Extra::Deployers
|
4
|
-
|
5
|
-
# A deployer that deploys a site using rsync.
|
6
|
-
class Rsync
|
7
|
-
|
8
|
-
# Default rsync options
|
9
|
-
DEFAULT_OPTIONS = [
|
10
|
-
'-glpPrtvz',
|
11
|
-
'--exclude=".hg"',
|
12
|
-
'--exclude=".svn"',
|
13
|
-
'--exclude=".git"'
|
14
|
-
]
|
15
|
-
|
16
|
-
# Creates a new deployer that uses rsync. The deployment configurations
|
17
|
-
# will be read from the configuration file of the site (which is assumed
|
18
|
-
# to be the current working directory).
|
19
|
-
#
|
20
|
-
# The deployment configurations are stored like this in the site's
|
21
|
-
# configuration file:
|
22
|
-
#
|
23
|
-
# deploy:
|
24
|
-
# NAME:
|
25
|
-
# options: [ OPTIONS ]
|
26
|
-
# dst: "DST"
|
27
|
-
#
|
28
|
-
# `NAME` is a unique name for the deployment configuration. By default,
|
29
|
-
# the deployer will use the deployment configuration named `"default"`.
|
30
|
-
#
|
31
|
-
# `OPTIONS` is an array containing options to pass to the rsync
|
32
|
-
# executable. This is not required; by default, {DEFAULT_OPTIONS} options
|
33
|
-
# will be used.
|
34
|
-
#
|
35
|
-
# `DST` is a string containing the destination to where rsync should
|
36
|
-
# upload its data. It will likely be in `host:path` format. For example,
|
37
|
-
# `"example.com:/var/www/sites/mysite/html"`. It should not end with a
|
38
|
-
# trailing slash.
|
39
|
-
#
|
40
|
-
# Example: This deployment configuration defines a "default" and a
|
41
|
-
# "staging" deployment configuration. The default options are used.
|
42
|
-
#
|
43
|
-
# deploy:
|
44
|
-
# default:
|
45
|
-
# dst: "ectype:sites/stoneship/public"
|
46
|
-
# staging:
|
47
|
-
# dst: "ectype:sites/stoneship-staging/public"
|
48
|
-
# options: [ "-glpPrtvz" ]
|
49
|
-
#
|
50
|
-
# When running the deployer with the `default` resp. `staging`
|
51
|
-
# configurations, the following rsync commands will be executed:
|
52
|
-
#
|
53
|
-
# rsync -glpPrtvz --exclude=".hg" --exclude=".svn"
|
54
|
-
# --exclude=".git" output ectype:sites/stoneship/public
|
55
|
-
#
|
56
|
-
# rsync -glpPrtvz output ectype:sites/stoneship-staging/public
|
57
|
-
def initialize
|
58
|
-
# Get site
|
59
|
-
error 'No site configuration found' unless File.file?('config.yaml')
|
60
|
-
@site = Nanoc3::Site.new('.')
|
61
|
-
end
|
62
|
-
|
63
|
-
# Runs the task. Possible params:
|
64
|
-
#
|
65
|
-
# @option params [Boolean] :dry_run (false) True if the action itself
|
66
|
-
# should not be executed, but still printed; false otherwise.
|
67
|
-
#
|
68
|
-
# @option params [String] :config_name (:default) The name of the
|
69
|
-
# deployment configuration to use.
|
70
|
-
#
|
71
|
-
# @return [void]
|
72
|
-
def run(params={})
|
73
|
-
# Extract params
|
74
|
-
config_name = params.has_key?(:config_name) ? params[:config_name].to_sym : :default
|
75
|
-
dry_run = params.has_key?(:dry_run) ? params[:dry_run] : false
|
76
|
-
|
77
|
-
# Validate config
|
78
|
-
error 'No deploy configuration found' if @site.config[:deploy].nil?
|
79
|
-
error "No deploy configuration found for #{config_name}" if @site.config[:deploy][config_name].nil?
|
80
|
-
|
81
|
-
# Set arguments
|
82
|
-
src = File.expand_path(@site.config[:output_dir]) + '/'
|
83
|
-
dst = @site.config[:deploy][config_name][:dst]
|
84
|
-
options = @site.config[:deploy][config_name][:options] || DEFAULT_OPTIONS
|
85
|
-
|
86
|
-
# Validate arguments
|
87
|
-
error 'No dst found in deployment configuration' if dst.nil?
|
88
|
-
error 'dst requires no trailing slash' if dst[-1,1] == '/'
|
89
|
-
|
90
|
-
# Run
|
91
|
-
if dry_run
|
92
|
-
warn 'Performing a dry-run; no actions will actually be performed'
|
93
|
-
run_shell_cmd([ 'echo', 'rsync', options, src, dst ].flatten)
|
94
|
-
else
|
95
|
-
run_shell_cmd([ 'rsync', options, src, dst ].flatten)
|
96
|
-
end
|
97
|
-
end
|
98
|
-
|
99
|
-
private
|
100
|
-
|
101
|
-
# Prints the given message on stderr and exits.
|
102
|
-
def error(msg)
|
103
|
-
raise RuntimeError.new(msg)
|
104
|
-
end
|
105
|
-
|
106
|
-
# Runs the given shell command. This is a simple wrapper around Kernel#system.
|
107
|
-
def run_shell_cmd(args)
|
108
|
-
system(*args)
|
109
|
-
raise "command exited with a nonzero status code #{$?.exitstatus} (command: #{args.join(' ')})" if !$?.success?
|
110
|
-
end
|
111
|
-
|
112
|
-
end
|
113
|
-
|
114
|
-
end
|
@@ -1,40 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
module Nanoc3::Extra
|
4
|
-
|
5
|
-
# @deprecated Create a File instance directly and use that instead.
|
6
|
-
class FileProxy
|
7
|
-
|
8
|
-
instance_methods.each { |m| undef_method m unless m =~ /^__/ || m.to_s == 'object_id' }
|
9
|
-
|
10
|
-
@@deprecation_warning_shown = false
|
11
|
-
|
12
|
-
def initialize(path)
|
13
|
-
@path = path
|
14
|
-
end
|
15
|
-
|
16
|
-
def freeze
|
17
|
-
end
|
18
|
-
|
19
|
-
def respond_to?(meth)
|
20
|
-
file_instance_methods.include?(meth.to_sym)
|
21
|
-
end
|
22
|
-
|
23
|
-
def method_missing(sym, *args, &block)
|
24
|
-
if !@@deprecation_warning_shown
|
25
|
-
$stderr.puts 'WARNING: The :file attribute is deprecated and will be removed in a future version of nanoc. Instead of using this :file attribute, consider manually creating a File object when it’s needed, using the :content_filename, :meta_filename or :filename attributes.'
|
26
|
-
@@deprecation_warning_shown = true
|
27
|
-
end
|
28
|
-
|
29
|
-
File.open(@path, 'r') { |io| io.__send__(sym, *args, &block) }
|
30
|
-
end
|
31
|
-
|
32
|
-
private
|
33
|
-
|
34
|
-
def file_instance_methods
|
35
|
-
@@file_instance_methods ||= Set.new(File.instance_methods.map { |m| m.to_sym })
|
36
|
-
end
|
37
|
-
|
38
|
-
end
|
39
|
-
|
40
|
-
end
|