webgen 1.3.0 → 1.4.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.
- checksums.yaml +4 -4
- data/Rakefile +2 -2
- data/VERSION +1 -1
- data/data/webgen/passive_sources/stylesheets/api.css +2 -4
- data/data/webgen/passive_sources/templates/api.template +1 -1
- data/data/webgen/passive_sources/templates/feed.template +1 -1
- data/lib/webgen/cli.rb +67 -63
- data/lib/webgen/cli/commands/create.rb +4 -6
- data/lib/webgen/cli/commands/create_bundle.rb +8 -18
- data/lib/webgen/cli/commands/create_website.rb +15 -21
- data/lib/webgen/cli/commands/generate.rb +10 -16
- data/lib/webgen/cli/commands/install.rb +4 -6
- data/lib/webgen/cli/commands/show.rb +3 -3
- data/lib/webgen/cli/commands/show_bundles.rb +9 -13
- data/lib/webgen/cli/commands/show_config.rb +12 -18
- data/lib/webgen/cli/commands/show_dependencies.rb +7 -8
- data/lib/webgen/cli/commands/show_extensions.rb +10 -13
- data/lib/webgen/cli/commands/show_tree.rb +11 -16
- data/lib/webgen/cli/utils.rb +0 -18
- data/lib/webgen/content_processor.rb +2 -2
- data/lib/webgen/content_processor/sass.rb +6 -0
- data/lib/webgen/item_tracker/nodes.rb +8 -1
- data/lib/webgen/node_finder.rb +53 -31
- data/lib/webgen/path.rb +15 -3
- data/lib/webgen/path_handler/api.rb +23 -2
- data/lib/webgen/path_handler/page_utils.rb +5 -3
- data/lib/webgen/path_handler/sitemap.rb +1 -1
- data/lib/webgen/version.rb +1 -1
- data/test/webgen/path_handler/test_api.rb +24 -6
- data/test/webgen/path_handler/test_page_utils.rb +5 -0
- data/test/webgen/test_cli.rb +3 -3
- data/test/webgen/test_content_processor.rb +1 -0
- data/test/webgen/test_node_finder.rb +5 -4
- data/test/webgen/test_path.rb +14 -4
- metadata +52 -52
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8a60ac4c86998c240ed99fd35a34d68d4c58a9ab
|
4
|
+
data.tar.gz: 36a48c6b290e92da90225f76b3dda06557fe57c9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 54a4999cee44f7498f01c7e1131e8d64a17c0a8581cda6c4f79577541a436df7d2f9624a1ba79407fec581c923115ad01fca3037c1804c5f8c47e12fe4aeb9e5
|
7
|
+
data.tar.gz: fdcecf0497be5d33dc7514aab8775326132c8addfcc5d1fcf4c55e2742edcfff3007c789de6a63b37170a9bfac78bc9fd118920699a06bcd4048a2b73b83c7f0
|
data/Rakefile
CHANGED
@@ -105,9 +105,9 @@ EOF
|
|
105
105
|
|
106
106
|
#### Dependencies, requirements and files
|
107
107
|
|
108
|
-
s.required_ruby_version = '>=
|
108
|
+
s.required_ruby_version = '>= 2.0.0'
|
109
109
|
|
110
|
-
s.add_dependency('cmdparse', '~>
|
110
|
+
s.add_dependency('cmdparse', '~> 3.0', '>= 3.0.1')
|
111
111
|
s.add_dependency('systemu', '~> 2.5')
|
112
112
|
s.add_dependency('kramdown', '~> 1.3')
|
113
113
|
s.add_development_dependency('rake', '>= 0.8.3')
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.
|
1
|
+
1.4.0
|
@@ -61,7 +61,7 @@
|
|
61
61
|
}
|
62
62
|
|
63
63
|
.api-documentation .description p {
|
64
|
-
margin: 1em 0
|
64
|
+
margin: 1em 0;
|
65
65
|
}
|
66
66
|
|
67
67
|
.api-documentation .description li p {
|
@@ -183,9 +183,8 @@
|
|
183
183
|
.api-documentation .method-detail {
|
184
184
|
margin: 0.5em 0;
|
185
185
|
padding: 0.5em 0;
|
186
|
-
cursor: pointer;
|
187
186
|
}
|
188
|
-
.api-documentation .method-detail:hover {
|
187
|
+
.api-documentation .method-detail:hover, .api-documentation :target {
|
189
188
|
background-color: #f1edba;
|
190
189
|
}
|
191
190
|
.api-documentation .method-heading {
|
@@ -244,7 +243,6 @@
|
|
244
243
|
}
|
245
244
|
|
246
245
|
.api-documentation #attribute-method-details .method-detail:hover {
|
247
|
-
background-color: transparent;
|
248
246
|
cursor: default;
|
249
247
|
}
|
250
248
|
.api-documentation .attribute-access-type {
|
@@ -15,7 +15,7 @@ end
|
|
15
15
|
--- name:klass pipeline:erb
|
16
16
|
<% klass = context.node.node_info[:rdoc_object] %>
|
17
17
|
<div class="api-documentation api-<%= klass.type %>">
|
18
|
-
<
|
18
|
+
<h2 class="<%= klass.type %>"><%= klass.type %> <%= klass.full_name %></h2>
|
19
19
|
|
20
20
|
<div class="description">
|
21
21
|
<%= klass.description %>
|
@@ -42,7 +42,7 @@
|
|
42
42
|
<rss version="2.0">
|
43
43
|
<channel>
|
44
44
|
<title><%= h(context.node['title']) %></title>
|
45
|
-
<link><%= context.node.feed_link
|
45
|
+
<link><%= context.node.feed_link %></link>
|
46
46
|
<description><%= h(context.node['description']) %></description>
|
47
47
|
<% if context.node['created_at'].kind_of?(Time) %>
|
48
48
|
<pubdate><%= context.node['created_at'].rfc822 %></pubdate>
|
data/lib/webgen/cli.rb
CHANGED
@@ -19,7 +19,7 @@ module Webgen
|
|
19
19
|
#
|
20
20
|
# A CLI command is an extension that can be invoked from the webgen CLI and thus needs to be
|
21
21
|
# derived from CmdParse::Command. For detailed information on this class and the whole cmdparse
|
22
|
-
# package have a look at http://cmdparse.
|
22
|
+
# package have a look at http://cmdparse.gettalong.org!
|
23
23
|
#
|
24
24
|
# == Sample CLI command extension
|
25
25
|
#
|
@@ -28,39 +28,31 @@ module Webgen
|
|
28
28
|
# class SampleCommand < CmdParse::Command
|
29
29
|
#
|
30
30
|
# def initialize
|
31
|
-
# super('sample', false)
|
32
|
-
#
|
33
|
-
#
|
34
|
-
#
|
31
|
+
# super('sample', takes_commands: false)
|
32
|
+
# short_desc("This sample command just outputs its parameters")
|
33
|
+
# description("Uses the global verbosity level and outputs additional information when " +
|
34
|
+
# "the level is set to verbose!")
|
35
35
|
# @username = nil
|
36
|
-
#
|
37
|
-
#
|
38
|
-
# opts.on('-u', '--user USER', String,
|
39
|
-
# *Webgen::CLI::Util.format_option_desc('Specify an additional user name to output')) do |username|
|
40
|
-
# @username = username
|
41
|
-
# end
|
36
|
+
# options.on('-u', '--user USER', String, 'Specify an additional user name to output') do |username|
|
37
|
+
# @username = username
|
42
38
|
# end
|
43
39
|
# end
|
44
40
|
#
|
45
|
-
# def execute(
|
46
|
-
#
|
47
|
-
#
|
48
|
-
#
|
49
|
-
# puts "
|
50
|
-
# args.each {|arg| puts arg}
|
51
|
-
# if commandparser.log_level <= 1
|
52
|
-
# puts "Some debug information here"
|
53
|
-
# end
|
54
|
-
# puts "The entered username: #{@username}" if @username
|
41
|
+
# def execute(required, *optional)
|
42
|
+
# puts "Command line arguments:"
|
43
|
+
# ([required] + optional).each {|arg| puts arg}
|
44
|
+
# if command_parser.log_level <= 1
|
45
|
+
# puts "Some debug information here"
|
55
46
|
# end
|
47
|
+
# puts "The entered username: #{@username}" if @username
|
56
48
|
# end
|
57
49
|
#
|
58
50
|
# end
|
59
51
|
#
|
60
52
|
# website.ext.cli.add_command(SampleCommand.new)
|
61
53
|
#
|
62
|
-
#
|
63
|
-
#
|
54
|
+
# The Webgen::CLI::Utils module provides some useful methods for outputting formatted or
|
55
|
+
# highlighted text.
|
64
56
|
#
|
65
57
|
module CLI
|
66
58
|
|
@@ -91,65 +83,67 @@ module Webgen
|
|
91
83
|
|
92
84
|
# Create a new CommandParser class.
|
93
85
|
def initialize
|
94
|
-
super(
|
86
|
+
super(handle_exceptions: :no_help)
|
95
87
|
@directory = nil
|
96
88
|
@verbose = false
|
97
89
|
@do_search = false
|
98
90
|
@log_level = ::Logger::INFO
|
99
91
|
@config_options = {}
|
100
92
|
|
101
|
-
|
102
|
-
|
93
|
+
add_command(CmdParse::VersionCommand.new(add_switches: false))
|
94
|
+
add_command(CmdParse::HelpCommand.new)
|
103
95
|
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
opts.
|
108
|
-
opts.on("--directory DIR", "-d", String,
|
109
|
-
*Utils.format_option_desc("The website directory to use")) do |d|
|
96
|
+
main_options.program_name = "webgen"
|
97
|
+
main_options.version = Webgen::VERSION
|
98
|
+
main_options do |opts|
|
99
|
+
opts.on("--directory DIR", "-d", String, "The website directory to use") do |d|
|
110
100
|
@directory = d
|
111
101
|
end
|
112
|
-
opts.on("--search-dirs", "-s",
|
113
|
-
*Utils.format_option_desc("Search parent directories for website directory")) do |s|
|
102
|
+
opts.on("--search-dirs", "-s", "Search parent directories for website directory") do |s|
|
114
103
|
@do_search = s
|
115
104
|
end
|
116
|
-
opts.on("
|
117
|
-
|
105
|
+
opts.on("--version", "-V", "Show webgen version information") do
|
106
|
+
main_command.commands['version'].execute
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
global_options do |opts|
|
111
|
+
opts.on("-c", "--[no-]color", "Colorize output (default: #{Webgen::CLI::Utils.use_colors ? "yes" : "no"})") do |a|
|
118
112
|
Webgen::CLI::Utils.use_colors = a
|
119
113
|
end
|
120
|
-
opts.on("-v", "--[no-]verbose",
|
121
|
-
*Utils.format_option_desc("Verbose output (default: no)")) do |v|
|
114
|
+
opts.on("-v", "--[no-]verbose", "Verbose output (default: no)") do |v|
|
122
115
|
@verbose = v
|
116
|
+
update_logger(@website.logger) unless @website.nil?
|
123
117
|
end
|
124
|
-
opts.on("-q", "--[no-]quiet",
|
125
|
-
*Utils.format_option_desc("Quiet output (default: no)")) do |v|
|
118
|
+
opts.on("-q", "--[no-]quiet", "Quiet output (default: no)") do |v|
|
126
119
|
@log_level = (v ? ::Logger::WARN : :Logger::INFO)
|
120
|
+
update_logger(@website.logger) unless @website.nil?
|
127
121
|
end
|
128
|
-
opts.on("-n", "--[no-]dry-run",
|
129
|
-
*Utils.format_option_desc("Do a dry run, i.e. don't actually write anything (default: no)")) do |v|
|
122
|
+
opts.on("-n", "--[no-]dry-run", "Do a dry run, i.e. don't actually write anything (default: no)") do |v|
|
130
123
|
@config_options['website.dry_run'] = v
|
124
|
+
unless @website.nil?
|
125
|
+
update_config(@website.config)
|
126
|
+
update_logger(@website.logger)
|
127
|
+
end
|
131
128
|
end
|
132
|
-
opts.on("-o", "--option CONFIG_OPTION", String,
|
133
|
-
*Utils.format_option_desc("Specify a simple configuration option (key=value)")) do |v|
|
129
|
+
opts.on("-o", "--option CONFIG_OPTION", String, "Specify a simple configuration option (key=value)") do |v|
|
134
130
|
k, v = v.split('=')
|
135
131
|
begin
|
136
132
|
@config_options[k.to_s] = YAML.load(v.to_s)
|
137
133
|
rescue YAML::SyntaxError
|
138
134
|
raise ConfigurationOptionError.new("Couldn't parse value for '#{k}': #{$!}")
|
139
135
|
end
|
136
|
+
update_config(@website.config) unless @website.nil?
|
140
137
|
end
|
141
|
-
opts.on("--[no-]debug",
|
142
|
-
*Utils.format_option_desc("Enable debugging")) do |v|
|
138
|
+
opts.on("--[no-]debug", "Enable debugging") do |v|
|
143
139
|
@log_level = (v ? ::Logger::DEBUG : :Logger::INFO)
|
144
|
-
|
145
|
-
opts.on_tail("--version", "-V", "Show webgen version information") do
|
146
|
-
main_command.commands['version'].execute([])
|
140
|
+
update_logger(@website.logger) unless @website.nil?
|
147
141
|
end
|
148
142
|
end
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
143
|
+
add_command(Webgen::CLI::GenerateCommand.new, default: true)
|
144
|
+
add_command(Webgen::CLI::ShowCommand.new)
|
145
|
+
add_command(Webgen::CLI::CreateCommand.new)
|
146
|
+
add_command(Webgen::CLI::InstallCommand.new)
|
153
147
|
end
|
154
148
|
|
155
149
|
# Utility method for getting the Webgen::Website object.
|
@@ -169,20 +163,30 @@ module Webgen
|
|
169
163
|
@website = Webgen::Website.new(@directory, Webgen::CLI::Logger.new) do |site, before_init|
|
170
164
|
if before_init
|
171
165
|
site.ext.cli = self
|
172
|
-
site.logger
|
173
|
-
site.logger.verbose = @verbose
|
174
|
-
site.logger.prefix = '[DRY-RUN] ' if @config_options['website.dry_run']
|
166
|
+
update_logger(site.logger)
|
175
167
|
else
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
168
|
+
update_config(site.config)
|
169
|
+
end
|
170
|
+
end
|
171
|
+
end
|
172
|
+
|
173
|
+
def update_logger(logger)
|
174
|
+
logger.level = @log_level
|
175
|
+
logger.verbose = @verbose
|
176
|
+
logger.prefix = '[DRY-RUN] ' if @config_options['website.dry_run']
|
177
|
+
end
|
178
|
+
private :update_logger
|
179
|
+
|
180
|
+
def update_config(config)
|
181
|
+
@config_options.each do |k, v|
|
182
|
+
if config.option?(k)
|
183
|
+
config[k] = v
|
184
|
+
else
|
185
|
+
raise ConfigurationOptionError.new("Unknown option '#{k}'")
|
183
186
|
end
|
184
187
|
end
|
185
188
|
end
|
189
|
+
private :update_config
|
186
190
|
|
187
191
|
# Parse the command line arguments.
|
188
192
|
#
|
@@ -11,12 +11,10 @@ module Webgen
|
|
11
11
|
class CreateCommand < CmdParse::Command
|
12
12
|
|
13
13
|
def initialize # :nodoc:
|
14
|
-
super('create'
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
website or an extension bundle.
|
19
|
-
DESC
|
14
|
+
super('create')
|
15
|
+
short_desc('Create a website or an extension bundle')
|
16
|
+
long_desc("Groups various commands together that are used for creating products, like a " +
|
17
|
+
"website or an extension bundle")
|
20
18
|
add_command(CreateWebsiteCommand.new)
|
21
19
|
add_command(CreateBundleCommand.new)
|
22
20
|
end
|
@@ -11,33 +11,23 @@ module Webgen
|
|
11
11
|
class CreateBundleCommand < CmdParse::Command
|
12
12
|
|
13
13
|
def initialize # :nodoc:
|
14
|
-
super('bundle',
|
15
|
-
|
16
|
-
|
14
|
+
super('bundle', takes_commands: false)
|
15
|
+
short_desc('Create an extension bundle')
|
16
|
+
long_desc(<<DESC)
|
17
17
|
Creates a new extension bundle. This command can either create a local bundle in the
|
18
18
|
website's ext/ directory or a bundle that can be distributed via Rubygems. In the
|
19
19
|
latter case you can optionally specify the directory under which the bundle should
|
20
20
|
be created.
|
21
21
|
DESC
|
22
|
-
|
23
|
-
|
24
|
-
opts.on("-d", "--distribution-format",
|
25
|
-
*Utils.format_option_desc("Create the bundle in distribution format")) do
|
26
|
-
@type = :gem
|
27
|
-
end
|
22
|
+
options.on("-d", "--distribution-format", "Create the bundle in distribution format") do
|
23
|
+
@type = :gem
|
28
24
|
end
|
29
25
|
@type = :local
|
30
26
|
end
|
31
27
|
|
32
|
-
def
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
def execute(args) # :nodoc:
|
37
|
-
bundle_name = args.shift
|
38
|
-
raise "The argument NAME is mandatory" if bundle_name.to_s.empty?
|
39
|
-
directory = args.shift || bundle_name
|
40
|
-
commandparser.website.execute_task(:create_bundle, bundle_name, @type, directory)
|
28
|
+
def execute(bundle_name, directory = nil) # :nodoc:
|
29
|
+
directory ||= bundle_name
|
30
|
+
command_parser.website.execute_task(:create_bundle, bundle_name, @type, directory)
|
41
31
|
end
|
42
32
|
|
43
33
|
end
|
@@ -10,9 +10,9 @@ module Webgen
|
|
10
10
|
class CreateWebsiteCommand < CmdParse::Command
|
11
11
|
|
12
12
|
def initialize # :nodoc:
|
13
|
-
super('website', false)
|
14
|
-
|
15
|
-
|
13
|
+
super('website', takes_commands: false)
|
14
|
+
short_desc('Create a basic webgen website')
|
15
|
+
long_desc(<<DESC)
|
16
16
|
Creates a webgen website at the specified directory. If the --template
|
17
17
|
option is not used, a basic website is created. Otherwise the template
|
18
18
|
defines the content of website.
|
@@ -22,36 +22,30 @@ displayed.
|
|
22
22
|
DESC
|
23
23
|
|
24
24
|
@template = nil
|
25
|
-
|
26
|
-
|
27
|
-
opts.on('-t', '--template TEMPLATE', String, "A website template (optional)") do |val|
|
28
|
-
@template = val
|
29
|
-
end
|
30
|
-
opts.separator ""
|
31
|
-
opts.separator "Arguments:"
|
32
|
-
opts.separator opts.summary_indent + "DIR: the directory in which the website should be created"
|
25
|
+
options.on('-t', '--template TEMPLATE', String, "A website template (optional)") do |val|
|
26
|
+
@template = val
|
33
27
|
end
|
34
28
|
end
|
35
29
|
|
36
|
-
def
|
37
|
-
super
|
38
|
-
templates =
|
39
|
-
|
30
|
+
def help #:nodoc:
|
31
|
+
help_output = super
|
32
|
+
templates = command_parser.website.ext.task.data(:create_website)[:templates].keys.sort
|
33
|
+
help_output << "Available templates:\n"
|
40
34
|
output = if templates.empty?
|
41
35
|
"No templates available"
|
42
36
|
else
|
43
37
|
templates.join(', ')
|
44
38
|
end
|
45
|
-
|
39
|
+
help_output << Utils.format(output, command_parser.help_line_width - command_parser.help_indent,
|
40
|
+
command_parser.help_indent, true).join("\n")
|
46
41
|
end
|
47
42
|
|
48
|
-
def execute(
|
49
|
-
|
50
|
-
|
51
|
-
website.logger.verbose = commandparser.verbose
|
43
|
+
def execute(dir) # :nodoc:
|
44
|
+
Webgen::Website.new(dir, Webgen::CLI::Logger.new) do |website|
|
45
|
+
website.logger.verbose = command_parser.verbose
|
52
46
|
website.config['website.tmpdir'] = Dir.tmpdir
|
53
47
|
end.execute_task(:create_website, @template)
|
54
|
-
puts "Created a new webgen website in <#{
|
48
|
+
puts "Created a new webgen website in <#{dir}>" + (@template ? " using the '#{@template}' template" : '')
|
55
49
|
rescue Webgen::Task::CreateWebsite::Error => e
|
56
50
|
puts "An error occured while creating the website: #{e.message}"
|
57
51
|
end
|
@@ -9,24 +9,18 @@ module Webgen
|
|
9
9
|
class GenerateCommand < CmdParse::Command
|
10
10
|
|
11
11
|
def initialize # :nodoc:
|
12
|
-
super('generate',
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
self.options = CmdParse::OptionParserWrapper.new do |opts|
|
18
|
-
opts.separator "Options:"
|
19
|
-
opts.on('-a', '--auto [SEC]', Integer,
|
20
|
-
*Utils.format_option_desc("Auto-generate the website every SEC seconds (5=default, 0=off)")) do |val|
|
21
|
-
@auto_generate_secs = val || 5
|
22
|
-
end
|
12
|
+
super('generate', takes_commands: false)
|
13
|
+
short_desc('Generate the webgen website')
|
14
|
+
long_desc("This command is executed by default when no other command was specified.")
|
15
|
+
options.on('-a', '--auto [SEC]', Integer, "Auto-generate the website every SEC seconds (5=default, 0=off)") do |val|
|
16
|
+
@auto_generate_secs = val || 5
|
23
17
|
end
|
24
18
|
@auto_generate_secs = 0
|
25
19
|
end
|
26
20
|
|
27
|
-
def execute
|
21
|
+
def execute # :nodoc:
|
28
22
|
if @auto_generate_secs <= 0
|
29
|
-
|
23
|
+
command_parser.website.execute_task(:generate_website)
|
30
24
|
else
|
31
25
|
auto_generate
|
32
26
|
end
|
@@ -38,8 +32,8 @@ EOF
|
|
38
32
|
time = Time.now
|
39
33
|
abort = false
|
40
34
|
old_paths = []
|
41
|
-
dirs = "{" <<
|
42
|
-
type == :file_system ? File.join(
|
35
|
+
dirs = "{" << command_parser.website.config['sources'].map do |mp, type, *args|
|
36
|
+
type == :file_system ? File.join(command_parser.website.directory, args[0], args[1] || '**/*') : nil
|
43
37
|
end.compact.join(',') << "}"
|
44
38
|
|
45
39
|
Signal.trap('INT') {abort = true}
|
@@ -48,7 +42,7 @@ EOF
|
|
48
42
|
paths = Dir[dirs].sort
|
49
43
|
if old_paths != paths || paths.any? {|p| File.file?(p) && File.mtime(p) > time}
|
50
44
|
begin
|
51
|
-
|
45
|
+
command_parser.website(true).execute_task(:generate_website)
|
52
46
|
rescue Webgen::Error => e
|
53
47
|
puts e.message
|
54
48
|
end
|