nanoc3 3.2.4 → 3.3.0
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.
- 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
|