bookwatch 1.0.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.
Files changed (126) hide show
  1. checksums.yaml +7 -0
  2. data/bookwatch.gemspec +40 -0
  3. data/install_bin/bookwatch +5 -0
  4. data/lib/bookwatch/cli.rb +109 -0
  5. data/lib/bookwatch/code_example_reader.rb +95 -0
  6. data/lib/bookwatch/colorizer.rb +16 -0
  7. data/lib/bookwatch/commands/bind.rb +119 -0
  8. data/lib/bookwatch/commands/collection.rb +181 -0
  9. data/lib/bookwatch/commands/components/bind/directory_preparer.rb +33 -0
  10. data/lib/bookwatch/commands/components/bind/layout_preparer.rb +27 -0
  11. data/lib/bookwatch/commands/components/command_options.rb +45 -0
  12. data/lib/bookwatch/commands/components/imprint/directory_preparer.rb +24 -0
  13. data/lib/bookwatch/commands/generate.rb +92 -0
  14. data/lib/bookwatch/commands/imprint.rb +55 -0
  15. data/lib/bookwatch/commands/punch.rb +33 -0
  16. data/lib/bookwatch/commands/update_local_doc_repos.rb +42 -0
  17. data/lib/bookwatch/commands/watch.rb +100 -0
  18. data/lib/bookwatch/config/checkers/archive_menu_checker.rb +29 -0
  19. data/lib/bookwatch/config/checkers/ditamap_presence_checker.rb +27 -0
  20. data/lib/bookwatch/config/checkers/duplicate_section_name_checker.rb +33 -0
  21. data/lib/bookwatch/config/checkers/products_checker.rb +34 -0
  22. data/lib/bookwatch/config/checkers/repository_name_presence_checker.rb +34 -0
  23. data/lib/bookwatch/config/checkers/required_keys_checker.rb +18 -0
  24. data/lib/bookwatch/config/checkers/section_presence_checker.rb +15 -0
  25. data/lib/bookwatch/config/configuration.rb +119 -0
  26. data/lib/bookwatch/config/configuration_decorator.rb +54 -0
  27. data/lib/bookwatch/config/dita_config_generator.rb +61 -0
  28. data/lib/bookwatch/config/fetcher.rb +64 -0
  29. data/lib/bookwatch/config/imprint/configuration.rb +24 -0
  30. data/lib/bookwatch/config/product_config.rb +34 -0
  31. data/lib/bookwatch/config/section_config.rb +85 -0
  32. data/lib/bookwatch/config/validator.rb +33 -0
  33. data/lib/bookwatch/config/yaml_loader.rb +34 -0
  34. data/lib/bookwatch/css_link_checker.rb +67 -0
  35. data/lib/bookwatch/directory_helpers.rb +15 -0
  36. data/lib/bookwatch/dita_command_creator.rb +95 -0
  37. data/lib/bookwatch/dita_html_for_middleman_formatter.rb +45 -0
  38. data/lib/bookwatch/errors/programmer_mistake.rb +5 -0
  39. data/lib/bookwatch/html_document_manipulator.rb +21 -0
  40. data/lib/bookwatch/ingest/cloner_factory.rb +26 -0
  41. data/lib/bookwatch/ingest/destination_directory.rb +21 -0
  42. data/lib/bookwatch/ingest/git_accessor.rb +102 -0
  43. data/lib/bookwatch/ingest/git_cloner.rb +36 -0
  44. data/lib/bookwatch/ingest/local_filesystem_cloner.rb +66 -0
  45. data/lib/bookwatch/ingest/missing_working_copy.rb +27 -0
  46. data/lib/bookwatch/ingest/repo_identifier.rb +45 -0
  47. data/lib/bookwatch/ingest/section_repository.rb +49 -0
  48. data/lib/bookwatch/ingest/update_failure.rb +15 -0
  49. data/lib/bookwatch/ingest/update_success.rb +12 -0
  50. data/lib/bookwatch/ingest/working_copy.rb +36 -0
  51. data/lib/bookwatch/local_filesystem_accessor.rb +122 -0
  52. data/lib/bookwatch/middleman_runner.rb +48 -0
  53. data/lib/bookwatch/postprocessing/link_checker.rb +125 -0
  54. data/lib/bookwatch/postprocessing/redirection.rb +38 -0
  55. data/lib/bookwatch/preprocessing/dita_html_preprocessor.rb +91 -0
  56. data/lib/bookwatch/preprocessing/dita_pdf_preprocessor.rb +48 -0
  57. data/lib/bookwatch/preprocessing/link_to_site_gen_dir.rb +39 -0
  58. data/lib/bookwatch/preprocessing/preprocessor.rb +26 -0
  59. data/lib/bookwatch/server_director.rb +30 -0
  60. data/lib/bookwatch/sheller.rb +52 -0
  61. data/lib/bookwatch/streams/colorized_stream.rb +25 -0
  62. data/lib/bookwatch/streams/filter_stream.rb +22 -0
  63. data/lib/bookwatch/subnav/navigation_entries_from_html_toc.rb +59 -0
  64. data/lib/bookwatch/subnav/navigation_entries_from_markdown_root.rb +116 -0
  65. data/lib/bookwatch/subnav/pdf_config_creator.rb +50 -0
  66. data/lib/bookwatch/subnav/subnav_generator.rb +28 -0
  67. data/lib/bookwatch/subnav/subnav_generator_factory.rb +29 -0
  68. data/lib/bookwatch/subnav/template_creator.rb +71 -0
  69. data/lib/bookwatch/terminal.rb +19 -0
  70. data/lib/bookwatch/values/output_locations.rb +91 -0
  71. data/lib/bookwatch/values/product_info.rb +11 -0
  72. data/lib/bookwatch/values/section.rb +58 -0
  73. data/lib/bookwatch/values/subnav_template.rb +4 -0
  74. data/lib/bookwatch/values/user_message.rb +15 -0
  75. data/master_middleman/archive_drop_down_menu.rb +50 -0
  76. data/master_middleman/bookwatch_helpers.rb +259 -0
  77. data/master_middleman/compass_runner.rb +0 -0
  78. data/master_middleman/config.rb +34 -0
  79. data/master_middleman/quicklinks_renderer.rb +80 -0
  80. data/master_middleman/source/javascripts/all.js +2 -0
  81. data/master_middleman/source/javascripts/book.js +1 -0
  82. data/master_middleman/source/javascripts/bookwatch.js +103 -0
  83. data/master_middleman/source/layouts/_additional-scripts.erb +0 -0
  84. data/master_middleman/source/layouts/_book-footer.erb +0 -0
  85. data/master_middleman/source/layouts/_book-search.erb +0 -0
  86. data/master_middleman/source/layouts/_book-title.erb +3 -0
  87. data/master_middleman/source/layouts/_header.erb +34 -0
  88. data/master_middleman/source/layouts/_local-header.erb +0 -0
  89. data/master_middleman/source/layouts/_page-footer.erb +1 -0
  90. data/master_middleman/source/layouts/_title.erb +5 -0
  91. data/master_middleman/source/layouts/layout.erb +69 -0
  92. data/master_middleman/source/stylesheets/all.css.scss +3 -0
  93. data/master_middleman/source/stylesheets/base.scss +380 -0
  94. data/master_middleman/source/stylesheets/book-styles.css.scss +0 -0
  95. data/master_middleman/source/stylesheets/layout-styles.scss +0 -0
  96. data/master_middleman/source/stylesheets/partials/_book-base-values.scss +0 -0
  97. data/master_middleman/source/stylesheets/partials/_book-vars.scss +0 -0
  98. data/master_middleman/source/stylesheets/partials/_default.scss +300 -0
  99. data/master_middleman/source/stylesheets/partials/_footer.scss +64 -0
  100. data/master_middleman/source/stylesheets/partials/_header.scss +419 -0
  101. data/master_middleman/source/stylesheets/partials/_layout-vars.scss +0 -0
  102. data/master_middleman/source/stylesheets/partials/_mixins.scss +53 -0
  103. data/master_middleman/source/stylesheets/partials/_reset.scss +233 -0
  104. data/master_middleman/source/stylesheets/partials/_search.scss +78 -0
  105. data/master_middleman/source/stylesheets/partials/_sidenav.scss +191 -0
  106. data/master_middleman/source/stylesheets/partials/_syntax-highlight.scss +64 -0
  107. data/master_middleman/source/stylesheets/partials/_vars.scss +64 -0
  108. data/master_middleman/source/stylesheets/print.css.scss +58 -0
  109. data/master_middleman/source/subnavs/_default.erb +0 -0
  110. data/master_middleman/source/subnavs/_nav-links.erb +10 -0
  111. data/master_middleman/source/subnavs/_subnav_template.erb +8 -0
  112. data/master_middleman/subdirectory_aware_assets.rb +47 -0
  113. data/template_app/Gemfile +10 -0
  114. data/template_app/Gemfile.lock +43 -0
  115. data/template_app/config.ru +9 -0
  116. data/template_app/lib/rack_static_if_exists.rb +19 -0
  117. data/template_app/lib/search/handler.rb +47 -0
  118. data/template_app/lib/search/hit.rb +21 -0
  119. data/template_app/lib/search/query.rb +74 -0
  120. data/template_app/lib/search/renderer.rb +29 -0
  121. data/template_app/lib/server.rb +52 -0
  122. data/template_app/mail_sender.rb +69 -0
  123. data/template_app/rack_app.rb +110 -0
  124. data/template_app/search-results.html.erb +75 -0
  125. data/template_app/search.yml +22 -0
  126. metadata +491 -0
@@ -0,0 +1,29 @@
1
+ require 'erb'
2
+
3
+ module Bookwatch
4
+ module Search
5
+ class Renderer
6
+ def initialize
7
+ @template = ERB.new(File.read(File.expand_path('../../../search-results.html.erb', __FILE__)))
8
+ end
9
+
10
+ def render_results(result)
11
+ result_binding = result.instance_eval { binding }
12
+
13
+ render_layout do
14
+ @template.result(result_binding)
15
+ end
16
+ end
17
+
18
+ private
19
+
20
+ def render_layout
21
+ layout.result(binding)
22
+ end
23
+
24
+ def layout
25
+ @layout ||= ERB.new(File.read(File.expand_path('../../../public/search.html', __FILE__)))
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,52 @@
1
+ require_relative './rack_static_if_exists'
2
+
3
+ module Bookwatch
4
+ class Server
5
+ class << self
6
+ def call(env)
7
+ Bookwatch::Server.new.call(env)
8
+ end
9
+ end
10
+
11
+ def initialize
12
+ @app = Rack::Builder.new do
13
+ use RackStaticIfExists, {
14
+ urls: [''],
15
+ root: 'public',
16
+ index: 'index.html',
17
+ header_rules: [[:all, {
18
+ 'Cache-Control' => 'public, max-age=3600',
19
+ 'Access-Control-Allow-Origin' => '*'
20
+ }]]
21
+ }
22
+ run Bookwatch::NotFound.new("public/404.html")
23
+ end
24
+ end
25
+
26
+ def call(env)
27
+ if env['PATH_INFO'] == '' || env['PATH_INFO'] =~ MATCH || (env['PATH_INFO'] !~ /\/$/ && File.directory?(File.join('public', env['PATH_INFO'])))
28
+ env['PATH_INFO'] += '/'
29
+ [301, {'Location' => Rack::Request.new(env).url, 'Content-Type' => ''}, []]
30
+ else
31
+ @app.call(env)
32
+ end
33
+ end
34
+
35
+ private
36
+ # regexp to match strings without periods that start but don't end with a slash
37
+ MATCH = %r{^/([^.]+)[^/]$}
38
+ end
39
+
40
+ class NotFound
41
+ def initialize(path = '')
42
+ @path = path
43
+ end
44
+
45
+ def call(env)
46
+ content = File.exist?(@path) ? File.read(@path) : 'Not Found'
47
+ length = content.length.to_s
48
+
49
+ [404, {'Content-Type' => 'text/html', 'Content-Length' => length}, [content]]
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,69 @@
1
+ require 'sendgrid-ruby'
2
+ require 'rack/response'
3
+ require 'uri'
4
+
5
+ module Bookwatch
6
+ class MailSender
7
+ def initialize(username, api_key, config={})
8
+ @config = config
9
+ @client = SendGrid::Client.new(api_user: username, api_key: api_key, raise_exceptions: false)
10
+ end
11
+
12
+ def send_mail(params)
13
+ params = whitelisted_params(params)
14
+ @subject = assemble_subject(params[:page_url])
15
+ @body = assemble_body(**params)
16
+ @mail = SendGrid::Mail.new(merged_options)
17
+
18
+ response = client.send(@mail)
19
+ Rack::Response.new(response.body, response.code, response.headers)
20
+ end
21
+
22
+ def assemble_subject(page_url)
23
+ "[Feedback] New feedback submitted for #{URI.parse(page_url).host}"
24
+ end
25
+
26
+ def assemble_body(helpful: nil, comments: nil, date: nil, page_url: nil)
27
+ <<-EOT
28
+ Dear docs writer,
29
+
30
+ You just received new feedback.
31
+
32
+ The sender thought the document was #{helpfulness(helpful)}.
33
+
34
+ Date: #{date}
35
+
36
+ Page URL: #{page_url}
37
+
38
+ Comments:
39
+ #{comments || "None given"}
40
+
41
+ Happy editing!
42
+ EOT
43
+ end
44
+
45
+ private
46
+
47
+ attr_reader :config, :client
48
+
49
+ def whitelist
50
+ %w{helpful comments date page_url}
51
+ end
52
+
53
+ def whitelisted_params(params)
54
+ {}.tap do |hash|
55
+ params.each do |key, value|
56
+ hash[key.to_sym] = value if whitelist.include?(key)
57
+ end
58
+ end
59
+ end
60
+
61
+ def merged_options
62
+ config.merge({text: @body, subject: @subject})
63
+ end
64
+
65
+ def helpfulness(was_helpful)
66
+ was_helpful ? 'helpful' : 'not helpful'
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,110 @@
1
+ require 'rack'
2
+ require 'rack/rewrite'
3
+ require_relative './lib/server'
4
+ require_relative './lib/search/handler'
5
+
6
+ module Bookwatch
7
+ class RackApp
8
+ def initialize(redirect_pathname, mail_client=nil, auth_required: true)
9
+ @redirect_pathname = redirect_pathname
10
+ @mail_client = mail_client
11
+ @auth_required = auth_required
12
+ end
13
+
14
+ def app
15
+ path = redirect_pathname
16
+ client = mail_client
17
+ auth = auth_required
18
+ Rack::Builder.new do
19
+ use ResolveRedirects, path
20
+ use AuthorizeUser, auth
21
+ use Rack::Deflater
22
+ map '/api/feedback' do
23
+ use MailFeedback, client
24
+ run Bookwatch::NotFound.new('public/404.html')
25
+ end
26
+ map '/search' do
27
+ run Bookwatch::Search::Handler.new
28
+ end
29
+ run Bookwatch::Server
30
+ end
31
+ end
32
+
33
+ private
34
+
35
+ attr_reader :redirect_pathname, :mail_client, :auth_required
36
+ end
37
+
38
+ class ResolveRedirects
39
+ def initialize(app, redirect_pathname)
40
+ @app = app
41
+ @redirect_pathname = redirect_pathname
42
+ end
43
+
44
+ def rack_app
45
+ if redirect_pathname.exist?
46
+ p = redirect_pathname
47
+ Rack::Rewrite.new(@app) { eval(p.read) }
48
+ else
49
+ @app
50
+ end
51
+ end
52
+
53
+ def call(env)
54
+ rack_app.call(env)
55
+ end
56
+
57
+ private
58
+
59
+ attr_reader :redirect_pathname
60
+ end
61
+
62
+ class AuthorizeUser
63
+ def initialize(app, auth_required)
64
+ @app = app
65
+ @auth_required = auth_required
66
+ end
67
+
68
+ def rack_app
69
+ if auth_required && site_username && site_password
70
+ Rack::Auth::Basic.new(@app) do |username, password|
71
+ [username, password] == [site_username, site_password]
72
+ end
73
+ else
74
+ @app
75
+ end
76
+ end
77
+
78
+ def call(env)
79
+ rack_app.call(env)
80
+ end
81
+
82
+ private
83
+
84
+ attr_accessor :auth_required
85
+
86
+ def site_username
87
+ ENV['SITE_AUTH_USERNAME']
88
+ end
89
+
90
+ def site_password
91
+ ENV['SITE_AUTH_PASSWORD']
92
+ end
93
+ end
94
+
95
+ class MailFeedback
96
+ def initialize(app, client)
97
+ @app = app
98
+ @client = client
99
+ end
100
+
101
+ def call(env)
102
+ request = Rack::Request.new(env)
103
+ if request.post? && @client
104
+ @client.send_mail(request.params)
105
+ else
106
+ @app.call(env)
107
+ end
108
+ end
109
+ end
110
+ end
@@ -0,0 +1,75 @@
1
+ <%
2
+ def escape_html(str)
3
+ Rack::Utils.escape_html(str)
4
+ end
5
+ %>
6
+
7
+ <div class="search-results">
8
+ <form method="get">
9
+
10
+ <% unless product_name.nil? %>
11
+ <h4 style="border: 1px solid #ccc; padding: 4px 20px;">
12
+ Filtering by: <%= product_name %>
13
+ <% unless product_version.nil? %>and <%= product_version %>
14
+ <% end %>
15
+ </h4>
16
+ <% end %>
17
+ <input name="q" value="<%= escape_html search_term %>"/>
18
+ <% unless product_name.nil? %>
19
+ <input type="hidden" name="product_name" value="<%= escape_html product_name %>"/>
20
+ <% end %>
21
+ <% unless product_version.nil? %>
22
+ <input type="hidden" name="product_version" value="<%= escape_html product_version %>"/>
23
+ <% end %>
24
+ </form>
25
+
26
+ <% if result_count == 0 %>
27
+ <div class="no-results">No Results</div>
28
+ <% else %>
29
+ <div class="result-summary">
30
+ Showing <%= (page_number - 1) * 10 + 1 %> to <%= [(page_number - 1) * 10 + 10, result_count].min %> of <%= result_count %> results.
31
+ </div>
32
+
33
+ <ul class="search-results-list">
34
+ <% result_list.each do |hit| %>
35
+ <li>
36
+ <a href="<%= hit.url %>"><%= hit.title %></a>
37
+ <% if hit.product_name %>
38
+ <br/>
39
+ <b><%= hit.product_name %> <%= hit.product_version %></b>
40
+ <% end %>
41
+ <div><%= hit.text %></div>
42
+ </li>
43
+ <% end %>
44
+ </ul>
45
+
46
+ <div class="pagination">
47
+ <% search_query = "/search?q=#{ search_term }" %>
48
+ <% search_query << "&product_name=#{ product_name }" unless product_name.nil? %>
49
+ <% search_query << "&product_version=#{ product_version }" unless product_version.nil? %>
50
+ <% if page_number == 1 %>
51
+ <span class="disabled page first">First</span>
52
+ <span class="disabled page previous">Prev</span>
53
+ <% else %>
54
+ <a class="page first" href="<%= search_query %>">First</a>
55
+ <a class="page previous" href="<%= search_query %>&page=<%= page_number - 1 %>">Prev</a>
56
+ <% end %>
57
+
58
+ <% page_window.each do |page| %>
59
+ <% if page == page_number %>
60
+ <span class="current page"><%= page %></span>
61
+ <% else %>
62
+ <a class="page" href="<%= search_query %>&page=<%= page %>"><%= page %></a>
63
+ <% end %>
64
+ <% end %>
65
+
66
+ <% if page_number == last_page %>
67
+ <span class="disabled page next">Next</span>
68
+ <span class="disabled page last">Last</span>
69
+ <% else %>
70
+ <a class="page next" href="<%= search_query %>&page=<%= page_number + 1 %>">Next</a>
71
+ <a class="page last" href="<%= search_query %>&page=<%= last_page %>">Last</a>
72
+ <% end %>
73
+ </div>
74
+ <% end %>
75
+ </div>
@@ -0,0 +1,22 @@
1
+ ---
2
+ query:
3
+ bool:
4
+ should:
5
+ simple_query_string:
6
+ query: ''
7
+ fields:
8
+ - text
9
+ - title^10
10
+ minimum_should_match: 1
11
+ from: 0
12
+ size: 10
13
+ _source:
14
+ - url
15
+ - title
16
+ - summary
17
+ - product_name
18
+ - product_version
19
+ highlight:
20
+ fields:
21
+ text:
22
+ type: plain
metadata ADDED
@@ -0,0 +1,491 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: bookwatch
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Mike Grafton
8
+ - Lucas Marks
9
+ - Gavin Morgan
10
+ - Nikhil Gajwani
11
+ - Dan Wendorf
12
+ - Brenda Chan
13
+ - Matthew Boedicker
14
+ - Andrew Bruce
15
+ - Frank Kotsianas
16
+ - Elena Sharma
17
+ - Christa Hartsock
18
+ - Michael Trestman
19
+ - Alpha Chen
20
+ - Sarah McAlear
21
+ - Gregg Van Hove
22
+ autorequire:
23
+ bindir: install_bin
24
+ cert_chain: []
25
+ date: 2018-08-07 00:00:00.000000000 Z
26
+ dependencies:
27
+ - !ruby/object:Gem::Dependency
28
+ name: fog-aws
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 0.7.1
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 0.7.1
41
+ - !ruby/object:Gem::Dependency
42
+ name: ansi
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.4'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.4'
55
+ - !ruby/object:Gem::Dependency
56
+ name: middleman
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 3.4.0
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 3.4.0
69
+ - !ruby/object:Gem::Dependency
70
+ name: middleman-livereload
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: 3.4.3
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 3.4.3
83
+ - !ruby/object:Gem::Dependency
84
+ name: middleman-syntax
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '2.0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '2.0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rouge
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "!="
102
+ - !ruby/object:Gem::Version
103
+ version: 1.9.1
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "!="
109
+ - !ruby/object:Gem::Version
110
+ version: 1.9.1
111
+ - !ruby/object:Gem::Dependency
112
+ name: redcarpet
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: 3.2.3
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: 3.2.3
125
+ - !ruby/object:Gem::Dependency
126
+ name: css_parser
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: puma
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :runtime
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: rack-rewrite
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :runtime
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ - !ruby/object:Gem::Dependency
168
+ name: therubyracer
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - ">="
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ type: :runtime
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ">="
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
181
+ - !ruby/object:Gem::Dependency
182
+ name: git
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - "~>"
186
+ - !ruby/object:Gem::Version
187
+ version: 1.2.8
188
+ type: :runtime
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - "~>"
193
+ - !ruby/object:Gem::Version
194
+ version: 1.2.8
195
+ - !ruby/object:Gem::Dependency
196
+ name: nokogiri
197
+ requirement: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - '='
200
+ - !ruby/object:Gem::Version
201
+ version: 1.6.7.2
202
+ type: :runtime
203
+ prerelease: false
204
+ version_requirements: !ruby/object:Gem::Requirement
205
+ requirements:
206
+ - - '='
207
+ - !ruby/object:Gem::Version
208
+ version: 1.6.7.2
209
+ - !ruby/object:Gem::Dependency
210
+ name: thor
211
+ requirement: !ruby/object:Gem::Requirement
212
+ requirements:
213
+ - - ">="
214
+ - !ruby/object:Gem::Version
215
+ version: '0'
216
+ type: :runtime
217
+ prerelease: false
218
+ version_requirements: !ruby/object:Gem::Requirement
219
+ requirements:
220
+ - - ">="
221
+ - !ruby/object:Gem::Version
222
+ version: '0'
223
+ - !ruby/object:Gem::Dependency
224
+ name: elasticsearch
225
+ requirement: !ruby/object:Gem::Requirement
226
+ requirements:
227
+ - - ">="
228
+ - !ruby/object:Gem::Version
229
+ version: '0'
230
+ type: :runtime
231
+ prerelease: false
232
+ version_requirements: !ruby/object:Gem::Requirement
233
+ requirements:
234
+ - - ">="
235
+ - !ruby/object:Gem::Version
236
+ version: '0'
237
+ - !ruby/object:Gem::Dependency
238
+ name: font-awesome-sass
239
+ requirement: !ruby/object:Gem::Requirement
240
+ requirements:
241
+ - - ">="
242
+ - !ruby/object:Gem::Version
243
+ version: '0'
244
+ type: :runtime
245
+ prerelease: false
246
+ version_requirements: !ruby/object:Gem::Requirement
247
+ requirements:
248
+ - - ">="
249
+ - !ruby/object:Gem::Version
250
+ version: '0'
251
+ - !ruby/object:Gem::Dependency
252
+ name: license_finder
253
+ requirement: !ruby/object:Gem::Requirement
254
+ requirements:
255
+ - - ">="
256
+ - !ruby/object:Gem::Version
257
+ version: '0'
258
+ type: :development
259
+ prerelease: false
260
+ version_requirements: !ruby/object:Gem::Requirement
261
+ requirements:
262
+ - - ">="
263
+ - !ruby/object:Gem::Version
264
+ version: '0'
265
+ - !ruby/object:Gem::Dependency
266
+ name: pry-byebug
267
+ requirement: !ruby/object:Gem::Requirement
268
+ requirements:
269
+ - - ">="
270
+ - !ruby/object:Gem::Version
271
+ version: '0'
272
+ type: :development
273
+ prerelease: false
274
+ version_requirements: !ruby/object:Gem::Requirement
275
+ requirements:
276
+ - - ">="
277
+ - !ruby/object:Gem::Version
278
+ version: '0'
279
+ - !ruby/object:Gem::Dependency
280
+ name: rake
281
+ requirement: !ruby/object:Gem::Requirement
282
+ requirements:
283
+ - - ">="
284
+ - !ruby/object:Gem::Version
285
+ version: '0'
286
+ type: :development
287
+ prerelease: false
288
+ version_requirements: !ruby/object:Gem::Requirement
289
+ requirements:
290
+ - - ">="
291
+ - !ruby/object:Gem::Version
292
+ version: '0'
293
+ - !ruby/object:Gem::Dependency
294
+ name: rspec
295
+ requirement: !ruby/object:Gem::Requirement
296
+ requirements:
297
+ - - ">="
298
+ - !ruby/object:Gem::Version
299
+ version: '0'
300
+ type: :development
301
+ prerelease: false
302
+ version_requirements: !ruby/object:Gem::Requirement
303
+ requirements:
304
+ - - ">="
305
+ - !ruby/object:Gem::Version
306
+ version: '0'
307
+ - !ruby/object:Gem::Dependency
308
+ name: sendgrid-ruby
309
+ requirement: !ruby/object:Gem::Requirement
310
+ requirements:
311
+ - - "<"
312
+ - !ruby/object:Gem::Version
313
+ version: '3.0'
314
+ type: :development
315
+ prerelease: false
316
+ version_requirements: !ruby/object:Gem::Requirement
317
+ requirements:
318
+ - - "<"
319
+ - !ruby/object:Gem::Version
320
+ version: '3.0'
321
+ - !ruby/object:Gem::Dependency
322
+ name: jasmine
323
+ requirement: !ruby/object:Gem::Requirement
324
+ requirements:
325
+ - - ">="
326
+ - !ruby/object:Gem::Version
327
+ version: '0'
328
+ type: :development
329
+ prerelease: false
330
+ version_requirements: !ruby/object:Gem::Requirement
331
+ requirements:
332
+ - - ">="
333
+ - !ruby/object:Gem::Version
334
+ version: '0'
335
+ description: A command line utility to be run in Book repositories to stitch together
336
+ their constituent Markdown repos into a temporary static-HTML-serving application
337
+ email: gmorgan@gopivotal.com
338
+ executables:
339
+ - bookwatch
340
+ extensions: []
341
+ extra_rdoc_files: []
342
+ files:
343
+ - bookwatch.gemspec
344
+ - install_bin/bookwatch
345
+ - lib/bookwatch/cli.rb
346
+ - lib/bookwatch/code_example_reader.rb
347
+ - lib/bookwatch/colorizer.rb
348
+ - lib/bookwatch/commands/bind.rb
349
+ - lib/bookwatch/commands/collection.rb
350
+ - lib/bookwatch/commands/components/bind/directory_preparer.rb
351
+ - lib/bookwatch/commands/components/bind/layout_preparer.rb
352
+ - lib/bookwatch/commands/components/command_options.rb
353
+ - lib/bookwatch/commands/components/imprint/directory_preparer.rb
354
+ - lib/bookwatch/commands/generate.rb
355
+ - lib/bookwatch/commands/imprint.rb
356
+ - lib/bookwatch/commands/punch.rb
357
+ - lib/bookwatch/commands/update_local_doc_repos.rb
358
+ - lib/bookwatch/commands/watch.rb
359
+ - lib/bookwatch/config/checkers/archive_menu_checker.rb
360
+ - lib/bookwatch/config/checkers/ditamap_presence_checker.rb
361
+ - lib/bookwatch/config/checkers/duplicate_section_name_checker.rb
362
+ - lib/bookwatch/config/checkers/products_checker.rb
363
+ - lib/bookwatch/config/checkers/repository_name_presence_checker.rb
364
+ - lib/bookwatch/config/checkers/required_keys_checker.rb
365
+ - lib/bookwatch/config/checkers/section_presence_checker.rb
366
+ - lib/bookwatch/config/configuration.rb
367
+ - lib/bookwatch/config/configuration_decorator.rb
368
+ - lib/bookwatch/config/dita_config_generator.rb
369
+ - lib/bookwatch/config/fetcher.rb
370
+ - lib/bookwatch/config/imprint/configuration.rb
371
+ - lib/bookwatch/config/product_config.rb
372
+ - lib/bookwatch/config/section_config.rb
373
+ - lib/bookwatch/config/validator.rb
374
+ - lib/bookwatch/config/yaml_loader.rb
375
+ - lib/bookwatch/css_link_checker.rb
376
+ - lib/bookwatch/directory_helpers.rb
377
+ - lib/bookwatch/dita_command_creator.rb
378
+ - lib/bookwatch/dita_html_for_middleman_formatter.rb
379
+ - lib/bookwatch/errors/programmer_mistake.rb
380
+ - lib/bookwatch/html_document_manipulator.rb
381
+ - lib/bookwatch/ingest/cloner_factory.rb
382
+ - lib/bookwatch/ingest/destination_directory.rb
383
+ - lib/bookwatch/ingest/git_accessor.rb
384
+ - lib/bookwatch/ingest/git_cloner.rb
385
+ - lib/bookwatch/ingest/local_filesystem_cloner.rb
386
+ - lib/bookwatch/ingest/missing_working_copy.rb
387
+ - lib/bookwatch/ingest/repo_identifier.rb
388
+ - lib/bookwatch/ingest/section_repository.rb
389
+ - lib/bookwatch/ingest/update_failure.rb
390
+ - lib/bookwatch/ingest/update_success.rb
391
+ - lib/bookwatch/ingest/working_copy.rb
392
+ - lib/bookwatch/local_filesystem_accessor.rb
393
+ - lib/bookwatch/middleman_runner.rb
394
+ - lib/bookwatch/postprocessing/link_checker.rb
395
+ - lib/bookwatch/postprocessing/redirection.rb
396
+ - lib/bookwatch/preprocessing/dita_html_preprocessor.rb
397
+ - lib/bookwatch/preprocessing/dita_pdf_preprocessor.rb
398
+ - lib/bookwatch/preprocessing/link_to_site_gen_dir.rb
399
+ - lib/bookwatch/preprocessing/preprocessor.rb
400
+ - lib/bookwatch/server_director.rb
401
+ - lib/bookwatch/sheller.rb
402
+ - lib/bookwatch/streams/colorized_stream.rb
403
+ - lib/bookwatch/streams/filter_stream.rb
404
+ - lib/bookwatch/subnav/navigation_entries_from_html_toc.rb
405
+ - lib/bookwatch/subnav/navigation_entries_from_markdown_root.rb
406
+ - lib/bookwatch/subnav/pdf_config_creator.rb
407
+ - lib/bookwatch/subnav/subnav_generator.rb
408
+ - lib/bookwatch/subnav/subnav_generator_factory.rb
409
+ - lib/bookwatch/subnav/template_creator.rb
410
+ - lib/bookwatch/terminal.rb
411
+ - lib/bookwatch/values/output_locations.rb
412
+ - lib/bookwatch/values/product_info.rb
413
+ - lib/bookwatch/values/section.rb
414
+ - lib/bookwatch/values/subnav_template.rb
415
+ - lib/bookwatch/values/user_message.rb
416
+ - master_middleman/archive_drop_down_menu.rb
417
+ - master_middleman/bookwatch_helpers.rb
418
+ - master_middleman/compass_runner.rb
419
+ - master_middleman/config.rb
420
+ - master_middleman/quicklinks_renderer.rb
421
+ - master_middleman/source/javascripts/all.js
422
+ - master_middleman/source/javascripts/book.js
423
+ - master_middleman/source/javascripts/bookwatch.js
424
+ - master_middleman/source/layouts/_additional-scripts.erb
425
+ - master_middleman/source/layouts/_book-footer.erb
426
+ - master_middleman/source/layouts/_book-search.erb
427
+ - master_middleman/source/layouts/_book-title.erb
428
+ - master_middleman/source/layouts/_header.erb
429
+ - master_middleman/source/layouts/_local-header.erb
430
+ - master_middleman/source/layouts/_page-footer.erb
431
+ - master_middleman/source/layouts/_title.erb
432
+ - master_middleman/source/layouts/layout.erb
433
+ - master_middleman/source/stylesheets/all.css.scss
434
+ - master_middleman/source/stylesheets/base.scss
435
+ - master_middleman/source/stylesheets/book-styles.css.scss
436
+ - master_middleman/source/stylesheets/layout-styles.scss
437
+ - master_middleman/source/stylesheets/partials/_book-base-values.scss
438
+ - master_middleman/source/stylesheets/partials/_book-vars.scss
439
+ - master_middleman/source/stylesheets/partials/_default.scss
440
+ - master_middleman/source/stylesheets/partials/_footer.scss
441
+ - master_middleman/source/stylesheets/partials/_header.scss
442
+ - master_middleman/source/stylesheets/partials/_layout-vars.scss
443
+ - master_middleman/source/stylesheets/partials/_mixins.scss
444
+ - master_middleman/source/stylesheets/partials/_reset.scss
445
+ - master_middleman/source/stylesheets/partials/_search.scss
446
+ - master_middleman/source/stylesheets/partials/_sidenav.scss
447
+ - master_middleman/source/stylesheets/partials/_syntax-highlight.scss
448
+ - master_middleman/source/stylesheets/partials/_vars.scss
449
+ - master_middleman/source/stylesheets/print.css.scss
450
+ - master_middleman/source/subnavs/_default.erb
451
+ - master_middleman/source/subnavs/_nav-links.erb
452
+ - master_middleman/source/subnavs/_subnav_template.erb
453
+ - master_middleman/subdirectory_aware_assets.rb
454
+ - template_app/Gemfile
455
+ - template_app/Gemfile.lock
456
+ - template_app/config.ru
457
+ - template_app/lib/rack_static_if_exists.rb
458
+ - template_app/lib/search/handler.rb
459
+ - template_app/lib/search/hit.rb
460
+ - template_app/lib/search/query.rb
461
+ - template_app/lib/search/renderer.rb
462
+ - template_app/lib/server.rb
463
+ - template_app/mail_sender.rb
464
+ - template_app/rack_app.rb
465
+ - template_app/search-results.html.erb
466
+ - template_app/search.yml
467
+ homepage: https://github.com/pivotal-cf/bookbinder
468
+ licenses:
469
+ - MIT
470
+ metadata: {}
471
+ post_install_message:
472
+ rdoc_options: []
473
+ require_paths:
474
+ - lib
475
+ required_ruby_version: !ruby/object:Gem::Requirement
476
+ requirements:
477
+ - - ">="
478
+ - !ruby/object:Gem::Version
479
+ version: 2.0.0
480
+ required_rubygems_version: !ruby/object:Gem::Requirement
481
+ requirements:
482
+ - - ">="
483
+ - !ruby/object:Gem::Version
484
+ version: '0'
485
+ requirements: []
486
+ rubyforge_project:
487
+ rubygems_version: 2.5.1
488
+ signing_key:
489
+ specification_version: 4
490
+ summary: Bookbinder with everything disabled except the watch function
491
+ test_files: []