bookbindery 8.5.0 → 9.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/bookbinder.gemspec +1 -1
  3. data/lib/bookbinder/cli.rb +36 -55
  4. data/lib/bookbinder/commands/bind.rb +3 -19
  5. data/lib/bookbinder/commands/collection.rb +33 -73
  6. data/lib/bookbinder/commands/components/command_options.rb +3 -22
  7. data/lib/bookbinder/commands/generate.rb +0 -11
  8. data/lib/bookbinder/commands/imprint.rb +3 -10
  9. data/lib/bookbinder/commands/punch.rb +0 -11
  10. data/lib/bookbinder/commands/update_local_doc_repos.rb +1 -9
  11. data/lib/bookbinder/commands/watch.rb +1 -10
  12. data/lib/bookbinder/config/fetcher.rb +2 -18
  13. data/lib/bookbinder/preprocessing/dita_html_preprocessor.rb +3 -6
  14. data/lib/bookbinder/preprocessing/dita_pdf_preprocessor.rb +3 -5
  15. data/lib/bookbinder/terminal.rb +0 -1
  16. metadata +3 -31
  17. data/lib/bookbinder/cf_command_runner.rb +0 -123
  18. data/lib/bookbinder/command_runner.rb +0 -23
  19. data/lib/bookbinder/command_validator.rb +0 -51
  20. data/lib/bookbinder/commands/build_and_push_tarball.rb +0 -38
  21. data/lib/bookbinder/commands/chain.rb +0 -11
  22. data/lib/bookbinder/commands/help.rb +0 -70
  23. data/lib/bookbinder/commands/naming.rb +0 -29
  24. data/lib/bookbinder/commands/push_from_local.rb +0 -132
  25. data/lib/bookbinder/commands/push_to_prod.rb +0 -66
  26. data/lib/bookbinder/commands/run_publish_ci.rb +0 -37
  27. data/lib/bookbinder/commands/version.rb +0 -29
  28. data/lib/bookbinder/config/aws_credentials.rb +0 -21
  29. data/lib/bookbinder/config/cf_credentials.rb +0 -62
  30. data/lib/bookbinder/config/remote_yaml_credential_provider.rb +0 -22
  31. data/lib/bookbinder/deploy/app_fetcher.rb +0 -36
  32. data/lib/bookbinder/deploy/archive.rb +0 -102
  33. data/lib/bookbinder/deploy/artifact.rb +0 -26
  34. data/lib/bookbinder/deploy/blue_green_app.rb +0 -29
  35. data/lib/bookbinder/deploy/cf_routes.rb +0 -32
  36. data/lib/bookbinder/deploy/deployment.rb +0 -55
  37. data/lib/bookbinder/deploy/distributor.rb +0 -76
  38. data/lib/bookbinder/deploy/failure.rb +0 -15
  39. data/lib/bookbinder/deploy/pusher.rb +0 -34
  40. data/lib/bookbinder/deploy/success.rb +0 -16
  41. data/lib/bookbinder/deprecated_logger.rb +0 -33
  42. data/lib/bookbinder/errors/cli_error.rb +0 -6
  43. data/lib/bookbinder/legacy/cli.rb +0 -71
  44. data/lib/bookbinder/preprocessing/dita_preprocessor.rb +0 -17
@@ -1,24 +1,13 @@
1
- require_relative '../errors/cli_error'
2
- require_relative 'naming'
3
-
4
1
  module Bookbinder
5
2
  module Commands
6
3
  class Punch
7
- include Commands::Naming
8
-
9
4
  def initialize(streams, configuration_fetcher, version_control_system)
10
5
  @streams = streams
11
6
  @configuration_fetcher = configuration_fetcher
12
7
  @version_control_system = version_control_system
13
8
  end
14
9
 
15
- def usage
16
- ["punch <git tag>", "Apply the specified <git tag> to your book, sections, and layout repo"]
17
- end
18
-
19
10
  def run((tag, *))
20
- raise CliError::InvalidArguments unless tag
21
-
22
11
  urls(config).each do |url|
23
12
  version_control_system.remote_tag(url, tag, 'HEAD')
24
13
  end
@@ -1,23 +1,15 @@
1
1
  require_relative '../ingest/destination_directory'
2
- require_relative 'naming'
3
2
 
4
3
  module Bookbinder
5
4
  module Commands
6
5
  class UpdateLocalDocRepos
7
- include Commands::Naming
8
-
9
6
  def initialize(streams, configuration_fetcher, version_control_system)
10
7
  @streams = streams
11
8
  @configuration_fetcher = configuration_fetcher
12
9
  @version_control_system = version_control_system
13
10
  end
14
11
 
15
- def usage
16
- [command_name,
17
- "Run `git pull` on all sections that exist at the same directory level as your book directory"]
18
- end
19
-
20
- def run(_)
12
+ def run
21
13
  urls = configuration_fetcher.fetch_config.sections.map(&:repo_url)
22
14
  paths(urls).each do |path|
23
15
  streams[:out] << "\nUpdating #{path}:"
@@ -1,10 +1,6 @@
1
- require_relative 'naming'
2
-
3
1
  module Bookbinder
4
2
  module Commands
5
3
  class Watch
6
- include Commands::Naming
7
-
8
4
  def initialize(streams,
9
5
  middleman_runner: nil,
10
6
  output_locations: nil,
@@ -27,12 +23,7 @@ module Bookbinder
27
23
  @directory_preparer = directory_preparer
28
24
  end
29
25
 
30
- def usage
31
- ["watch",
32
- "Bind and serve a local book, watching for changes"]
33
- end
34
-
35
- def run(_)
26
+ def run
36
27
  watch_config = config_fetcher.fetch_config
37
28
 
38
29
  directory_preparer.prepare_directories(
@@ -1,15 +1,12 @@
1
- require_relative 'aws_credentials'
2
- require_relative 'cf_credentials'
3
1
  require_relative 'configuration'
4
2
  require_relative 'yaml_loader'
5
3
 
6
4
  module Bookbinder
7
5
  module Config
8
6
  class Fetcher
9
- def initialize(configuration_validator, loader, credentials_provider, config_class)
7
+ def initialize(configuration_validator, loader, config_class)
10
8
  @loader = loader
11
9
  @configuration_validator = configuration_validator
12
- @credentials_provider = credentials_provider
13
10
  @config_class = config_class
14
11
  end
15
12
 
@@ -22,19 +19,6 @@ module Bookbinder
22
19
  @config ||= validate(@base_config, @optional_configs)
23
20
  end
24
21
 
25
- def fetch_credentials(environment = 'null-environment')
26
- @credentials ||= credentials_provider.credentials(fetch_config.cred_repo_url)
27
- {
28
- aws: Config::AwsCredentials.new(
29
- @credentials.fetch('aws', {})
30
- ),
31
- cloud_foundry: Config::CfCredentials.new(
32
- @credentials.fetch('cloud_foundry', {}),
33
- environment
34
- )
35
- }
36
- end
37
-
38
22
  def set_config_dir_path(config_dir_path)
39
23
  @config_dir_path = File.expand_path(config_dir_path)
40
24
  end
@@ -46,7 +30,7 @@ module Bookbinder
46
30
  private
47
31
 
48
32
  attr_reader(:loader, :configuration_validator, :config, :config_file_path, :config_dir_path,
49
- :credentials_provider, :config_class)
33
+ :config_class)
50
34
 
51
35
  def read_config_file
52
36
  loader.load(config_file_path)
@@ -1,10 +1,9 @@
1
1
  require_relative '../values/subnav_template'
2
2
  require_relative '../../../lib/bookbinder/subnav/json_from_html_toc'
3
- require_relative 'dita_preprocessor'
4
3
 
5
4
  module Bookbinder
6
5
  module Preprocessing
7
- class DitaHTMLPreprocessor < DitaPreprocessor
6
+ class DitaHTMLPreprocessor
8
7
  DitaToHtmlLibraryFailure = Class.new(RuntimeError)
9
8
 
10
9
  ACCEPTED_IMAGE_FORMATS = %w(png jpeg jpg svg gif bmp tif tiff eps)
@@ -21,16 +20,14 @@ module Bookbinder
21
20
  section.subnav_template.include?('dita_subnav') if section.subnav_template
22
21
  end
23
22
 
24
- def preprocess(sections, output_locations, options: [], output_streams: nil, **_)
23
+ def preprocess(sections, output_locations, options: {}, output_streams: nil, **_)
25
24
  @output_locations = output_locations
26
25
 
27
- dita_options = dita_flags(options)
28
-
29
26
  sections.each do |section|
30
27
  if section.path_to_preprocessor_attribute('ditamap_location')
31
28
  convert_dita_files(section,
32
29
  command_creator,
33
- dita_options,
30
+ options[:dita_flags],
34
31
  section_html_dir(section),
35
32
  sheller,
36
33
  output_streams)
@@ -1,8 +1,6 @@
1
- require_relative 'dita_preprocessor'
2
-
3
1
  module Bookbinder
4
2
  module Preprocessing
5
- class DitaPDFPreprocessor < DitaPreprocessor
3
+ class DitaPDFPreprocessor
6
4
  DitaToPDFLibraryFailure = Class.new(RuntimeError)
7
5
 
8
6
  def initialize(fs, command_creator, sheller)
@@ -15,11 +13,11 @@ module Bookbinder
15
13
  !!section.pdf_output_filename
16
14
  end
17
15
 
18
- def preprocess(sections, output_locations, options: [], output_streams: nil, **_)
16
+ def preprocess(sections, output_locations, options: {}, output_streams: nil, **_)
19
17
  sections.each do |section|
20
18
  command = command_creator.convert_to_pdf_command(
21
19
  section,
22
- dita_flags: dita_flags(options),
20
+ dita_flags: options[:dita_flags],
23
21
  write_to: output_locations.pdf_from_preprocessing_dir
24
22
  )
25
23
  status = sheller.run_command(command, output_streams.to_h)
@@ -1,4 +1,3 @@
1
- require_relative 'command_validator'
2
1
  require_relative 'colorizer'
3
2
 
4
3
  module Bookbinder
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bookbindery
3
3
  version: !ruby/object:Gem::Version
4
- version: 8.5.0
4
+ version: 9.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mike Grafton
@@ -22,7 +22,7 @@ authors:
22
22
  autorequire:
23
23
  bindir: install_bin
24
24
  cert_chain: []
25
- date: 2016-04-13 00:00:00.000000000 Z
25
+ date: 2016-04-14 00:00:00.000000000 Z
26
26
  dependencies:
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: fog-aws
@@ -314,33 +314,20 @@ extra_rdoc_files: []
314
314
  files:
315
315
  - bookbinder.gemspec
316
316
  - install_bin/bookbinder
317
- - lib/bookbinder/cf_command_runner.rb
318
317
  - lib/bookbinder/cli.rb
319
318
  - lib/bookbinder/code_example_reader.rb
320
319
  - lib/bookbinder/colorizer.rb
321
- - lib/bookbinder/command_runner.rb
322
- - lib/bookbinder/command_validator.rb
323
320
  - lib/bookbinder/commands/bind.rb
324
- - lib/bookbinder/commands/build_and_push_tarball.rb
325
- - lib/bookbinder/commands/chain.rb
326
321
  - lib/bookbinder/commands/collection.rb
327
322
  - lib/bookbinder/commands/components/bind/directory_preparer.rb
328
323
  - lib/bookbinder/commands/components/bind/layout_preparer.rb
329
324
  - lib/bookbinder/commands/components/command_options.rb
330
325
  - lib/bookbinder/commands/components/imprint/directory_preparer.rb
331
326
  - lib/bookbinder/commands/generate.rb
332
- - lib/bookbinder/commands/help.rb
333
327
  - lib/bookbinder/commands/imprint.rb
334
- - lib/bookbinder/commands/naming.rb
335
328
  - lib/bookbinder/commands/punch.rb
336
- - lib/bookbinder/commands/push_from_local.rb
337
- - lib/bookbinder/commands/push_to_prod.rb
338
- - lib/bookbinder/commands/run_publish_ci.rb
339
329
  - lib/bookbinder/commands/update_local_doc_repos.rb
340
- - lib/bookbinder/commands/version.rb
341
330
  - lib/bookbinder/commands/watch.rb
342
- - lib/bookbinder/config/aws_credentials.rb
343
- - lib/bookbinder/config/cf_credentials.rb
344
331
  - lib/bookbinder/config/checkers/archive_menu_checker.rb
345
332
  - lib/bookbinder/config/checkers/ditamap_presence_checker.rb
346
333
  - lib/bookbinder/config/checkers/duplicate_section_name_checker.rb
@@ -354,26 +341,13 @@ files:
354
341
  - lib/bookbinder/config/fetcher.rb
355
342
  - lib/bookbinder/config/imprint/configuration.rb
356
343
  - lib/bookbinder/config/product_config.rb
357
- - lib/bookbinder/config/remote_yaml_credential_provider.rb
358
344
  - lib/bookbinder/config/section_config.rb
359
345
  - lib/bookbinder/config/validator.rb
360
346
  - lib/bookbinder/config/yaml_loader.rb
361
347
  - lib/bookbinder/css_link_checker.rb
362
- - lib/bookbinder/deploy/app_fetcher.rb
363
- - lib/bookbinder/deploy/archive.rb
364
- - lib/bookbinder/deploy/artifact.rb
365
- - lib/bookbinder/deploy/blue_green_app.rb
366
- - lib/bookbinder/deploy/cf_routes.rb
367
- - lib/bookbinder/deploy/deployment.rb
368
- - lib/bookbinder/deploy/distributor.rb
369
- - lib/bookbinder/deploy/failure.rb
370
- - lib/bookbinder/deploy/pusher.rb
371
- - lib/bookbinder/deploy/success.rb
372
- - lib/bookbinder/deprecated_logger.rb
373
348
  - lib/bookbinder/directory_helpers.rb
374
349
  - lib/bookbinder/dita_command_creator.rb
375
350
  - lib/bookbinder/dita_html_for_middleman_formatter.rb
376
- - lib/bookbinder/errors/cli_error.rb
377
351
  - lib/bookbinder/errors/programmer_mistake.rb
378
352
  - lib/bookbinder/html_document_manipulator.rb
379
353
  - lib/bookbinder/ingest/cloner_factory.rb
@@ -387,13 +361,11 @@ files:
387
361
  - lib/bookbinder/ingest/update_failure.rb
388
362
  - lib/bookbinder/ingest/update_success.rb
389
363
  - lib/bookbinder/ingest/working_copy.rb
390
- - lib/bookbinder/legacy/cli.rb
391
364
  - lib/bookbinder/local_filesystem_accessor.rb
392
365
  - lib/bookbinder/middleman_runner.rb
393
366
  - lib/bookbinder/postprocessing/broken_links_checker.rb
394
367
  - lib/bookbinder/preprocessing/dita_html_preprocessor.rb
395
368
  - lib/bookbinder/preprocessing/dita_pdf_preprocessor.rb
396
- - lib/bookbinder/preprocessing/dita_preprocessor.rb
397
369
  - lib/bookbinder/preprocessing/link_to_site_gen_dir.rb
398
370
  - lib/bookbinder/preprocessing/preprocessor.rb
399
371
  - lib/bookbinder/server_director.rb
@@ -449,7 +421,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
449
421
  version: '0'
450
422
  requirements: []
451
423
  rubyforge_project:
452
- rubygems_version: 2.5.1
424
+ rubygems_version: 2.6.3
453
425
  signing_key:
454
426
  specification_version: 4
455
427
  summary: Markdown to Rackup application documentation generator
@@ -1,123 +0,0 @@
1
- require_relative 'deploy/blue_green_app'
2
-
3
- module Bookbinder
4
- class CfCommandRunner
5
- def initialize(streams, sheller, cf_credentials, trace_file)
6
- @streams = streams
7
- @sheller = sheller
8
- @creds = cf_credentials
9
- @trace_file = trace_file
10
- end
11
-
12
- def login
13
- username = creds.username
14
- password = creds.password
15
- api_endpoint = creds.api_endpoint
16
- organization = creds.organization
17
- space = creds.space
18
- creds_string = (username && password) ? "-u '#{username}' -p '#{password}'" : ''
19
-
20
- result = sheller.run_command(
21
- "#{cf_binary_path} login #{creds_string} -a '#{api_endpoint}' -o '#{organization}' -s '#{space}'",
22
- streams
23
- )
24
- raise "Could not log in to #{creds.api_endpoint}" unless result.success?
25
- end
26
-
27
- def cf_routes_output
28
- sheller.get_stdout("CF_COLOR=false #{cf_binary_path} routes").tap do |output|
29
- raise 'failure executing cf routes' if output == ''
30
- end
31
- end
32
-
33
- def new_app
34
- Deploy::BlueGreenApp.new([creds.app_name, 'blue'].join('-'))
35
- end
36
-
37
- def start(deploy_target_app)
38
- # Theoretically we shouldn't need this (and corresponding "stop" below), but we've seen CF pull files from both
39
- # green and blue when a DNS redirect points to HOST.cfapps.io
40
- # Also, shutting down the unused app saves $$
41
- sheller.run_command("#{cf_binary_path} start #{deploy_target_app}", streams)
42
- end
43
-
44
- def push(deploy_target_app)
45
- # Currently --no-routes is used to blow away all existing routes from a newly deployed app.
46
- # The routes will then be recreated from the creds repo.
47
- result = sheller.run_command(
48
- environment_variables,
49
- "#{cf_binary_path} push #{deploy_target_app} -b ruby_buildpack -s cflinuxfs2 --no-route -m 256M -i 3",
50
- streams
51
- )
52
- raise "Could not deploy app to #{deploy_target_app}" unless result.success?
53
- end
54
-
55
- def unmap_routes(app)
56
- creds.flat_routes.each do |domain, host|
57
- unmap_route(app, domain, host)
58
- end
59
- end
60
-
61
- def map_routes(app)
62
- succeeded = []
63
-
64
- creds.flat_routes.each do |domain, name|
65
- begin
66
- map_route(app, domain, name)
67
- succeeded << [app, domain, name]
68
- rescue RuntimeError
69
- succeeded.each { |app, domain, host| unmap_route(app, domain, host) }
70
- raise
71
- end
72
- end
73
- end
74
-
75
- def takedown_old_target_app(app)
76
- # Routers flush every 10 seconds (but not guaranteed), so wait a bit longer than that.
77
- streams[:out].puts "waiting 15 seconds for routes to remap...\n\n"
78
- (1..15).to_a.reverse.each do |seconds|
79
- streams[:out] << "\r\r#{seconds}... "
80
- Kernel.sleep 1
81
- end
82
- stop(app)
83
- unmap_routes(app)
84
- end
85
-
86
- private
87
-
88
- attr_reader :creds, :sheller, :streams
89
-
90
- def stop(app)
91
- result = sheller.run_command("#{cf_binary_path} stop #{app}", streams)
92
- raise "Failed to stop application #{app}" unless result.success?
93
- end
94
-
95
- def map_route(deploy_target_app, domain, host)
96
- map_route_command = "#{cf_binary_path} map-route #{deploy_target_app} #{domain}"
97
- map_route_command += " -n #{host}" unless host.empty?
98
-
99
- result = sheller.run_command(map_route_command, streams)
100
- raise "Deployed app to #{deploy_target_app} but failed to map hostname #{host}.#{domain} to it." unless result.success?
101
- end
102
-
103
- def unmap_route(deploy_target_app, domain, host)
104
- unmap_route_command = "#{cf_binary_path} unmap-route #{deploy_target_app} #{domain}"
105
- unmap_route_command += " -n #{host}" unless host.empty?
106
-
107
- result = sheller.run_command(unmap_route_command, streams)
108
- raise "Failed to unmap route #{host} on #{deploy_target_app}." unless result.success?
109
- end
110
-
111
- def cf_binary_path
112
- @cf_binary_path ||= sheller.get_stdout("which cf").tap do |path|
113
- if path == ''
114
- raise "CF CLI could not be found in your PATH. Please make sure cf cli is in your PATH."
115
- end
116
- end
117
- end
118
-
119
- def environment_variables
120
- {'CF_TRACE' => @trace_file}
121
- end
122
- end
123
- end
@@ -1,23 +0,0 @@
1
- require_relative 'errors/cli_error'
2
-
3
- module Bookbinder
4
- class CommandRunner
5
- def initialize(logger, commands)
6
- @logger = logger
7
- @commands = commands
8
- end
9
-
10
- def run(command_name, command_arguments)
11
- command = commands.detect { |known_command| known_command.command_for?(command_name) }
12
- command.run(command_arguments)
13
- rescue CliError::InvalidArguments
14
- logger.log ["bookbinder #{command.usage[0]}", command.usage[1]]
15
- 1
16
- end
17
-
18
- private
19
-
20
- attr_reader :logger, :commands
21
- end
22
- end
23
-
@@ -1,51 +0,0 @@
1
- require 'ostruct'
2
- require_relative 'errors/cli_error'
3
- require_relative 'commands/naming'
4
- require_relative 'values/user_message'
5
-
6
- module Bookbinder
7
- class CommandValidator
8
- def initialize(commands, usage_text)
9
- @commands = commands
10
- @usage_text = usage_text
11
- end
12
-
13
- def validate(command_name)
14
- candidate = Candidate.new(command_name, commands)
15
- if candidate.unrecognized?
16
- UserMessage.new(
17
- "Unrecognized #{candidate.command_type} '#{command_name}'\n#{usage_text}",
18
- EscalationType.error
19
- )
20
- elsif candidate.deprecated_match
21
- UserMessage.new(
22
- "Use of #{command_name} is deprecated. " +
23
- "The preferred usage is below: \nbookbinder #{candidate.deprecated_match.usage[0]}",
24
- EscalationType.warn
25
- )
26
- else
27
- UserMessage.new "Success", EscalationType.success
28
- end
29
- end
30
-
31
- Candidate = Struct.new(:command_name, :commands) do
32
- include Bookbinder::Commands::Naming
33
-
34
- def unrecognized?
35
- commands.none? { |command| command.command_for?(command_name) }
36
- end
37
-
38
- def deprecated_match
39
- @deprecated_match ||= commands.find { |command|
40
- command.respond_to?(:deprecated_command_for?) &&
41
- command.deprecated_command_for?(command_name)
42
- }
43
- end
44
- end
45
-
46
- private
47
-
48
- attr_reader :commands, :usage_text
49
- end
50
- end
51
-