bookwatch 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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: []