bookbindery 7.3.0 → 7.4.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|