bookbindery 7.3.0 → 7.4.0
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/bookbinder.gemspec +2 -2
- data/lib/bookbinder/commands/collection.rb +3 -3
- data/lib/bookbinder/config/configuration.rb +1 -1
- data/lib/bookbinder/config/{archive_menu_configuration.rb → configuration_decorator.rb} +18 -2
- data/lib/bookbinder/dita_html_for_middleman_formatter.rb +1 -1
- data/lib/bookbinder/ingest/git_accessor.rb +6 -2
- data/lib/bookbinder/ingest/git_cloner.rb +1 -0
- data/lib/bookbinder/ingest/missing_working_copy.rb +7 -2
- data/lib/bookbinder/ingest/section_repository.rb +3 -1
- data/lib/bookbinder/ingest/working_copy.rb +7 -4
- data/lib/bookbinder/middleman_runner.rb +3 -1
- data/lib/bookbinder/values/section.rb +3 -1
- data/master_middleman/bookbinder_helpers.rb +43 -0
- data/template_app/Gemfile +1 -0
- data/template_app/Gemfile.lock +13 -0
- metadata +4 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 6fbb90bb60080378f6d5e9080fa9739307cc1f73
|
|
4
|
+
data.tar.gz: 7f59d507842d42be00fd7084ef8764ca50415fe1
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 0c374ea381928402b7acf3b9bbbcd3958e8696ef6377d5207250f855e056ef11f3c9903a415b7f879771ad1932dcb4b711726b3ea9c06b2c80e60ddd647a396b
|
|
7
|
+
data.tar.gz: 1d1c6a97884de5e8bb5ce86829c43d40bdccf7e17a3b128cec15ad703b04e31369712312b053727980d3f496e30e9c3494d73ba884d6f6ff9815737cd6a77258
|
data/bookbinder.gemspec
CHANGED
|
@@ -2,10 +2,10 @@ require 'base64'
|
|
|
2
2
|
|
|
3
3
|
Gem::Specification.new do |s|
|
|
4
4
|
s.name = 'bookbindery'
|
|
5
|
-
s.version = '7.
|
|
5
|
+
s.version = '7.4.0'
|
|
6
6
|
s.summary = 'Markdown to Rackup application documentation generator'
|
|
7
7
|
s.description = 'A command line utility to be run in Book repositories to stitch together their constituent Markdown repos into a static-HTML-serving application'
|
|
8
|
-
s.authors = ['Mike Grafton', 'Lucas Marks', 'Gavin Morgan', 'Nikhil Gajwani', 'Dan Wendorf', 'Brenda Chan', 'Matthew Boedicker', 'Frank Kotsianas', 'Elena Sharma', 'Christa Hartsock']
|
|
8
|
+
s.authors = ['Mike Grafton', 'Lucas Marks', 'Gavin Morgan', 'Nikhil Gajwani', 'Dan Wendorf', 'Brenda Chan', 'Matthew Boedicker', 'Frank Kotsianas', 'Elena Sharma', 'Christa Hartsock', 'Michael Trestman']
|
|
9
9
|
s.email = Base64.decode64('Z21vcmdhbkBnb3Bpdm90YWwuY29t') # Gavin's
|
|
10
10
|
|
|
11
11
|
s.files = Dir['lib/**/*'] + Dir['template_app/**/*'] + Dir['master_middleman/**/*'] + Dir['install_bin/**/*'] + Dir['bookbinder.gemspec']
|
|
@@ -3,7 +3,7 @@ Dir.glob(File.expand_path('../../commands/*.rb', __FILE__)).each do |command_fil
|
|
|
3
3
|
end
|
|
4
4
|
|
|
5
5
|
require_relative '../commands/bind/directory_preparer'
|
|
6
|
-
require_relative '../config/
|
|
6
|
+
require_relative '../config/configuration_decorator'
|
|
7
7
|
require_relative '../config/fetcher'
|
|
8
8
|
require_relative '../config/remote_yaml_credential_provider'
|
|
9
9
|
require_relative '../config/validator'
|
|
@@ -90,7 +90,7 @@ module Bookbinder
|
|
|
90
90
|
streams,
|
|
91
91
|
output_locations,
|
|
92
92
|
configuration_fetcher,
|
|
93
|
-
Config::
|
|
93
|
+
Config::ConfigurationDecorator.new(loader: config_loader, config_filename: 'bookbinder.yml'),
|
|
94
94
|
local_filesystem_accessor,
|
|
95
95
|
runner,
|
|
96
96
|
Postprocessing::SitemapWriter.build(logger, final_app_directory, sitemap_port),
|
|
@@ -116,7 +116,7 @@ module Bookbinder
|
|
|
116
116
|
middleman_runner: runner,
|
|
117
117
|
output_locations: output_locations,
|
|
118
118
|
config_fetcher: configuration_fetcher,
|
|
119
|
-
config_decorator: Config::
|
|
119
|
+
config_decorator: Config::ConfigurationDecorator.new(loader: config_loader, config_filename: 'bookbinder.yml'),
|
|
120
120
|
file_system_accessor: local_filesystem_accessor,
|
|
121
121
|
preprocessor: Preprocessing::Preprocessor.new(Preprocessing::LinkToSiteGenDir.new(local_filesystem_accessor, subnav_generator_factory)),
|
|
122
122
|
cloner: local_file_system_cloner,
|
|
@@ -66,7 +66,7 @@ module Bookbinder
|
|
|
66
66
|
end
|
|
67
67
|
|
|
68
68
|
CONFIG_REQUIRED_KEYS = %w(book_repo public_host)
|
|
69
|
-
CONFIG_OPTIONAL_KEYS = %w(archive_menu book_repo_url cred_repo cred_repo_url layout_repo layout_repo_ref layout_repo_url sections subnav_exclusions
|
|
69
|
+
CONFIG_OPTIONAL_KEYS = %w(archive_menu book_repo_url cred_repo cred_repo_url repo_link_enabled repo_links feedback_enabled layout_repo layout_repo_ref layout_repo_url sections subnav_exclusions)
|
|
70
70
|
|
|
71
71
|
CONFIG_REQUIRED_KEYS.each do |method_name|
|
|
72
72
|
define_method(method_name) do
|
|
@@ -2,7 +2,7 @@ require_relative 'configuration'
|
|
|
2
2
|
|
|
3
3
|
module Bookbinder
|
|
4
4
|
module Config
|
|
5
|
-
class
|
|
5
|
+
class ConfigurationDecorator
|
|
6
6
|
def initialize(loader: nil, config_filename: nil)
|
|
7
7
|
@loader = loader
|
|
8
8
|
@config_filename = config_filename
|
|
@@ -11,13 +11,29 @@ module Bookbinder
|
|
|
11
11
|
def generate(base_config, sections)
|
|
12
12
|
base_config.merge(
|
|
13
13
|
Configuration.new(
|
|
14
|
-
|
|
14
|
+
repo_links: repo_link_config(base_config, sections),
|
|
15
|
+
archive_menu: root_config(base_config).merge(section_config(sections)))
|
|
16
|
+
)
|
|
15
17
|
end
|
|
16
18
|
|
|
17
19
|
private
|
|
18
20
|
|
|
19
21
|
attr_reader :loader, :config_filename
|
|
20
22
|
|
|
23
|
+
def repo_link_config(base_config, sections)
|
|
24
|
+
if base_config.repo_link_enabled
|
|
25
|
+
sections.reduce({}) {|config, section|
|
|
26
|
+
config.merge(
|
|
27
|
+
section.desired_directory_name => {
|
|
28
|
+
'repo' => section.repo_name,
|
|
29
|
+
'ref' => section.source_ref,
|
|
30
|
+
'at_path' => section.at_repo_path
|
|
31
|
+
}
|
|
32
|
+
)
|
|
33
|
+
}
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
21
37
|
def root_config(base_config)
|
|
22
38
|
{ '.' => base_config.archive_menu }
|
|
23
39
|
end
|
|
@@ -62,11 +62,15 @@ module Bookbinder
|
|
|
62
62
|
end
|
|
63
63
|
end
|
|
64
64
|
|
|
65
|
-
def author_date(path)
|
|
65
|
+
def author_date(path, exclusion_flag: '[exclude]')
|
|
66
66
|
Pathname(path).dirname.ascend do |current_dir|
|
|
67
67
|
if current_dir.to_s.include?(source_dir_name) && current_dir.entries.include?(Pathname(".git"))
|
|
68
68
|
git = Git.open(current_dir)
|
|
69
|
-
|
|
69
|
+
logs = git.gblob(path).log
|
|
70
|
+
|
|
71
|
+
last_non_excluded_commit = logs.detect { |log| !log.message.include?(exclusion_flag) }
|
|
72
|
+
|
|
73
|
+
return last_non_excluded_commit.author.date
|
|
70
74
|
end
|
|
71
75
|
end
|
|
72
76
|
end
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
module Bookbinder
|
|
2
2
|
module Ingest
|
|
3
3
|
class MissingWorkingCopy
|
|
4
|
-
def initialize(source_repo_name, source_dir)
|
|
4
|
+
def initialize(source_repo_name, source_dir, source_ref=nil)
|
|
5
5
|
@source_repo_name = source_repo_name
|
|
6
|
-
@source_dir= source_dir
|
|
6
|
+
@source_dir = source_dir
|
|
7
|
+
@source_ref = source_ref
|
|
7
8
|
end
|
|
8
9
|
|
|
9
10
|
def full_name
|
|
@@ -14,6 +15,10 @@ module Bookbinder
|
|
|
14
15
|
Pathname(@source_dir)
|
|
15
16
|
end
|
|
16
17
|
|
|
18
|
+
def ref
|
|
19
|
+
@source_ref
|
|
20
|
+
end
|
|
21
|
+
|
|
17
22
|
def available?
|
|
18
23
|
false
|
|
19
24
|
end
|
|
@@ -3,15 +3,17 @@ require_relative '../errors/programmer_mistake'
|
|
|
3
3
|
module Bookbinder
|
|
4
4
|
module Ingest
|
|
5
5
|
class WorkingCopy
|
|
6
|
-
attr_reader :full_name
|
|
6
|
+
attr_reader :full_name, :ref
|
|
7
7
|
|
|
8
8
|
def initialize(copied_to: nil,
|
|
9
|
-
full_name: nil
|
|
9
|
+
full_name: nil,
|
|
10
|
+
ref: nil)
|
|
10
11
|
if [copied_to, full_name].none?
|
|
11
12
|
raise Errors::ProgrammerMistake.new("Must provide copied_to and/or full_name to WorkingCopy.new")
|
|
12
13
|
else
|
|
13
14
|
@copied_to = copied_to
|
|
14
15
|
@full_name = full_name
|
|
16
|
+
@ref = ref
|
|
15
17
|
end
|
|
16
18
|
end
|
|
17
19
|
|
|
@@ -24,9 +26,10 @@ module Bookbinder
|
|
|
24
26
|
end
|
|
25
27
|
|
|
26
28
|
def ==(other)
|
|
27
|
-
[@copied_to, @full_name] ==
|
|
29
|
+
[@copied_to, @full_name, @ref] ==
|
|
28
30
|
[other.instance_variable_get(:@copied_to),
|
|
29
|
-
other.instance_variable_get(:@full_name)
|
|
31
|
+
other.instance_variable_get(:@full_name),
|
|
32
|
+
other.instance_variable_get(:@ref)]
|
|
30
33
|
end
|
|
31
34
|
end
|
|
32
35
|
end
|
|
@@ -25,7 +25,9 @@ module Bookbinder
|
|
|
25
25
|
template_variables: config.template_variables,
|
|
26
26
|
local_repo_dir: local_repo_dir,
|
|
27
27
|
workspace: output_locations.workspace_dir,
|
|
28
|
-
feedback_enabled: config.feedback_enabled
|
|
28
|
+
feedback_enabled: config.feedback_enabled,
|
|
29
|
+
repo_link_enabled: config.repo_link_enabled,
|
|
30
|
+
repo_links: config.repo_links
|
|
29
31
|
}
|
|
30
32
|
fs.write(to: "bookbinder_config.yml", text: YAML.dump(config))
|
|
31
33
|
sheller.run_command({'MM_ROOT' => output_locations.master_dir.to_s},
|
|
@@ -8,7 +8,9 @@ module Bookbinder
|
|
|
8
8
|
:subnav_templ,
|
|
9
9
|
:desired_subnav_name,
|
|
10
10
|
:preprocessor_config,
|
|
11
|
-
:at_repo_path
|
|
11
|
+
:at_repo_path,
|
|
12
|
+
:repo_name,
|
|
13
|
+
:source_ref) do
|
|
12
14
|
def path_to_repo_dir
|
|
13
15
|
at_repo_path.nil? ? path_to_repository : path_to_repository.join(at_repo_path)
|
|
14
16
|
end
|
|
@@ -62,6 +62,16 @@ module Bookbinder
|
|
|
62
62
|
partial 'layouts/feedback' if config[:feedback_enabled] && !current_page.metadata[:page][:feedback_disabled]
|
|
63
63
|
end
|
|
64
64
|
|
|
65
|
+
def exclude_repo_link
|
|
66
|
+
current_page.add_metadata({page: {repo_link_disabled: true}})
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def render_repo_link
|
|
70
|
+
if config[:repo_link_enabled] && !current_page.metadata[:page][:repo_link_disabled] && repo_url
|
|
71
|
+
"<a href='#{repo_url}'>View the source for this page in GitHub</a>"
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
|
|
65
75
|
def mermaid_diagram(&blk)
|
|
66
76
|
escaped_text = capture(&blk).gsub('-','\-')
|
|
67
77
|
|
|
@@ -112,6 +122,39 @@ module Bookbinder
|
|
|
112
122
|
'NUMERIC_CLASS_PREFIX'
|
|
113
123
|
end
|
|
114
124
|
|
|
125
|
+
def repo_url
|
|
126
|
+
nested_dir, filename = parse_out_nested_dir_and_filename
|
|
127
|
+
repo_dir = config[:repo_links].keys.select{|key| nested_dir.include? key }[0]
|
|
128
|
+
page_repo_config = config[:repo_links][repo_dir]
|
|
129
|
+
|
|
130
|
+
if page_repo_config && page_repo_config['ref']
|
|
131
|
+
at_path = at_path(page_repo_config)
|
|
132
|
+
ref = Pathname(page_repo_config['ref'])
|
|
133
|
+
org_repo = Pathname(page_repo_config['repo'])
|
|
134
|
+
|
|
135
|
+
nested_dir = extract_nested_directory(nested_dir, repo_dir)
|
|
136
|
+
|
|
137
|
+
"http://github.com/#{org_repo.join(Pathname('blob'), ref, Pathname(nested_dir), at_path, filename)}.md.erb"
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
def parse_out_nested_dir_and_filename
|
|
142
|
+
current_page.path.match(/\/?(.*?)\/?([^\/]*.html$?)/).captures
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
def extract_nested_directory(nested_dir, repo_dir)
|
|
146
|
+
nested_dir = nested_dir.gsub("#{repo_dir}", '')
|
|
147
|
+
nested_dir = nested_dir.sub('/', '') if nested_dir[0] == '/'
|
|
148
|
+
|
|
149
|
+
nested_dir
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
def at_path(page_repo_config)
|
|
153
|
+
path = page_repo_config['at_path'] || ""
|
|
154
|
+
|
|
155
|
+
Pathname(path)
|
|
156
|
+
end
|
|
157
|
+
|
|
115
158
|
def add_ancestors_of(page, ancestors)
|
|
116
159
|
if page
|
|
117
160
|
add_ancestors_of(page.parent, ancestors + [page])
|
data/template_app/Gemfile
CHANGED
data/template_app/Gemfile.lock
CHANGED
|
@@ -1,10 +1,19 @@
|
|
|
1
1
|
GEM
|
|
2
2
|
remote: http://rubygems.org/
|
|
3
3
|
specs:
|
|
4
|
+
faraday (0.9.2)
|
|
5
|
+
multipart-post (>= 1.2, < 3)
|
|
4
6
|
libv8 (3.16.14.7)
|
|
7
|
+
mimemagic (0.3.0)
|
|
8
|
+
multipart-post (2.0.0)
|
|
5
9
|
rack (1.5.2)
|
|
6
10
|
rack-rewrite (1.5.0)
|
|
7
11
|
ref (1.0.5)
|
|
12
|
+
sendgrid-ruby (1.1.5)
|
|
13
|
+
faraday (~> 0.9)
|
|
14
|
+
mimemagic
|
|
15
|
+
smtpapi (~> 0.1)
|
|
16
|
+
smtpapi (0.1.0)
|
|
8
17
|
therubyracer (0.12.1)
|
|
9
18
|
libv8 (~> 3.16.14.0)
|
|
10
19
|
ref
|
|
@@ -16,5 +25,9 @@ PLATFORMS
|
|
|
16
25
|
|
|
17
26
|
DEPENDENCIES
|
|
18
27
|
rack-rewrite
|
|
28
|
+
sendgrid-ruby
|
|
19
29
|
therubyracer
|
|
20
30
|
vienna
|
|
31
|
+
|
|
32
|
+
BUNDLED WITH
|
|
33
|
+
1.10.6
|
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: 7.
|
|
4
|
+
version: 7.4.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Mike Grafton
|
|
@@ -14,10 +14,11 @@ authors:
|
|
|
14
14
|
- Frank Kotsianas
|
|
15
15
|
- Elena Sharma
|
|
16
16
|
- Christa Hartsock
|
|
17
|
+
- Michael Trestman
|
|
17
18
|
autorequire:
|
|
18
19
|
bindir: install_bin
|
|
19
20
|
cert_chain: []
|
|
20
|
-
date: 2015-
|
|
21
|
+
date: 2015-12-03 00:00:00.000000000 Z
|
|
21
22
|
dependencies:
|
|
22
23
|
- !ruby/object:Gem::Dependency
|
|
23
24
|
name: fog-aws
|
|
@@ -316,7 +317,6 @@ files:
|
|
|
316
317
|
- lib/bookbinder/commands/update_local_doc_repos.rb
|
|
317
318
|
- lib/bookbinder/commands/version.rb
|
|
318
319
|
- lib/bookbinder/commands/watch.rb
|
|
319
|
-
- lib/bookbinder/config/archive_menu_configuration.rb
|
|
320
320
|
- lib/bookbinder/config/aws_credentials.rb
|
|
321
321
|
- lib/bookbinder/config/cf_credentials.rb
|
|
322
322
|
- lib/bookbinder/config/checkers/archive_menu_checker.rb
|
|
@@ -327,6 +327,7 @@ files:
|
|
|
327
327
|
- lib/bookbinder/config/checkers/subnavs_checker.rb
|
|
328
328
|
- lib/bookbinder/config/checkers/topics_checker.rb
|
|
329
329
|
- lib/bookbinder/config/configuration.rb
|
|
330
|
+
- lib/bookbinder/config/configuration_decorator.rb
|
|
330
331
|
- lib/bookbinder/config/fetcher.rb
|
|
331
332
|
- lib/bookbinder/config/remote_yaml_credential_provider.rb
|
|
332
333
|
- lib/bookbinder/config/section_config.rb
|