ascii_binder 0.1.4 → 0.1.5
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/bin/ascii_binder +1 -0
- data/lib/ascii_binder/helpers.rb +35 -8
- data/lib/ascii_binder/version.rb +1 -1
- metadata +3 -3
- data/bin/ascii_binder +0 -312
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5e46fc5bec124115e6057d804df19fe32f791d85
|
4
|
+
data.tar.gz: 06512c6be9db989118b8af3dfd4b49f560082c56
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fb26aab0abe17ed2fedba192f2b4722d9f0330096fc5e2116e7b19f00bc6820200b4dc262fb0446cd959126a0db0e8909ce0fbe83bc93a1eba3a0f4f3ddaa074
|
7
|
+
data.tar.gz: 86c0a7e51ab5f08975592b0edde1c0701bde3e76a6646d5f06bafe381a4816273136e4fa0b307f4022bb0e56ac4e3b5d0157d4cfeec9a4b79cdf08080c87796c
|
data/bin/ascii_binder
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
asciibinder
|
data/lib/ascii_binder/helpers.rb
CHANGED
@@ -197,7 +197,9 @@ module AsciiBinder
|
|
197
197
|
def find_topic_files
|
198
198
|
file_list = []
|
199
199
|
Find.find(source_dir).each do |path|
|
200
|
-
|
200
|
+
# Only consider .adoc files and ignore README, and anything in
|
201
|
+
# directories whose names begin with 'old' or '_' (underscore)
|
202
|
+
next if path.nil? or not path =~ /.*\.adoc/ or path =~ /README/ or path =~ /\/old\// or path =~ /\/_/
|
201
203
|
src_path = Pathname.new(path).sub(source_dir,'').to_s
|
202
204
|
next if src_path.split('/').length < 3
|
203
205
|
file_list << src_path
|
@@ -353,7 +355,10 @@ module AsciiBinder
|
|
353
355
|
end
|
354
356
|
# Check for right format of topic group values
|
355
357
|
['Name','Dir'].each do |group_key|
|
356
|
-
if
|
358
|
+
if [true, false].include?(group[group_key])
|
359
|
+
raise "One of the topic groups in #{build_config_file} is using a reserved YAML keyword for the #{group_key} setting. In order to prevent your text from being turned into a true/false value, wrap it in quotes."
|
360
|
+
end
|
361
|
+
if not group[group_key].kind_of?(String)
|
357
362
|
raise "One of the topic groups in #{build_config_file} is not using a string for the #{group_key} setting; current value is #{group[group_key].inspect}"
|
358
363
|
end
|
359
364
|
if group[group_key].empty? or group[group_key].match BLANK_STRING_RE
|
@@ -746,6 +751,24 @@ module AsciiBinder
|
|
746
751
|
single_page = options[:single_page]
|
747
752
|
site_name = options[:site_name]
|
748
753
|
|
754
|
+
# Distro Map settings can be overridden on a per-branch
|
755
|
+
# basis. This only works for top-level (string) values
|
756
|
+
# of the distro config and -not- the 'site' key.
|
757
|
+
branchwise_distro_config = {}
|
758
|
+
distro_config.each do |key,value|
|
759
|
+
next unless distro_config[key].kind_of?(String)
|
760
|
+
branchwise_distro_config[key] = value
|
761
|
+
end
|
762
|
+
if branch_config.has_key?('distro-overrides')
|
763
|
+
branch_config['distro-overrides'].each do |key,value|
|
764
|
+
if key == 'site'
|
765
|
+
puts "WARNING: The 'site' value of the distro config cannot be overriden on a branch-by-branch basis."
|
766
|
+
next
|
767
|
+
end
|
768
|
+
branchwise_distro_config[key] = value
|
769
|
+
end
|
770
|
+
end
|
771
|
+
|
749
772
|
src_file_path = File.join(src_group_path,"#{topic['File']}.adoc")
|
750
773
|
tgt_file_path = File.join(tgt_group_path,"#{topic['File']}.html")
|
751
774
|
if single_page.nil?
|
@@ -755,9 +778,9 @@ module AsciiBinder
|
|
755
778
|
page_attrs = asciidoctor_page_attrs([
|
756
779
|
"imagesdir=#{src_group_path}/images",
|
757
780
|
distro,
|
758
|
-
"product-title=#{
|
781
|
+
"product-title=#{branchwise_distro_config["name"]}",
|
759
782
|
"product-version=#{branch_config["name"]}",
|
760
|
-
"product-author=#{
|
783
|
+
"product-author=#{branchwise_distro_config["author"]}"
|
761
784
|
])
|
762
785
|
|
763
786
|
doc = Asciidoctor.load topic_adoc, :header_footer => false, :safe => :unsafe, :attributes => page_attrs
|
@@ -773,9 +796,9 @@ module AsciiBinder
|
|
773
796
|
end
|
774
797
|
page_args = {
|
775
798
|
:distro_key => distro,
|
776
|
-
:distro =>
|
799
|
+
:distro => branchwise_distro_config["name"],
|
777
800
|
:site_name => site_name,
|
778
|
-
:site_url =>
|
801
|
+
:site_url => branchwise_distro_config["site_url"],
|
779
802
|
:topic_url => "#{branch_config['dir']}/#{topic_path}.html",
|
780
803
|
:version => branch_config["name"],
|
781
804
|
:group_title => topic_group['Name'],
|
@@ -835,8 +858,12 @@ module AsciiBinder
|
|
835
858
|
|
836
859
|
# Now build a sitemap
|
837
860
|
site_dir_path = Pathname.new(site_dir)
|
838
|
-
SitemapGenerator::Sitemap.
|
839
|
-
|
861
|
+
SitemapGenerator::Sitemap.create(
|
862
|
+
:default_host => site_config[:url],
|
863
|
+
:public_path => site_dir_path,
|
864
|
+
:compress => false,
|
865
|
+
:filename => File.join(site_dir,'sitemap')
|
866
|
+
) do
|
840
867
|
file_list = Find.find(site_dir).select{ |path| not path.nil? and path =~ /.*\.html$/ }.map{ |path| '/' + Pathname.new(path).relative_path_from(site_dir_path).to_s }
|
841
868
|
file_list.each do |file|
|
842
869
|
add(file, :changefreq => 'daily')
|
data/lib/ascii_binder/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ascii_binder
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- N. Harrison Ripps
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2016-
|
12
|
+
date: 2016-09-14 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -285,7 +285,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
285
285
|
version: '0'
|
286
286
|
requirements: []
|
287
287
|
rubyforge_project:
|
288
|
-
rubygems_version: 2.
|
288
|
+
rubygems_version: 2.5.1
|
289
289
|
signing_key:
|
290
290
|
specification_version: 4
|
291
291
|
summary: AsciiBinder is an AsciiDoc-based system for authoring and publishing closely
|
data/bin/ascii_binder
DELETED
@@ -1,312 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
require 'ascii_binder/helpers'
|
4
|
-
require 'ascii_binder/version'
|
5
|
-
require 'pathname'
|
6
|
-
require 'trollop'
|
7
|
-
|
8
|
-
include AsciiBinder::Helpers
|
9
|
-
|
10
|
-
def call_generate(branch_group, distro, page)
|
11
|
-
if page == ''
|
12
|
-
page = nil
|
13
|
-
end
|
14
|
-
begin
|
15
|
-
generate_docs(branch_group, distro, page)
|
16
|
-
rescue => e
|
17
|
-
message = "#{e.class.name}: #{e.message} at\n #{e.backtrace.join("\n ")}"
|
18
|
-
Trollop::die "Could not generate docs:\n#{message}"
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
def repo_check(repo_dir)
|
23
|
-
missing_files = false
|
24
|
-
# These must all be present
|
25
|
-
['.git','_distro_map.yml','_templates'].each do |file|
|
26
|
-
unless File.exist?(File.join(repo_dir, file))
|
27
|
-
missing_files = true
|
28
|
-
end
|
29
|
-
end
|
30
|
-
# Either of these must be present
|
31
|
-
unless File.exist?(File.join(repo_dir, '_build_cfg.yml')) or File.exist?(File.join(repo_dir, '_topic_map.yml'))
|
32
|
-
missing_files = true
|
33
|
-
end
|
34
|
-
if missing_files
|
35
|
-
Trollop::die "The specified repo directory '#{repo_dir}' does not appear to be an AsciiBinder repo."
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
SUB_COMMANDS = %w{help version build watch package clean create clone}
|
40
|
-
Trollop::options do
|
41
|
-
version AsciiBinder::VERSION
|
42
|
-
banner <<-EOF
|
43
|
-
Usage:
|
44
|
-
#$0 <command> <repo_dir>
|
45
|
-
|
46
|
-
Commands:
|
47
|
-
build (default action)
|
48
|
-
Builds the HTML docs in the indicated repo dir
|
49
|
-
create
|
50
|
-
Generates a new AsciiBinder repo at the indicated dir
|
51
|
-
clone
|
52
|
-
Clones an existing AsciiBinder repo to the local filesystem
|
53
|
-
watch
|
54
|
-
Starts Guard, which automatically regenerates changed HTML
|
55
|
-
files on the working branch in the repo dir
|
56
|
-
package
|
57
|
-
Builds and packages the static HTML for all of the sites
|
58
|
-
defined in the _distro_config.yml file
|
59
|
-
clean
|
60
|
-
Remove _preview, _publish and _package dirs created by
|
61
|
-
other AsciiBinder operations.
|
62
|
-
|
63
|
-
Options:
|
64
|
-
EOF
|
65
|
-
stop_on SUB_COMMANDS
|
66
|
-
end
|
67
|
-
|
68
|
-
cmd = ARGV.shift
|
69
|
-
repo_dir = nil
|
70
|
-
|
71
|
-
if cmd.nil?
|
72
|
-
cmd = "build"
|
73
|
-
elsif !SUB_COMMANDS.include?(cmd)
|
74
|
-
if ARGV.empty?
|
75
|
-
repo_dir = Pathname.new(cmd)
|
76
|
-
cmd = "build"
|
77
|
-
else
|
78
|
-
Trollop::die "'#{cmd}' is not a valid asciibinder subcommand. Legal values are '#{SUB_COMMANDS.join('\', \'')}'."
|
79
|
-
end
|
80
|
-
end
|
81
|
-
|
82
|
-
cmd_opts = case cmd
|
83
|
-
when "build"
|
84
|
-
Trollop::options do
|
85
|
-
banner <<-EOF
|
86
|
-
Usage:
|
87
|
-
#$0 build <options> <repo_dir>
|
88
|
-
|
89
|
-
Description:
|
90
|
-
This is the default behavior for the asciibinder utility. When run,
|
91
|
-
AsciiBinder reads the _distro_config.yml file out of the working
|
92
|
-
branch of the indicated repo directory and based on that, proceeds to
|
93
|
-
build the working branch version of the documentation for each distro.
|
94
|
-
|
95
|
-
If you use the --all_branches flag, AsciiBinder behaves as described
|
96
|
-
above, and then once the working branch version is built, AsciiBinder
|
97
|
-
cycles through the other branches named in the _distro_config.yml file
|
98
|
-
until all of the permutations have been built.
|
99
|
-
|
100
|
-
If you want to limit the scope of the build work for faster builds,
|
101
|
-
you have two targeted options:
|
102
|
-
|
103
|
-
--distro=<distro_key> - Only builds the specified distro and branches
|
104
|
-
associated with this distro.
|
105
|
-
|
106
|
-
--page=<page_path> - Only builds the specified page for all distros.
|
107
|
-
|
108
|
-
Note that the format for the "--page" option is:
|
109
|
-
|
110
|
-
<topic_group>:<topic_file>
|
111
|
-
|
112
|
-
or for subtopics:
|
113
|
-
|
114
|
-
<topic_group>/<subtopic_group>:<topic_file>
|
115
|
-
|
116
|
-
However, if you want to use the --page option extensively, then be
|
117
|
-
aware of the `asciibinder watch` function, which does this for you
|
118
|
-
automatically as you change any .adoc files in your working branch.
|
119
|
-
|
120
|
-
Options:
|
121
|
-
EOF
|
122
|
-
opt :all_branches, "Instead of building only the current working branch, build all branches", :default => false
|
123
|
-
opt :distro, "Instead of building all distros, build branches only for the specified distro.", :default => ''
|
124
|
-
opt :page, "Build only the specified page for all distros and only the current working branch.", :default => ''
|
125
|
-
conflicts :distro, :page
|
126
|
-
end
|
127
|
-
when "create"
|
128
|
-
Trollop::options do
|
129
|
-
banner <<-EOF
|
130
|
-
Usage:
|
131
|
-
#$0 create <new_repo_dir>
|
132
|
-
|
133
|
-
Description:
|
134
|
-
Creates a new, bare AsciiBinder repo in the specified directory.
|
135
|
-
EOF
|
136
|
-
end
|
137
|
-
when "clone"
|
138
|
-
Trollop::options do
|
139
|
-
banner <<-EOF
|
140
|
-
Usage:
|
141
|
-
#$0 clone <options> <git_repo_url>
|
142
|
-
|
143
|
-
Description:
|
144
|
-
Clones an existing AsciiBinder repo to the current directory.
|
145
|
-
Under the default behavior, AsciiBinder will attempt to set up
|
146
|
-
tracking branches based on the contents of _distro_map.yml,
|
147
|
-
but this can be suppressed (see Options).
|
148
|
-
|
149
|
-
Options:
|
150
|
-
EOF
|
151
|
-
opt :branches, "Create tracking branches after cloning.", :default => true
|
152
|
-
opt :dir, "Specify the pathname of the local directory for cloning.", :default => ''
|
153
|
-
end
|
154
|
-
when "watch"
|
155
|
-
Trollop::options do
|
156
|
-
banner <<-EOF
|
157
|
-
Usage:
|
158
|
-
#$0 watch <repo_dir>
|
159
|
-
|
160
|
-
Description:
|
161
|
-
In watch mode, AsciiBinder starts a Guard process in the foreground.
|
162
|
-
This process watches the repo_dir for changes to the AsciiDoc (.adoc)
|
163
|
-
files. When a change occurs, AsciiBinder regenerates the specific
|
164
|
-
HTML output of the file that was changed, for the working branch only.
|
165
|
-
|
166
|
-
This is the equivalent of running:
|
167
|
-
|
168
|
-
$ asciibinder build --page='<topic_group>:<affected_file>'
|
169
|
-
|
170
|
-
...except that the Guardfile automatically detects and runs this as
|
171
|
-
you work.
|
172
|
-
|
173
|
-
This is meant to be used in conjunction with a web browser that is
|
174
|
-
running a LiveReload plugin. If you are viewing the output HTML page
|
175
|
-
in a browser where LiveReload is active, then every time you save a
|
176
|
-
new version of the .adoc file, the new HTML is automatically
|
177
|
-
regenerated and your page view is automatically refreshed.
|
178
|
-
EOF
|
179
|
-
end
|
180
|
-
when "package"
|
181
|
-
Trollop::options do
|
182
|
-
banner <<-EOF
|
183
|
-
Usage:
|
184
|
-
#$0 package <options> <repo_dir>
|
185
|
-
|
186
|
-
Description:
|
187
|
-
Publish mode is similar to 'build' mode, but once all of the branches' of
|
188
|
-
HTML are generated, 'publish' goes on to organize the branch / distro
|
189
|
-
combinations that are described in _distro_config.yml into their "site"
|
190
|
-
layouts. As a final step, the site layouts are tarred and gzipped for
|
191
|
-
easy placement onto a production web server.
|
192
|
-
|
193
|
-
Options:
|
194
|
-
EOF
|
195
|
-
opt :site, "Instead of packaging every docs site, package the specified site only.", :default => ''
|
196
|
-
end
|
197
|
-
when "help"
|
198
|
-
Trollop::educate
|
199
|
-
when "version"
|
200
|
-
puts AsciiBinder::VERSION
|
201
|
-
exit 0
|
202
|
-
end
|
203
|
-
|
204
|
-
if (not repo_dir.nil? and not ARGV.empty?) or (repo_dir.nil? and ARGV.length > 1)
|
205
|
-
Trollop::die "Too many arguments provided to ascii_binder: '#{ARGV.join(' ')}'. Exiting."
|
206
|
-
elsif repo_dir.nil?
|
207
|
-
if ARGV.length == 1
|
208
|
-
if cmd == 'clone'
|
209
|
-
cmd_opts[:giturl] = ARGV.shift
|
210
|
-
if cmd_opts[:dir] != ''
|
211
|
-
repo_dir = Pathname.new(cmd_opts[:dir])
|
212
|
-
else
|
213
|
-
repo_dir = Pathname.new(File.join(Pathname.pwd, cmd_opts[:giturl].split('/')[-1].split('.')[0]))
|
214
|
-
end
|
215
|
-
else
|
216
|
-
repo_dir = Pathname.new(ARGV.shift)
|
217
|
-
end
|
218
|
-
else
|
219
|
-
if cmd != 'create'
|
220
|
-
if cmd == 'clone'
|
221
|
-
Trollop::die "Provide a git URL to clone from."
|
222
|
-
else
|
223
|
-
repo_dir = Pathname.pwd
|
224
|
-
end
|
225
|
-
else
|
226
|
-
Trollop::die "Specify a name for the new repo directory."
|
227
|
-
end
|
228
|
-
end
|
229
|
-
end
|
230
|
-
|
231
|
-
# Validate the repo_dir path
|
232
|
-
if cmd == 'create' or cmd == 'clone'
|
233
|
-
if repo_dir.exist?
|
234
|
-
Trollop::die "The specified new repo directory '#{repo_dir}' already exists."
|
235
|
-
end
|
236
|
-
else
|
237
|
-
if !repo_dir.exist?
|
238
|
-
Trollop::die "The specified repo directory '#{repo_dir}' does not exist."
|
239
|
-
elsif !repo_dir.directory?
|
240
|
-
Trollop::die "The specified repo directory path '#{repo_dir}' is not a directory."
|
241
|
-
elsif !repo_dir.readable?
|
242
|
-
Trollop::die "The specified repo directory '#{repo_dir}' is not readable."
|
243
|
-
elsif !repo_dir.writable?
|
244
|
-
Trollop::die "The specified repo directory '#{repo_dir}' cannot be written to."
|
245
|
-
else
|
246
|
-
repo_check(repo_dir)
|
247
|
-
end
|
248
|
-
end
|
249
|
-
|
250
|
-
# Set the repo root
|
251
|
-
set_source_dir(File.expand_path(repo_dir))
|
252
|
-
|
253
|
-
# Cloning? Time to try it.
|
254
|
-
if cmd == 'clone'
|
255
|
-
puts "Cloning #{cmd_opts[:giturl]} to #{repo_dir}"
|
256
|
-
system("git clone #{cmd_opts[:giturl]} #{repo_dir}")
|
257
|
-
Trollop::die "The git URL could not be cloned: #{err}" if $?.exitstatus != 0
|
258
|
-
|
259
|
-
# Make sure this cloned repo is legit.
|
260
|
-
repo_check(repo_dir)
|
261
|
-
|
262
|
-
if cmd_opts[:branches]
|
263
|
-
Dir.chdir(repo_dir)
|
264
|
-
puts "Tracking branch setup:"
|
265
|
-
distro_branches.each do |doc_branch|
|
266
|
-
next if doc_branch == 'master'
|
267
|
-
puts "- #{doc_branch}"
|
268
|
-
system("git branch #{doc_branch} origin/#{doc_branch}")
|
269
|
-
end
|
270
|
-
else
|
271
|
-
puts "- Skipping tracking branch setup"
|
272
|
-
end
|
273
|
-
|
274
|
-
# Done and done.
|
275
|
-
puts "Cloning complete."
|
276
|
-
exit
|
277
|
-
end
|
278
|
-
|
279
|
-
# Change to the repo dir. This is necessary in order for
|
280
|
-
# AsciiDoctor to work properly.
|
281
|
-
if cmd != 'create'
|
282
|
-
Dir.chdir source_dir
|
283
|
-
end
|
284
|
-
|
285
|
-
# Do the things with the stuff
|
286
|
-
case cmd
|
287
|
-
when "build"
|
288
|
-
branch_group = cmd_opts[:all_branches] ? :all : :working_only
|
289
|
-
build_distro = cmd_opts[:distro] || ''
|
290
|
-
refresh_page = cmd_opts[:page] || nil
|
291
|
-
call_generate(branch_group,build_distro,refresh_page)
|
292
|
-
when "package"
|
293
|
-
clean_up
|
294
|
-
call_generate(:publish,'',nil)
|
295
|
-
package_site = cmd_opts[:site] || ''
|
296
|
-
package_docs(package_site)
|
297
|
-
when "watch"
|
298
|
-
if !dir_empty?(preview_dir)
|
299
|
-
guardfile_path = File.join(Gem::Specification.find_by_name("ascii_binder").full_gem_path, 'Guardfile')
|
300
|
-
exec("guard -G #{guardfile_path}")
|
301
|
-
else
|
302
|
-
Trollop::die "Run 'asciibinder build' at least once before running 'asciibinder watch'."
|
303
|
-
end
|
304
|
-
when "clean"
|
305
|
-
clean_up
|
306
|
-
puts "Cleaned up #{repo_dir}."
|
307
|
-
when "create"
|
308
|
-
create_new_repo
|
309
|
-
puts "Created new repo in #{repo_dir}."
|
310
|
-
end
|
311
|
-
|
312
|
-
exit
|