ascii_binder 0.1.9 → 0.1.10
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +16 -0
- data/ascii_binder.gemspec +5 -3
- data/bin/asciibinder +53 -44
- data/features/command_help.feature +8 -0
- data/features/command_version.feature +8 -0
- data/features/repo_build.feature +34 -0
- data/features/repo_clean.feature +20 -0
- data/features/repo_clone.feature +22 -0
- data/features/repo_create.feature +13 -0
- data/features/repo_package.feature +15 -0
- data/features/step_definitions/steps.rb +182 -0
- data/features/support/_clone_distro_map.yml +14 -0
- data/features/support/_invalid_distro_map.yml +14 -0
- data/features/support/env.rb +468 -0
- data/features/support/test_distro/.gitignore +9 -0
- data/features/support/test_distro/_distro_map.yml +29 -0
- data/features/support/test_distro/_images/asciibinder-logo-horizontal.png +0 -0
- data/features/support/test_distro/_images/asciibinder_web_logo.svg +125 -0
- data/features/support/test_distro/_images/book_pages_bg.jpg +0 -0
- data/features/support/test_distro/_images/favicon.ico +0 -0
- data/features/support/test_distro/_images/favicon32x32.png +0 -0
- data/features/support/test_distro/_javascripts/.gitkeep +0 -0
- data/features/support/test_distro/_stylesheets/asciibinder.css +568 -0
- data/features/support/test_distro/_templates/_css.html.erb +3 -0
- data/features/support/test_distro/_templates/_nav.html.erb +31 -0
- data/features/support/test_distro/_templates/page.html.erb +92 -0
- data/features/support/test_distro/_topic_map.yml +36 -0
- data/features/support/test_distro/index-main.html +10 -0
- data/features/support/test_distro/index-test.html +10 -0
- data/features/support/test_distro/main_only_topic_group/index.adoc +17 -0
- data/features/support/test_distro/test_only_topic_group/index.adoc +17 -0
- data/features/support/test_distro/welcome/index.adoc +17 -0
- data/features/support/test_distro/welcome/subtopics/index.adoc +17 -0
- data/features/support/test_distro/welcome/subtopics/main_only_topic.adoc +17 -0
- data/features/support/test_distro/welcome/subtopics/test_only_topic.adoc +17 -0
- data/features/support/test_distro/welcome/subtopics/wildcard_all.adoc +17 -0
- data/lib/ascii_binder.rb +4 -2
- data/lib/ascii_binder/distro.rb +111 -0
- data/lib/ascii_binder/distro_branch.rb +93 -0
- data/lib/ascii_binder/distro_map.rb +67 -0
- data/lib/ascii_binder/engine.rb +581 -0
- data/lib/ascii_binder/helpers.rb +42 -856
- data/lib/ascii_binder/site.rb +52 -0
- data/lib/ascii_binder/site_info.rb +22 -0
- data/lib/ascii_binder/site_map.rb +24 -0
- data/lib/ascii_binder/topic_entity.rb +255 -0
- data/lib/ascii_binder/topic_map.rb +61 -0
- data/lib/ascii_binder/version.rb +1 -1
- data/templates/_templates/page.html.erb +1 -1
- metadata +118 -14
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6157f325397b76b4332f318aba16ada7f930093c
|
4
|
+
data.tar.gz: c0b13db6c9254db35c9d2b64a56755a88f929499
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5709a933e576d0d1f7e4beb5a26ae35d54a70798b2bce6630382925387352fbd81b2fdb2ba084f54255e81f6a31bf2ce7bbf0a22f3da7f294489f73fa21c6c76
|
7
|
+
data.tar.gz: 7660ad1cf7c7d8df27a7a1c9da6dae59a87f6d130b09d9085c9a3e334d5f89a2ddf26b5831d1c297c361f03beda0c624f27db908a1630849b14ae5af82846c00
|
data/.travis.yml
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
language: ruby
|
2
|
+
sudo: false
|
3
|
+
cache: bundler
|
4
|
+
rvm:
|
5
|
+
- 2.3.3
|
6
|
+
after_install: gem list
|
7
|
+
script:
|
8
|
+
- git config --global user.name "Travis Test"
|
9
|
+
- git config --global user.email "travis@mailinator.com"
|
10
|
+
- bundle exec cucumber
|
11
|
+
notifications:
|
12
|
+
irc:
|
13
|
+
channels:
|
14
|
+
- "irc.freenode.org#asciibinder"
|
15
|
+
on_success: change
|
16
|
+
on_failure: always
|
data/ascii_binder.gemspec
CHANGED
@@ -19,10 +19,12 @@ Gem::Specification.new do |spec|
|
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
21
|
spec.add_development_dependency "bundler", "~> 1.7"
|
22
|
+
spec.add_development_dependency "cucumber", "~> 2.3.3"
|
23
|
+
spec.add_development_dependency "diff_dirs", "~> 0.1.2"
|
22
24
|
spec.add_dependency "rake", "~> 10.0"
|
23
25
|
|
24
|
-
spec.add_dependency 'asciidoctor', '~> 1.5.
|
25
|
-
spec.add_dependency 'asciidoctor-diagram'
|
26
|
+
spec.add_dependency 'asciidoctor', '~> 1.5.6'
|
27
|
+
spec.add_dependency 'asciidoctor-diagram', '~> 1.5.5'
|
26
28
|
spec.add_dependency 'git'
|
27
29
|
spec.add_dependency 'guard'
|
28
30
|
spec.add_dependency 'guard-shell'
|
@@ -32,6 +34,6 @@ Gem::Specification.new do |spec|
|
|
32
34
|
spec.add_dependency 'pandoc-ruby'
|
33
35
|
spec.add_dependency 'sitemap_generator', '~> 5.1.0'
|
34
36
|
spec.add_dependency 'trollop', '~> 2.1.2'
|
35
|
-
spec.add_dependency 'yajl-ruby'
|
37
|
+
spec.add_dependency 'yajl-ruby', '~> 1.3.0'
|
36
38
|
spec.add_dependency 'tilt'
|
37
39
|
end
|
data/bin/asciibinder
CHANGED
@@ -1,10 +1,12 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
+
require 'ascii_binder/engine'
|
3
4
|
require 'ascii_binder/helpers'
|
4
5
|
require 'ascii_binder/version'
|
5
6
|
require 'pathname'
|
6
7
|
require 'trollop'
|
7
8
|
|
9
|
+
include AsciiBinder::Engine
|
8
10
|
include AsciiBinder::Helpers
|
9
11
|
|
10
12
|
def call_generate(branch_group, distro, page)
|
@@ -19,40 +21,47 @@ def call_generate(branch_group, distro, page)
|
|
19
21
|
end
|
20
22
|
end
|
21
23
|
|
22
|
-
def repo_check(
|
24
|
+
def repo_check(docs_basedir)
|
23
25
|
missing_files = false
|
24
26
|
# These must all be present
|
25
|
-
['
|
26
|
-
unless File.exist?(File.join(
|
27
|
+
['_distro_map.yml','_templates'].each do |file|
|
28
|
+
unless File.exist?(File.join(docs_basedir, file))
|
27
29
|
missing_files = true
|
28
30
|
end
|
29
31
|
end
|
30
32
|
# Either of these must be present
|
31
|
-
unless File.exist?(File.join(
|
33
|
+
unless File.exist?(File.join(docs_basedir, '_build_cfg.yml')) or File.exist?(File.join(docs_basedir, '_topic_map.yml'))
|
32
34
|
missing_files = true
|
33
35
|
end
|
34
|
-
if missing_files
|
35
|
-
Trollop::die "The specified
|
36
|
+
if missing_files or not in_git_repo(docs_basedir)
|
37
|
+
Trollop::die "The specified docs base directory '#{docs_basedir}' does not appear to be part of an AsciiBinder-compatible repo."
|
36
38
|
end
|
37
39
|
end
|
38
40
|
|
41
|
+
def in_git_repo(dir)
|
42
|
+
git_path = File.join(dir,'.git')
|
43
|
+
return true if File.exist?(git_path) and File.directory?(git_path)
|
44
|
+
return false if dir == '/'
|
45
|
+
in_git_repo(File.expand_path('..',dir))
|
46
|
+
end
|
47
|
+
|
39
48
|
SUB_COMMANDS = %w{help version build watch package clean create clone}
|
40
49
|
Trollop::options do
|
41
50
|
version AsciiBinder::VERSION
|
42
51
|
banner <<-EOF
|
43
52
|
Usage:
|
44
|
-
#$0 <command> <
|
53
|
+
#$0 <command> <docs_basedir>
|
45
54
|
|
46
55
|
Commands:
|
47
56
|
build (default action)
|
48
|
-
Builds the HTML docs
|
57
|
+
Builds the HTML docs within the indicated docs base directory
|
49
58
|
create
|
50
59
|
Generates a new AsciiBinder repo at the indicated dir
|
51
60
|
clone
|
52
61
|
Clones an existing AsciiBinder repo to the local filesystem
|
53
62
|
watch
|
54
63
|
Starts Guard, which automatically regenerates changed HTML
|
55
|
-
files on the working branch in the
|
64
|
+
files on the working branch in the docs base directory dir
|
56
65
|
package
|
57
66
|
Builds and packages the static HTML for all of the sites
|
58
67
|
defined in the _distro_config.yml file
|
@@ -66,13 +75,13 @@ EOF
|
|
66
75
|
end
|
67
76
|
|
68
77
|
cmd = ARGV.shift
|
69
|
-
|
78
|
+
docs_basedir = nil
|
70
79
|
|
71
80
|
if cmd.nil?
|
72
81
|
cmd = "build"
|
73
82
|
elsif !SUB_COMMANDS.include?(cmd)
|
74
83
|
if ARGV.empty?
|
75
|
-
|
84
|
+
docs_basedir = Pathname.new(cmd)
|
76
85
|
cmd = "build"
|
77
86
|
else
|
78
87
|
Trollop::die "'#{cmd}' is not a valid asciibinder subcommand. Legal values are '#{SUB_COMMANDS.join('\', \'')}'."
|
@@ -84,13 +93,13 @@ cmd_opts = case cmd
|
|
84
93
|
Trollop::options do
|
85
94
|
banner <<-EOF
|
86
95
|
Usage:
|
87
|
-
#$0 build <options> <
|
96
|
+
#$0 build <options> <docs_basedir>
|
88
97
|
|
89
98
|
Description:
|
90
99
|
This is the default behavior for the asciibinder utility. When run,
|
91
100
|
AsciiBinder reads the _distro_config.yml file out of the working
|
92
|
-
branch of the indicated
|
93
|
-
build the working branch version of the documentation for each distro.
|
101
|
+
branch of the indicated docs base directory and based on that, proceeds
|
102
|
+
to build the working branch version of the documentation for each distro.
|
94
103
|
|
95
104
|
If you use the --all_branches flag, AsciiBinder behaves as described
|
96
105
|
above, and then once the working branch version is built, AsciiBinder
|
@@ -128,7 +137,7 @@ EOF
|
|
128
137
|
Trollop::options do
|
129
138
|
banner <<-EOF
|
130
139
|
Usage:
|
131
|
-
#$0 create <
|
140
|
+
#$0 create <new_docs_basedir>
|
132
141
|
|
133
142
|
Description:
|
134
143
|
Creates a new, bare AsciiBinder repo in the specified directory.
|
@@ -155,11 +164,11 @@ EOF
|
|
155
164
|
Trollop::options do
|
156
165
|
banner <<-EOF
|
157
166
|
Usage:
|
158
|
-
#$0 watch <
|
167
|
+
#$0 watch <docs_basedir>
|
159
168
|
|
160
169
|
Description:
|
161
170
|
In watch mode, AsciiBinder starts a Guard process in the foreground.
|
162
|
-
This process watches the
|
171
|
+
This process watches the docs_basedir for changes to the AsciiDoc (.adoc)
|
163
172
|
files. When a change occurs, AsciiBinder regenerates the specific
|
164
173
|
HTML output of the file that was changed, for the working branch only.
|
165
174
|
|
@@ -181,7 +190,7 @@ EOF
|
|
181
190
|
Trollop::options do
|
182
191
|
banner <<-EOF
|
183
192
|
Usage:
|
184
|
-
#$0 package <options> <
|
193
|
+
#$0 package <options> <docs_basedir>
|
185
194
|
|
186
195
|
Description:
|
187
196
|
Publish mode is similar to 'build' mode, but once all of the branches' of
|
@@ -201,26 +210,26 @@ EOF
|
|
201
210
|
exit 0
|
202
211
|
end
|
203
212
|
|
204
|
-
if (not
|
213
|
+
if (not docs_basedir.nil? and not ARGV.empty?) or (docs_basedir.nil? and ARGV.length > 1)
|
205
214
|
Trollop::die "Too many arguments provided to ascii_binder: '#{ARGV.join(' ')}'. Exiting."
|
206
|
-
elsif
|
215
|
+
elsif docs_basedir.nil?
|
207
216
|
if ARGV.length == 1
|
208
217
|
if cmd == 'clone'
|
209
218
|
cmd_opts[:giturl] = ARGV.shift
|
210
219
|
if cmd_opts[:dir] != ''
|
211
|
-
|
220
|
+
docs_basedir = Pathname.new(cmd_opts[:dir])
|
212
221
|
else
|
213
|
-
|
222
|
+
docs_basedir = Pathname.new(File.join(Pathname.pwd, cmd_opts[:giturl].split('/')[-1].split('.')[0]))
|
214
223
|
end
|
215
224
|
else
|
216
|
-
|
225
|
+
docs_basedir = Pathname.new(ARGV.shift)
|
217
226
|
end
|
218
227
|
else
|
219
228
|
if cmd != 'create'
|
220
229
|
if cmd == 'clone'
|
221
230
|
Trollop::die "Provide a git URL to clone from."
|
222
231
|
else
|
223
|
-
|
232
|
+
docs_basedir = Pathname.pwd
|
224
233
|
end
|
225
234
|
else
|
226
235
|
Trollop::die "Specify a name for the new repo directory."
|
@@ -228,39 +237,39 @@ elsif repo_dir.nil?
|
|
228
237
|
end
|
229
238
|
end
|
230
239
|
|
231
|
-
# Validate the
|
240
|
+
# Validate the docs_basedir path
|
232
241
|
if cmd == 'create' or cmd == 'clone'
|
233
|
-
if
|
234
|
-
Trollop::die "The specified new repo directory '#{
|
242
|
+
if docs_basedir.exist?
|
243
|
+
Trollop::die "The specified new repo directory '#{docs_basedir}' already exists."
|
235
244
|
end
|
236
245
|
else
|
237
|
-
if !
|
238
|
-
Trollop::die "The specified
|
239
|
-
elsif !
|
240
|
-
Trollop::die "The specified
|
241
|
-
elsif !
|
242
|
-
Trollop::die "The specified
|
243
|
-
elsif !
|
244
|
-
Trollop::die "The specified
|
246
|
+
if !docs_basedir.exist?
|
247
|
+
Trollop::die "The specified docs directory '#{docs_basedir}' does not exist."
|
248
|
+
elsif !docs_basedir.directory?
|
249
|
+
Trollop::die "The specified docs directory path '#{docs_basedir}' is not a directory."
|
250
|
+
elsif !docs_basedir.readable?
|
251
|
+
Trollop::die "The specified docs directory '#{docs_basedir}' is not readable."
|
252
|
+
elsif !docs_basedir.writable?
|
253
|
+
Trollop::die "The specified docs directory '#{docs_basedir}' cannot be written to."
|
245
254
|
else
|
246
|
-
repo_check(
|
255
|
+
repo_check(docs_basedir)
|
247
256
|
end
|
248
257
|
end
|
249
258
|
|
250
259
|
# Set the repo root
|
251
|
-
|
260
|
+
set_docs_root_dir(File.expand_path(docs_basedir))
|
252
261
|
|
253
262
|
# Cloning? Time to try it.
|
254
263
|
if cmd == 'clone'
|
255
|
-
puts "Cloning #{cmd_opts[:giturl]} to #{
|
256
|
-
system("git clone #{cmd_opts[:giturl]} #{
|
264
|
+
puts "Cloning #{cmd_opts[:giturl]} to #{docs_basedir}"
|
265
|
+
system("git clone #{cmd_opts[:giturl]} #{docs_basedir}")
|
257
266
|
Trollop::die "The git URL could not be cloned: #{err}" if $?.exitstatus != 0
|
258
267
|
|
259
268
|
# Make sure this cloned repo is legit.
|
260
|
-
repo_check(
|
269
|
+
repo_check(docs_basedir)
|
261
270
|
|
262
271
|
if cmd_opts[:branches]
|
263
|
-
Dir.chdir(
|
272
|
+
Dir.chdir(docs_basedir)
|
264
273
|
puts "Tracking branch setup:"
|
265
274
|
distro_branches.each do |doc_branch|
|
266
275
|
next if doc_branch == 'master'
|
@@ -279,7 +288,7 @@ end
|
|
279
288
|
# Change to the repo dir. This is necessary in order for
|
280
289
|
# AsciiDoctor to work properly.
|
281
290
|
if cmd != 'create'
|
282
|
-
Dir.chdir
|
291
|
+
Dir.chdir docs_basedir
|
283
292
|
end
|
284
293
|
|
285
294
|
# Do the things with the stuff
|
@@ -304,10 +313,10 @@ when "watch"
|
|
304
313
|
end
|
305
314
|
when "clean"
|
306
315
|
clean_up
|
307
|
-
puts "Cleaned up #{
|
316
|
+
puts "Cleaned up #{docs_basedir}."
|
308
317
|
when "create"
|
309
318
|
create_new_repo
|
310
|
-
puts "Created new repo in #{
|
319
|
+
puts "Created new repo in #{docs_basedir}."
|
311
320
|
end
|
312
321
|
|
313
322
|
exit
|
@@ -0,0 +1,8 @@
|
|
1
|
+
Feature: asciibinder help
|
2
|
+
|
3
|
+
Displays help information for the asciibinder utility
|
4
|
+
|
5
|
+
Scenario: A user wants to see help information for the utility
|
6
|
+
Given a nonexistant repo directory
|
7
|
+
When the user runs `asciibinder help` on that repo directory
|
8
|
+
Then the program displays help information
|
@@ -0,0 +1,8 @@
|
|
1
|
+
Feature: asciibinder version
|
2
|
+
|
3
|
+
This command returns the version of the installed utility
|
4
|
+
|
5
|
+
Scenario: A user wants to display the version of the asciibinder utility
|
6
|
+
Given a nonexistant repo directory
|
7
|
+
When the user runs `asciibinder version` on that repo directory
|
8
|
+
Then the program prints the current version of the utility
|
@@ -0,0 +1,34 @@
|
|
1
|
+
Feature: asciibinder build
|
2
|
+
|
3
|
+
Causes the utility to process one or more distro/branch combinations,
|
4
|
+
transforming AsciiDoc files to a unified docs set in HTML
|
5
|
+
|
6
|
+
Scenario: A user wants to do any build in a repo with an invalid distro map
|
7
|
+
Given an invalid AsciiBinder docs repo due to a malformed distro map
|
8
|
+
When the user runs `asciibinder build` on that repo directory
|
9
|
+
Then the program exits with a warning
|
10
|
+
|
11
|
+
Scenario: A user wants to build all distros against the current repo branch
|
12
|
+
Given a valid AsciiBinder docs repo with multiple distros
|
13
|
+
When the user runs `asciibinder build` on that repo directory
|
14
|
+
Then the program generates preview content for all distros in the current branch
|
15
|
+
|
16
|
+
Scenario: A user wants to build a single distro against the current repo branch
|
17
|
+
Given a valid AsciiBinder docs repo with multiple distros
|
18
|
+
When the user runs `asciibinder build --distro=distro_test` on that repo directory
|
19
|
+
Then the program generates preview content for only the `distro_test` distro
|
20
|
+
|
21
|
+
Scenario: A user wants to build all distros against all relevant branches
|
22
|
+
Given a valid AsciiBinder docs repo with multiple distros
|
23
|
+
When the user runs `asciibinder build --all-branches` on that repo directory
|
24
|
+
Then the program generates preview content for all relevant distro/branch combos
|
25
|
+
|
26
|
+
Scenario: A user wants to build a specific page in the current branch
|
27
|
+
Given a valid AsciiBinder docs repo with multiple distros
|
28
|
+
When the user runs `asciibinder build --page=welcome:index` on that repo directory
|
29
|
+
Then the program generates preview content for the specified page in all distros
|
30
|
+
|
31
|
+
Scenario: A user wants to build from a repo where the docs root is not the repo root
|
32
|
+
Given a valid AsciiBinder docs repo where the docs root is not at the repo root
|
33
|
+
When the user runs `asciibinder build` on that docs root directory
|
34
|
+
Then the program generates preview content for all distros in the current branch
|
@@ -0,0 +1,20 @@
|
|
1
|
+
Feature: asciibinder clean
|
2
|
+
|
3
|
+
This command cleans up any files generated by AsciiBinder
|
4
|
+
|
5
|
+
Scenario: A user wants to clean a docs repo of generated content
|
6
|
+
Given a valid AsciiBinder docs repo
|
7
|
+
And the docs repo contains generated content
|
8
|
+
When the user runs `asciibinder clean` on that repo directory
|
9
|
+
Then the generated content is removed
|
10
|
+
|
11
|
+
Scenario: A user cleans a docs repo with no generated content
|
12
|
+
Given a valid AsciiBinder docs repo
|
13
|
+
And the docs repo contains no generated content
|
14
|
+
When the user runs `asciibinder clean` on that repo directory
|
15
|
+
Then the program exits without errors
|
16
|
+
|
17
|
+
Scenario: A user cleans a directory that is not a docs repo
|
18
|
+
Given an invalid AsciiBinder docs repo
|
19
|
+
When the user runs `asciibinder clean` on that repo directory
|
20
|
+
Then the program exits with a warning
|
@@ -0,0 +1,22 @@
|
|
1
|
+
Feature: asciibinder clone
|
2
|
+
|
3
|
+
This command clones a remote docs repo to a local directory and
|
4
|
+
sets up tracking branches for each branch listed in the distro map
|
5
|
+
|
6
|
+
Scenario: A user tries to clone a nonexistant remote repo
|
7
|
+
Given a nonexistant remote repo
|
8
|
+
And a nonexistant repo directory
|
9
|
+
When the user runs `asciibinder clone` on that repo directory
|
10
|
+
Then the program exits with a warning
|
11
|
+
|
12
|
+
Scenario: A user tries to clone a remote repo into an existing directory
|
13
|
+
Given an existing remote repo
|
14
|
+
And an existing repo directory
|
15
|
+
When the user runs `asciibinder clone` on that repo directory
|
16
|
+
Then the program exits with a warning
|
17
|
+
|
18
|
+
Scenario: A user tries to clone a remote repo into a nonexistant directory
|
19
|
+
Given an existing remote repo
|
20
|
+
And a nonexistant repo directory
|
21
|
+
When the user runs `asciibinder clone` on that repo directory
|
22
|
+
Then the program clones the remote repo into the local directory
|
@@ -0,0 +1,13 @@
|
|
1
|
+
Feature: asciibinder create
|
2
|
+
|
3
|
+
This command creates a new base docs repo to be managed by AsciiBinder
|
4
|
+
|
5
|
+
Scenario: A user tries to create a repo in an existing directory
|
6
|
+
Given an existing repo directory
|
7
|
+
When the user runs `asciibinder create` on that repo directory
|
8
|
+
Then the program exits with a warning
|
9
|
+
|
10
|
+
Scenario: A user tries to create a repo in a nonexistant directory
|
11
|
+
Given a nonexistant repo directory
|
12
|
+
When the user runs `asciibinder create` on that repo directory
|
13
|
+
Then the program generates a new base docs repo
|
@@ -0,0 +1,15 @@
|
|
1
|
+
Feature: asciibinder package
|
2
|
+
|
3
|
+
Causes the utility to run a `build` operation and then marshall
|
4
|
+
together all of the distro / branch combinations that will be
|
5
|
+
published into "sites". Each site has a distinct home page.
|
6
|
+
|
7
|
+
Scenario: A user wants to package all of the sites contained in their docs repo
|
8
|
+
Given a valid AsciiBinder docs repo with multiple distros
|
9
|
+
When the user runs `asciibinder package` on that repo directory
|
10
|
+
Then the program generates a site directory for each site in the distro map
|
11
|
+
|
12
|
+
Scenario: A user wants to package one of the sites contained in their docs repo
|
13
|
+
Given a valid AsciiBinder docs repo with multiple distros
|
14
|
+
When the user runs `asciibinder package --site=test` on that repo directory
|
15
|
+
Then the program generates a site directory for only the `test` site in the distro map
|
@@ -0,0 +1,182 @@
|
|
1
|
+
require 'ascii_binder/version'
|
2
|
+
require 'cucumber'
|
3
|
+
require 'fileutils'
|
4
|
+
require 'open3'
|
5
|
+
require 'diff_dirs'
|
6
|
+
|
7
|
+
Given(/^an existing repo directory$/) do
|
8
|
+
Dir.mkdir(working_dir)
|
9
|
+
end
|
10
|
+
|
11
|
+
Given(/^a nonexistant repo directory$/) do
|
12
|
+
working_dir
|
13
|
+
end
|
14
|
+
|
15
|
+
Given(/^a valid AsciiBinder docs repo(.*)$/) do |repo_condition|
|
16
|
+
multiple_distros = false
|
17
|
+
offset_docs_root = false
|
18
|
+
if repo_condition == ' with multiple distros'
|
19
|
+
multiple_distros = true
|
20
|
+
elsif repo_condition == ' where the docs root is not at the repo root'
|
21
|
+
multiple_distros = true
|
22
|
+
offset_docs_root = true
|
23
|
+
end
|
24
|
+
initialize_test_repo(true,multiple_distros,offset_docs_root)
|
25
|
+
end
|
26
|
+
|
27
|
+
Given(/^an invalid AsciiBinder docs repo(.*)$/) do |invalid_condition|
|
28
|
+
if invalid_condition == ' due to a malformed distro map'
|
29
|
+
initialize_test_repo(true,true)
|
30
|
+
invalidate_distro_map
|
31
|
+
else
|
32
|
+
initialize_test_repo(false)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
Given(/^the docs repo contains generated content$/) do
|
37
|
+
output = run_command('package')
|
38
|
+
has_error = false
|
39
|
+
[preview_dir,package_dir].each do |subdir|
|
40
|
+
unless Dir.exist?(subdir)
|
41
|
+
puts "ERROR: expected directory '#{subdir}' was not created."
|
42
|
+
has_error = true
|
43
|
+
end
|
44
|
+
unless Dir.entries(subdir).select{ |item| not ['.','..'].include?(item) }.length > 0
|
45
|
+
puts "ERROR: directory '#{subdir}' is empty."
|
46
|
+
has_error = true
|
47
|
+
end
|
48
|
+
end
|
49
|
+
if has_error
|
50
|
+
print_output(output)
|
51
|
+
exit 1
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
Given(/^the docs repo contains no generated content$/) do
|
56
|
+
[preview_dir,package_dir].each do |subdir|
|
57
|
+
next unless Dir.exist?(subdir)
|
58
|
+
FileUtils.rm_rf(subdir)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
Given(/^a nonexistant remote repo$/) do
|
63
|
+
@remote_repo_url = 'http://example.com/repo.git'
|
64
|
+
end
|
65
|
+
|
66
|
+
Given(/^an existing remote repo$/) do
|
67
|
+
# We're going to set up a local repo as a remote.
|
68
|
+
@remote_repo_dir = initialize_remote_repo
|
69
|
+
@remote_repo_url = "file://#{@remote_repo_dir}"
|
70
|
+
end
|
71
|
+
|
72
|
+
When(/^the user runs `asciibinder (.+)` on that (.+) directory$/) do |command_string,target_dir|
|
73
|
+
@command_args = command_string.split(' ')
|
74
|
+
run_dir = target_dir == 'docs root' ? File.join(working_dir,'docs') : working_dir
|
75
|
+
command = @command_args.shift
|
76
|
+
if command == 'clone'
|
77
|
+
@step_output = run_command(command,["-d #{working_dir}"],@remote_repo_url)
|
78
|
+
else
|
79
|
+
@step_output = run_command(command,@command_args,run_dir)
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
Then(/^the generated content is removed$/) do
|
84
|
+
has_error = false
|
85
|
+
[preview_dir,package_dir].each do |subdir|
|
86
|
+
unless Dir.exist?(subdir)
|
87
|
+
puts "ERROR: expected to find directory '#{subdir}' but didn't"
|
88
|
+
has_error = true
|
89
|
+
end
|
90
|
+
unless Dir.entries(subdir).select{ |item| not ['.','..'].include?(item) }.length == 0
|
91
|
+
puts "ERROR: expected directory '#{subdir}' to be empty"
|
92
|
+
has_error
|
93
|
+
end
|
94
|
+
end
|
95
|
+
if has_error
|
96
|
+
print_output(@step_output)
|
97
|
+
exit 1
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
Then(/^the program exits without errors$/) do
|
102
|
+
status_check(@step_output,'running `asciibinder clean`.')
|
103
|
+
end
|
104
|
+
|
105
|
+
Then(/^the program exits with a warning$/) do
|
106
|
+
if @step_output[:status].exitstatus == 0
|
107
|
+
puts "ERROR: testing `asciibinder clean`; expected an exit code other than 0."
|
108
|
+
print_output(@step_output)
|
109
|
+
exit 1
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
Then(/^the program clones the remote repo into the local directory$/) do
|
114
|
+
diffs = diff_dirs(@remote_repo_dir, working_dir)
|
115
|
+
non_git_diffs = diffs.select{ |entry| not entry[1].start_with?('.git') }
|
116
|
+
remote_branches = Git.open(@remote_repo_dir).branches.local.map{ |branch| branch.name }.sort
|
117
|
+
local_branches = Git.open(working_dir).branches.local.map{ |branch| branch.name }.sort
|
118
|
+
branch_matches = remote_branches & local_branches
|
119
|
+
unless branch_matches.length == local_branches.length and non_git_diffs.length == 0
|
120
|
+
puts "ERROR: cloned repo doesn't match remote repo."
|
121
|
+
exit 1
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
Then(/^the program generates a new base docs repo$/) do
|
126
|
+
diffs = diff_dirs(repo_template_dir, working_dir)
|
127
|
+
unless diffs.length == 1 and diffs[0][0] == :new and diffs[0][1] == '.git'
|
128
|
+
puts "ERROR: template repo copy produced differences - #{diffs.inspect}"
|
129
|
+
exit 1
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
Then(/^the program displays help information$/) do
|
134
|
+
status_check(@step_output,'`asciibinder help` command failed.')
|
135
|
+
unless @step_output[:stderr] == '' and @step_output[:stdout].start_with?('Usage:')
|
136
|
+
puts "ERROR: unexpected help output"
|
137
|
+
print_output(@step_output)
|
138
|
+
exit 1
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
Then(/^the program prints the current version of the utility$/) do
|
143
|
+
status_check(@step_output,'`asciibinder version` command failed.')
|
144
|
+
unless @step_output[:stderr] == '' and @step_output[:stdout].chomp == AsciiBinder::VERSION
|
145
|
+
puts "ERROR: unexpected help output"
|
146
|
+
print_output(@step_output)
|
147
|
+
exit 1
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
Then(/^the program generates preview content for (.+)$/) do |build_target|
|
152
|
+
status_check(@step_output,'`asciibinder build` command failed.')
|
153
|
+
case build_target
|
154
|
+
when 'all distros in the current branch'
|
155
|
+
build_check(:default)
|
156
|
+
when 'only the `distro_test` distro'
|
157
|
+
distro = @command_args.select{ |arg| arg.starts_with?('--distro=') }.map{ |arg| arg.split('=')[1] }[0]
|
158
|
+
build_check(:distro,distro)
|
159
|
+
when 'all relevant distro/branch combos'
|
160
|
+
build_check(:all_branches)
|
161
|
+
when 'the specified page in all distros'
|
162
|
+
page = @command_args.select{ |arg| arg.starts_with?('--page=') }.map{ |arg| arg.split('=')[1] }[0]
|
163
|
+
build_check(:page,page)
|
164
|
+
else
|
165
|
+
puts "ERROR: unrecognized test case '#{build_target}'"
|
166
|
+
exit 1
|
167
|
+
end
|
168
|
+
end
|
169
|
+
|
170
|
+
Then(/^the program generates a site directory for (.+) in the distro map$/) do |package_target|
|
171
|
+
status_check(@step_output,'`asciibinder package` command failed.')
|
172
|
+
case package_target
|
173
|
+
when 'each site'
|
174
|
+
package_check()
|
175
|
+
when 'only the `test` site'
|
176
|
+
site = @command_args.select{ |arg| arg.starts_with?('--site=') }.map{ |arg| arg.split('=')[1] }[0]
|
177
|
+
package_check(site)
|
178
|
+
else
|
179
|
+
puts "ERROR: unrecognized test case '#{build_target}'"
|
180
|
+
exit 1
|
181
|
+
end
|
182
|
+
end
|