ascii_binder 0.0.6 → 0.0.7

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9b9eb469c874a00d0bcd79d7101c79a4e071bb7f
4
- data.tar.gz: fd166c8b16a299abaa7fe093211936d546726734
3
+ metadata.gz: 24f0d4eedad5a44476a05c8b2dfe80341974779e
4
+ data.tar.gz: 8efa57a740e9c2f879f02f9e55abd63ea1985080
5
5
  SHA512:
6
- metadata.gz: 8e989f582dabbbe9d5be0625081061954775406394d165b73df3c0d3cbe990d42bd6c649921c66bab5c2ddcf0d93e2a0cc0df123561795cc62f4163186132893
7
- data.tar.gz: 1a2aa9d1aa7ec585bf2e7e3edc214d0ad5bce041b0b1ecfcdd55016847d78effb450cb83169d318eb6c59c299453b686020016775299e458dc273d3d1eb6b5d4
6
+ metadata.gz: b286233ac388b2ab379f46d0d0125d12c30260dd0692f2a199d8f9b4ddbe7ebea8ddacd8e803e27960981fe0116b4e89b3f172e880f5a27974ef36e6bbcf4928
7
+ data.tar.gz: b622ed29d46c457b40970660083b58ccf4d56c43201a113b392419c563d7857fb4b36a0853f9ee88e0461b64c97fa1054975564a19951d48a6b9bb37054a288c
data/.gitignore CHANGED
@@ -12,3 +12,5 @@
12
12
  *.o
13
13
  *.a
14
14
  mkmf.log
15
+ *.gem
16
+ *.swp
data/Guardfile ADDED
@@ -0,0 +1,3 @@
1
+ require 'ascii_binder'
2
+ gem_dir = Gem::Specification.find_by_name("ascii_binder").lib_dirs_glob
3
+ instance_eval(File.read(File.join(gem_dir, 'ascii_binder/tasks/guards.rb')))
data/ascii_binder.gemspec CHANGED
@@ -31,6 +31,7 @@ Gem::Specification.new do |spec|
31
31
  spec.add_dependency 'json'
32
32
  spec.add_dependency 'pandoc-ruby'
33
33
  spec.add_dependency 'sitemap_generator', '~> 5.1.0'
34
+ spec.add_dependency 'trollop', '~> 2.1.2'
34
35
  spec.add_dependency 'yajl-ruby'
35
36
  spec.add_dependency 'tilt'
36
37
  end
data/bin/asciibinder ADDED
@@ -0,0 +1,155 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'ascii_binder/helpers'
4
+ require 'pathname'
5
+ require 'trollop'
6
+
7
+
8
+ include AsciiBinder::Helpers
9
+
10
+ SUB_COMMANDS = %w{help build watch package clean}
11
+ Trollop::options do
12
+ banner <<-EOF
13
+ Usage:
14
+ #$0 <command> <repo_dir>
15
+
16
+ Commands:
17
+ build (default action)
18
+ Builds the HTML docs in the indicated repo dir
19
+ watch
20
+ Starts Guard, which automatically regenerates changed HTML
21
+ files on the working branch in the repo dir
22
+ package
23
+ Builds and packages the static HTML for all of the sites
24
+ defined in the _distro_config.yml file
25
+ clean
26
+ Remove _preview, _publish and _package dirs created by
27
+ other asciibinder operations.
28
+
29
+ Options:
30
+ EOF
31
+ stop_on SUB_COMMANDS
32
+ end
33
+
34
+ cmd = ARGV.shift
35
+ repo_dir = nil
36
+
37
+ if cmd.nil?
38
+ cmd = "build"
39
+ elsif not SUB_COMMANDS.include?(cmd)
40
+ if not ARGV.empty?
41
+ Trollop::die "'#{cmd}' is not a valid asciibinder command. Legal values are '#{SUB_COMMANDS.join('\', \'')}'."
42
+ else
43
+ repo_dir = Pathname.new(cmd)
44
+ cmd = "build"
45
+ end
46
+ end
47
+
48
+ cmd_opts = case cmd
49
+ when "build"
50
+ Trollop::options do
51
+ banner <<-EOF
52
+ Usage:
53
+ #$0 build <options> <repo_dir>
54
+
55
+ Description:
56
+ This is the default behavior for the asciibinder utility. When run,
57
+ asciibinder reads the _distro_config.yml file out of the working
58
+ branch of the indicated repo directory and based on that, proceeds to
59
+ build the working branch version of the documentation for each distro.
60
+
61
+ Once the working branch version is built, asciibinder cycles through
62
+ the other branches named in the _distro_config.yml file until all of
63
+ the permutations have been built.
64
+
65
+ Options:
66
+ EOF
67
+ opt :distro, "Instead of building all distros, build branches only for the specified distro.", :default => ''
68
+ end
69
+ #when "new"
70
+ # Trollop::options do
71
+ # opt :initialize, "Create a new AsciiBinder-ready git repo in the target directory.", :default => true
72
+ # end
73
+ when "watch"
74
+ Trollop::options do
75
+ banner <<-EOF
76
+ Usage:
77
+ #$0 watch <repo_dir>
78
+
79
+ Description:
80
+ In watch mode, asciibinder starts a Guard process in the foreground.
81
+ This process watches the repo_dir for changes to the AsciiDoc (.adoc)
82
+ files. When a change occurs, asciibinder regenerates the specific
83
+ HTML output of the file that was changed, for the working branch only.
84
+
85
+ This is meant to be used in conjunction with a web browser that is
86
+ running a LiveReload plugin. If you are viewing the output HTML page
87
+ in a browser where LiveReload is active, then every time you save a
88
+ new version of the .adoc file, the new HTML is automatically
89
+ regenrated and your page view is automatically refreshed.
90
+ EOF
91
+ end
92
+ when "package"
93
+ Trollop::options do
94
+ banner <<-EOF
95
+ Usage:
96
+ #$0 package <options> <repo_dir>
97
+
98
+ Description:
99
+ Publish mode is similar to 'build' mode, but once all of the branches' of
100
+ HTML are generated, 'publish' goes on to organize the branch / distro
101
+ combinations that are described in _distro_config.yml into their "site"
102
+ layouts. As a final step, the site layouts are tarred and gzipped for
103
+ easy placement onto a production web server.
104
+
105
+ Options:
106
+ EOF
107
+ opt :site, "Instead of packaging every docs site, package the specified site only.", :default => ''
108
+ end
109
+ when "help"
110
+ Trollop::educate
111
+ end
112
+
113
+ if (not repo_dir.nil? and not ARGV.empty?) or (repo_dir.nil? and ARGV.length > 1)
114
+ Trollop::die "Too many arguments provided to ascii_binder: '#{ARGV.join(' ')}'. Exiting."
115
+ elsif repo_dir.nil?
116
+ if ARGV.length == 1
117
+ repo_dir = Pathname.new(ARGV.shift)
118
+ else
119
+ repo_dir = Pathname.pwd
120
+ end
121
+ end
122
+
123
+ # Validate the repo_dir path
124
+ if not repo_dir.exist?
125
+ Trollop::die "The specified repo directory '#{repo_dir}' does not exist."
126
+ elsif not repo_dir.directory?
127
+ Trollop::die "The specified repo directory path '#{repo_dir}' is not a directory."
128
+ elsif not repo_dir.readable?
129
+ Trollop::die "The specified repo directory '#{repo_dir}' is not readable."
130
+ elsif not repo_dir.writable?
131
+ Trollop::die "The specified repo directory '#{repo_dir}' cannot be written to."
132
+ end
133
+
134
+ # Set the repo root
135
+ set_source_dir(File.expand_path(repo_dir))
136
+
137
+ # Do the things with the stuff
138
+ case cmd
139
+ when "build"
140
+ build_distro = cmd_opts[:build] || ''
141
+ generate_docs(build_distro)
142
+ when "package"
143
+ clean_up
144
+ generate_docs('')
145
+ package_site = cmd_opts[:site] || ''
146
+ package_docs(package_site)
147
+ when "watch"
148
+ guardfile_path = File.join(Gem::Specification.find_by_name("ascii_binder").full_gem_path, 'Guardfile')
149
+ exec("guard -G #{guardfile_path}")
150
+ when "clean"
151
+ clean_up
152
+ puts "Cleaned up #{repo_dir}."
153
+ end
154
+
155
+ exit
@@ -1,3 +1,4 @@
1
+ require 'ascii_binder/template_renderer'
1
2
  require 'asciidoctor'
2
3
  require 'asciidoctor/cli'
3
4
  require 'asciidoctor-diagram'
@@ -18,6 +19,10 @@ module AsciiBinder
18
19
  @source_dir ||= `git rev-parse --show-toplevel`.chomp
19
20
  end
20
21
 
22
+ def self.set_source_dir(source_dir)
23
+ @source_dir = source_dir
24
+ end
25
+
21
26
  def self.template_dir
22
27
  @template_dir ||= File.join(source_dir,'_templates')
23
28
  end
@@ -42,9 +47,7 @@ module AsciiBinder
42
47
  end
43
48
  end
44
49
 
45
- def_delegators self, :source_dir, :template_dir, :preview_dir, :package_dir
46
-
47
- TemplateRenderer.initialize_cache(template_dir)
50
+ def_delegators self, :source_dir, :set_source_dir, :template_dir, :preview_dir, :package_dir
48
51
 
49
52
  BUILD_FILENAME = '_build_cfg.yml'
50
53
  DISTRO_MAP_FILENAME = '_distro_map.yml'
@@ -70,17 +73,17 @@ module AsciiBinder
70
73
 
71
74
  def git_stash_all
72
75
  # See if there are any changes in need of stashing
73
- @stash_needed = `git status --porcelain` !~ /^\s*$/
76
+ @stash_needed = `cd #{source_dir} && git status --porcelain` !~ /^\s*$/
74
77
  if @stash_needed
75
78
  puts "\nNOTICE: Stashing uncommited changes and files in working branch."
76
- `git stash -u`
79
+ `cd #{source_dir} && git stash -u`
77
80
  end
78
81
  end
79
82
 
80
83
  def git_apply_and_drop
81
84
  return unless @stash_needed
82
85
  puts "\nNOTE: Re-applying uncommitted changes and files to working branch."
83
- if system("git stash pop")
86
+ if system("cd #{source_dir} && git stash pop")
84
87
  puts "NOTE: Stash application successful."
85
88
  else
86
89
  puts "ERROR: Could not apply stashed code. Run `git stash apply` manually."
@@ -184,7 +187,7 @@ module AsciiBinder
184
187
  args[:subtopic_shim] = '../'
185
188
  end
186
189
 
187
- TemplateRenderer.new.render("_templates/page.html.erb", args)
190
+ TemplateRenderer.new.render(File.expand_path("#{source_dir}/_templates/page.html.erb"), args)
188
191
  end
189
192
 
190
193
  def extract_breadcrumbs(args)
@@ -405,6 +408,9 @@ module AsciiBinder
405
408
  puts "Building all distributions."
406
409
  end
407
410
 
411
+ # Cache the page templates
412
+ TemplateRenderer.initialize_cache(template_dir)
413
+
408
414
  # First, notify the user of missing local branches
409
415
  missing_branches = []
410
416
  distro_branches(build_distro).sort.each do |dbranch|
@@ -432,6 +438,9 @@ module AsciiBinder
432
438
  end
433
439
  end
434
440
 
441
+ # Note the image files checked in to this branch.
442
+ branch_image_files = Find.find(source_dir).select{ |path| not path.nil? and (path =~ /.*\.png$/ or path =~ /.*\.png\.cache$/) }
443
+
435
444
  first_branch = single_page.nil?
436
445
 
437
446
  if local_branch =~ /^\(detached from .*\)/
@@ -477,13 +486,13 @@ module AsciiBinder
477
486
  system("mkdir -p #{branch_path}/images")
478
487
 
479
488
  # Copy stylesheets into preview area
480
- system("cp -r _stylesheets/*css #{branch_path}/stylesheets")
489
+ system("cp -r #{source_dir}/_stylesheets/*css #{branch_path}/stylesheets")
481
490
 
482
491
  # Copy javascripts into preview area
483
- system("cp -r _javascripts/*js #{branch_path}/javascripts")
492
+ system("cp -r #{source_dir}/_javascripts/*js #{branch_path}/javascripts")
484
493
 
485
494
  # Copy images into preview area
486
- system("cp -r _images/* #{branch_path}/images")
495
+ system("cp -r #{source_dir}/_images/* #{branch_path}/images")
487
496
 
488
497
  # Build the landing page
489
498
  navigation = nav_tree(distro,branch_build_config)
@@ -573,6 +582,15 @@ module AsciiBinder
573
582
  return
574
583
  end
575
584
 
585
+ # Remove DITAA-generated images
586
+ ditaa_image_files = Find.find(source_dir).select{ |path| not path.nil? and not (path =~ /_preview/ or path =~ /_package/) and (path =~ /.*\.png$/ or path =~ /.*\.png\.cache$/) and not branch_image_files.include?(path) }
587
+ if not ditaa_image_files.empty?
588
+ puts "\nRemoving ditaa-generated files from repo before changing branches."
589
+ ditaa_image_files.each do |dfile|
590
+ File.unlink(dfile)
591
+ end
592
+ end
593
+
576
594
  if local_branch == working_branch
577
595
  # We're moving away from the working branch, so save off changed files
578
596
  git_stash_all
@@ -652,6 +670,7 @@ module AsciiBinder
652
670
  :images_path => "../../#{dir_depth}#{branch_config["dir"]}/images/",
653
671
  :site_home_path => "../../#{dir_depth}index.html",
654
672
  :css => ['docs.css'],
673
+ :template_dir => template_dir,
655
674
  }
656
675
  full_file_text = page(page_args)
657
676
  File.write(tgt_file_path,full_file_text)
@@ -706,5 +725,11 @@ module AsciiBinder
706
725
  end
707
726
  end
708
727
  end
728
+
729
+ def clean_up
730
+ if not system("rm -rf #{source_dir}/_preview/* #{source_dir}/_package/*")
731
+ puts "Nothing to clean."
732
+ end
733
+ end
709
734
  end
710
735
  end
@@ -1,3 +1,3 @@
1
1
  module AsciiBinder
2
- VERSION = "0.0.6"
2
+ VERSION = "0.0.7"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ascii_binder
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - N. Harrison Ripps
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-08-27 00:00:00.000000000 Z
11
+ date: 2015-09-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -178,6 +178,20 @@ dependencies:
178
178
  - - "~>"
179
179
  - !ruby/object:Gem::Version
180
180
  version: 5.1.0
181
+ - !ruby/object:Gem::Dependency
182
+ name: trollop
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - "~>"
186
+ - !ruby/object:Gem::Version
187
+ version: 2.1.2
188
+ type: :runtime
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - "~>"
193
+ - !ruby/object:Gem::Version
194
+ version: 2.1.2
181
195
  - !ruby/object:Gem::Dependency
182
196
  name: yajl-ruby
183
197
  requirement: !ruby/object:Gem::Requirement
@@ -209,16 +223,19 @@ dependencies:
209
223
  description: Builder for multi product documention websites.
210
224
  email:
211
225
  - nhr@redhat.com
212
- executables: []
226
+ executables:
227
+ - asciibinder
213
228
  extensions: []
214
229
  extra_rdoc_files: []
215
230
  files:
216
231
  - ".gitignore"
217
232
  - Gemfile
233
+ - Guardfile
218
234
  - LICENSE.txt
219
235
  - README.adoc
220
236
  - Rakefile
221
237
  - ascii_binder.gemspec
238
+ - bin/asciibinder
222
239
  - lib/ascii_binder.rb
223
240
  - lib/ascii_binder/helpers.rb
224
241
  - lib/ascii_binder/tasks/guards.rb