bookbindery 1.0.3 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (55) hide show
  1. checksums.yaml +4 -4
  2. data/{bin → install_bin}/bookbinder +0 -0
  3. data/lib/bookbinder.rb +2 -9
  4. data/lib/bookbinder/archive.rb +1 -1
  5. data/lib/bookbinder/archive_menu_configuration.rb +34 -0
  6. data/lib/bookbinder/book.rb +17 -17
  7. data/lib/bookbinder/cli.rb +25 -36
  8. data/lib/bookbinder/code_example.rb +5 -38
  9. data/lib/bookbinder/code_example_reader.rb +40 -0
  10. data/lib/bookbinder/colorizer.rb +14 -0
  11. data/lib/bookbinder/command_runner.rb +9 -16
  12. data/lib/bookbinder/command_validator.rb +14 -7
  13. data/lib/bookbinder/commands/bind.rb +321 -0
  14. data/lib/bookbinder/commands/build_and_push_tarball.rb +7 -6
  15. data/lib/bookbinder/commands/chain.rb +11 -0
  16. data/lib/bookbinder/commands/generate_pdf.rb +4 -3
  17. data/lib/bookbinder/commands/help.rb +49 -10
  18. data/lib/bookbinder/commands/naming.rb +9 -1
  19. data/lib/bookbinder/commands/push_local_to_staging.rb +4 -3
  20. data/lib/bookbinder/commands/push_to_prod.rb +36 -4
  21. data/lib/bookbinder/commands/run_publish_ci.rb +21 -24
  22. data/lib/bookbinder/commands/tag.rb +3 -3
  23. data/lib/bookbinder/commands/update_local_doc_repos.rb +5 -4
  24. data/lib/bookbinder/commands/version.rb +11 -8
  25. data/lib/bookbinder/configuration.rb +8 -3
  26. data/lib/bookbinder/configuration_fetcher.rb +7 -25
  27. data/lib/bookbinder/configuration_validator.rb +21 -0
  28. data/lib/bookbinder/distributor.rb +1 -1
  29. data/lib/bookbinder/dita_html_to_middleman_formatter.rb +37 -0
  30. data/lib/bookbinder/dita_section.rb +7 -0
  31. data/lib/bookbinder/dita_section_gatherer.rb +28 -0
  32. data/lib/bookbinder/git_accessor.rb +17 -0
  33. data/lib/bookbinder/git_client.rb +10 -7
  34. data/lib/bookbinder/git_hub_repository.rb +46 -41
  35. data/lib/bookbinder/local_dita_preprocessor.rb +27 -0
  36. data/lib/bookbinder/local_dita_to_html_converter.rb +49 -0
  37. data/lib/bookbinder/local_file_system_accessor.rb +68 -0
  38. data/lib/bookbinder/middleman_runner.rb +30 -17
  39. data/lib/bookbinder/publisher.rb +16 -80
  40. data/lib/bookbinder/remote_yaml_credential_provider.rb +2 -3
  41. data/lib/bookbinder/repositories/command_repository.rb +156 -0
  42. data/lib/bookbinder/repositories/section_repository.rb +31 -0
  43. data/lib/bookbinder/section.rb +5 -67
  44. data/lib/bookbinder/shell_out.rb +1 -0
  45. data/lib/bookbinder/sheller.rb +19 -0
  46. data/lib/bookbinder/sieve.rb +6 -1
  47. data/lib/bookbinder/terminal.rb +10 -0
  48. data/lib/bookbinder/user_message.rb +6 -0
  49. data/lib/bookbinder/user_message_presenter.rb +21 -0
  50. data/lib/bookbinder/yaml_loader.rb +18 -7
  51. data/master_middleman/archive_drop_down_menu.rb +46 -0
  52. data/master_middleman/bookbinder_helpers.rb +47 -40
  53. metadata +33 -87
  54. data/lib/bookbinder/commands/publish.rb +0 -138
  55. data/lib/bookbinder/usage_messenger.rb +0 -33
@@ -1,138 +0,0 @@
1
- require_relative '../book'
2
- require_relative '../cli_error'
3
- require_relative '../configuration'
4
- require_relative '../directory_helpers'
5
- require_relative '../middleman_runner'
6
- require_relative '../publisher'
7
- require_relative '../spider'
8
- require_relative 'bookbinder_command'
9
- require_relative 'naming'
10
-
11
- module Bookbinder
12
- module Commands
13
- class Publish < BookbinderCommand
14
- VersionUnsupportedError = Class.new(StandardError)
15
-
16
- include Bookbinder::DirectoryHelperMethods
17
- extend Commands::Naming
18
-
19
- def self.usage
20
- "publish <local|github> [--verbose] \t Bind the sections specified in config.yml from <local> or <github> into the final_app directory"
21
- end
22
-
23
- def run(cli_arguments, git_accessor=Git)
24
- raise CliError::InvalidArguments unless arguments_are_valid?(cli_arguments)
25
- @git_accessor = git_accessor
26
-
27
- final_app_dir = File.absolute_path('final_app')
28
- bind_book(cli_arguments, final_app_dir)
29
- end
30
-
31
- private
32
-
33
- def bind_book(cli_arguments, final_app_dir)
34
- generate_site_etc(cli_arguments, final_app_dir)
35
- end
36
-
37
- def generate_site_etc(cli_args, final_app_dir, target_tag=nil)
38
- # TODO: general solution to turn all string keys to symbols
39
- verbosity = cli_args.include?('--verbose')
40
- location = cli_args[0]
41
-
42
- cli_options = { verbose: verbosity, target_tag: target_tag }
43
- output_paths = output_directory_paths(location, final_app_dir)
44
- publish_config = publish_config(location)
45
- spider = Spider.new(@logger, app_dir: final_app_dir)
46
- static_site_generator = MiddlemanRunner.new(@logger)
47
-
48
- success = Publisher.new(@logger, spider, static_site_generator).publish(cli_options, output_paths, publish_config, @git_accessor)
49
- success ? 0 : 1
50
- end
51
-
52
- def output_directory_paths(location, final_app_dir)
53
- local_repo_dir = (location == 'local') ? File.absolute_path('..') : nil
54
-
55
- {
56
- final_app_dir: final_app_dir,
57
- local_repo_dir: local_repo_dir,
58
- output_dir: File.absolute_path(output_dir_name),
59
- master_middleman_dir: layout_repo_path(local_repo_dir)
60
- }
61
- end
62
-
63
- def publish_config(location)
64
- arguments = {
65
- sections: config.sections,
66
- book_repo: config.book_repo,
67
- host_for_sitemap: config.public_host,
68
- archive_menu: config.archive_menu
69
- }
70
-
71
- optional_arguments = {}
72
- optional_arguments.merge!(template_variables: config.template_variables) if config.respond_to?(:template_variables)
73
- if publishing_to_github? location
74
- config.versions.each { |version| arguments[:sections].concat sections_from version, @git_accessor }
75
- optional_arguments.merge!(versions: config.versions)
76
- end
77
-
78
- arguments.merge! optional_arguments
79
- end
80
-
81
- def sections_from(version, git_accessor)
82
- config_file = File.join book_checkout(version, git_accessor), 'config.yml'
83
- attrs = YAML.load(File.read(config_file))['sections']
84
- raise VersionUnsupportedError.new(version) if attrs.nil?
85
-
86
- attrs.map do |section_hash|
87
- section_hash['repository']['ref'] = version
88
- section_hash['directory'] = File.join(version, section_hash['directory'])
89
- section_hash
90
- end
91
- end
92
-
93
- def book_checkout(ref, git_accessor=Git)
94
- temp_workspace = Dir.mktmpdir('book_checkout')
95
- book = Book.from_remote(logger: @logger,
96
- full_name: config.book_repo,
97
- destination_dir: temp_workspace,
98
- ref: ref,
99
- git_accessor: git_accessor,
100
- )
101
-
102
- File.join temp_workspace, book.directory
103
- end
104
-
105
- def layout_repo_path(local_repo_dir)
106
- if config.has_option?('layout_repo')
107
- if local_repo_dir
108
- File.join(local_repo_dir, config.layout_repo.split('/').last)
109
- else
110
- section = {'repository' => {'name' => config.layout_repo}}
111
- destination_dir = Dir.mktmpdir
112
- repository = GitHubRepository.build_from_remote(@logger, section, destination_dir, 'master', @git_accessor)
113
- if repository
114
- File.join(destination_dir, repository.directory)
115
- else
116
- raise 'failed to fetch repository'
117
- end
118
- end
119
- else
120
- File.absolute_path('master_middleman')
121
- end
122
- end
123
-
124
- def arguments_are_valid?(arguments)
125
- return false unless arguments.any?
126
- verbose = arguments[1] && arguments[1..-1].include?('--verbose')
127
- tag_provided = arguments[1] && (arguments[1..-1] - ['--verbose']).any?
128
- nothing_special = arguments[1..-1].empty?
129
-
130
- %w(local github).include?(arguments[0]) && (tag_provided || verbose || nothing_special)
131
- end
132
-
133
- def publishing_to_github?(publish_location)
134
- config.has_option?('versions') && publish_location != 'local'
135
- end
136
- end
137
- end
138
- end
@@ -1,33 +0,0 @@
1
- module Bookbinder
2
- class UsageMessenger
3
-
4
- def construct_for commands, flags
5
- log_usage_header + "\n" + flag_usage_messages(flags) + command_usage_messages(commands)
6
- end
7
-
8
- private
9
-
10
- def flag_usage_messages(flags)
11
- flag_usage_messages = ""
12
- flags.each { |f| flag_usage_messages += " \t#{f.usage}\n" }
13
- flag_usage_messages
14
- end
15
-
16
- def command_usage_messages(commands)
17
- flag_command_messages = ""
18
- commands.each do |command_class|
19
- flag_command_messages += " \t#{command_class.usage}\n"
20
- end
21
- flag_command_messages
22
- end
23
-
24
- def log_usage_header
25
- <<TEXT
26
-
27
- \e[1;39;49mDocumentation\e[0m: https://github.com/pivotal-cf/docs-bookbinder
28
-
29
- \e[1;39;49mUsage\e[0m: bookbinder <command|flag> [args]
30
- TEXT
31
- end
32
- end
33
- end