giblish 2.0.0 → 2.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/unit_tests.yml +2 -2
- data/.gitignore +0 -1
- data/.ruby-version +1 -1
- data/Changelog.adoc +18 -3
- data/giblish.gemspec +1 -1
- data/lib/giblish/application.rb +57 -52
- data/lib/giblish/treeconverter.rb +95 -30
- data/lib/giblish/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 692017a96101341d60e2a0243d6b22441f75dab56904aa97a91f9c272e3c0630
|
4
|
+
data.tar.gz: f4e6e3bc7843484ee414b880ed562b8d94a49913f6637ee5a8c7233d56b99491
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 32186232754bfc2362c1ac18465747de784c8ce950226223bd67f342c0145cac91af6b0c6364a0c3b211cfba11367bc0959d08a01faf191d9f021f695231239f
|
7
|
+
data.tar.gz: b89358a5bb1945492ea14d0e74a42f9364da494a378911b84b062f632353b0350424b709da7d637d9c16095a778d8aa95a7a90a419376b02cb50e634b4b8e2a4
|
@@ -17,9 +17,9 @@ jobs:
|
|
17
17
|
sudo apt -y install binutils
|
18
18
|
- name: Install needed packages
|
19
19
|
run: |
|
20
|
-
sudo apt-get -y install libpango1.0-dev graphviz
|
20
|
+
sudo apt-get -y install libpango1.0-dev graphviz libwebp-dev libzstd-dev
|
21
21
|
- name: Checkout Giblish
|
22
|
-
uses: actions/checkout@
|
22
|
+
uses: actions/checkout@v3
|
23
23
|
- name: Set up Ruby
|
24
24
|
uses: ruby/setup-ruby@v1
|
25
25
|
with:
|
data/.gitignore
CHANGED
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
3.1.
|
1
|
+
3.1.3
|
data/Changelog.adoc
CHANGED
@@ -1,12 +1,27 @@
|
|
1
1
|
= giblish changelog
|
2
2
|
:docid: G-006
|
3
3
|
|
4
|
-
== Not yet in place
|
4
|
+
== Some of the things Not yet in place
|
5
5
|
|
6
6
|
* Investigate how to remove tmp/cache files and dirs during graph generation
|
7
7
|
* Update docs for giblish.
|
8
8
|
** write instructions for github webhook triggered generation
|
9
9
|
* Update the default css for giblish html generation.
|
10
|
+
* Implement a way for a user to customize the index page
|
11
|
+
|
12
|
+
== v2.1.0
|
13
|
+
|
14
|
+
Changes/New functionality::
|
15
|
+
* asciidoctor-diagram is required if it exists, this makes diagrams in documents render.
|
16
|
+
* giblish now complies with these precedence rules for document attributes:
|
17
|
+
.. An attribute passed to the API or CLI whose value does not end in @
|
18
|
+
.. (giblish specific) An attribute defined in an attribute provider for a specific source node
|
19
|
+
.. An attribute defined in the document
|
20
|
+
.. An attribute passed to the API or CLI whose value or name ends in @
|
21
|
+
.. (giblish specific) The default value set by giblish, if applicable
|
22
|
+
.. The default value set by asciidoctor, if applicable
|
23
|
+
+
|
24
|
+
this is an augumentation of the ones found here: https://docs.asciidoctor.org/asciidoc/latest/attributes/assignment-precedence/
|
10
25
|
|
11
26
|
== v2.0.0
|
12
27
|
|
@@ -21,7 +36,7 @@ Breaking changes::
|
|
21
36
|
This release includes a complete refactoring of almost the entire code base.
|
22
37
|
|
23
38
|
Breaking changes::
|
24
|
-
* The '-w' flag is removed
|
39
|
+
* The '-w' flag is removed
|
25
40
|
* The text search parameters interface has changed completely. A written specification of this interface is included in the docs.
|
26
41
|
* The '-r' flag will, for html generation, *copy everything* under the given directory to the target location.
|
27
42
|
** the previous restriction on folder names has been removed.
|
@@ -46,7 +61,7 @@ Changes/New functionality::
|
|
46
61
|
** the implementation of the server-side search tools are written completely in ruby and does no longer depend on an external 'grep' tool.
|
47
62
|
** almost all needed infrastructure for implementing a server-side search script has been implemented within the 'giblish' gem.
|
48
63
|
* The asciidoctor toolchain dependencies are updated to the latest versions (at the time of release).
|
49
|
-
|
64
|
+
|
50
65
|
|
51
66
|
== v0.8.0
|
52
67
|
|
data/giblish.gemspec
CHANGED
@@ -49,7 +49,6 @@ Gem::Specification.new do |spec|
|
|
49
49
|
spec.add_development_dependency "standard", "~> 1.16"
|
50
50
|
spec.add_development_dependency "rake", "~> 13.0"
|
51
51
|
spec.add_development_dependency "oga", "~> 3.3"
|
52
|
-
# spec.add_development_dependency "thor", "~> 0.20.3"
|
53
52
|
spec.add_development_dependency "thor", "~> 1.2"
|
54
53
|
spec.add_development_dependency "asciidoctor-mathematical", "~> 0.3.5"
|
55
54
|
# needed for the sinatra-based apps
|
@@ -61,6 +60,7 @@ Gem::Specification.new do |spec|
|
|
61
60
|
# Run-time deps
|
62
61
|
# 'matrix' needed because of incompatibilities between prawn v2.4
|
63
62
|
# and ruby 3.1
|
63
|
+
# sorbet-runtime
|
64
64
|
spec.add_runtime_dependency "matrix", "~>0.4"
|
65
65
|
spec.add_runtime_dependency "warning", "~>1.2"
|
66
66
|
spec.add_runtime_dependency "asciidoctor", "~>2.0", ">= 2.0.17"
|
data/lib/giblish/application.rb
CHANGED
@@ -5,54 +5,54 @@ require_relative "gitrepos/checkoutmanager"
|
|
5
5
|
|
6
6
|
module Giblish
|
7
7
|
# The app class for the giblish application
|
8
|
-
class Application
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
end
|
8
|
+
# class Application
|
9
|
+
# # returns on success, raises otherwise
|
10
|
+
# def run(args)
|
11
|
+
# # force immediate output
|
12
|
+
# $stdout.sync = true
|
13
|
+
|
14
|
+
# # setup logging
|
15
|
+
# Giblog.setup
|
16
|
+
# Giblog.logger.level = Logger::INFO
|
17
|
+
|
18
|
+
# # Parse cmd line
|
19
|
+
# cmdline = CmdLine.new.parse(args)
|
20
|
+
# Giblog.logger.level = cmdline.log_level
|
21
|
+
|
22
|
+
# Giblog.logger.debug { "cmd line args: #{cmdline.inspect}" }
|
23
|
+
|
24
|
+
# # build a tree of files matching user's regexp selection
|
25
|
+
# src_tree = PathTree.build_from_fs(cmdline.srcdir) do |p|
|
26
|
+
# if cmdline.exclude_regex&.match(p.to_s)
|
27
|
+
# false
|
28
|
+
# else
|
29
|
+
# (cmdline.include_regex =~ p.to_s)
|
30
|
+
# end
|
31
|
+
# end
|
32
|
+
# if src_tree.nil?
|
33
|
+
# Giblog.logger.warn { "Did not find any files to convert" }
|
34
|
+
# return
|
35
|
+
# end
|
36
|
+
|
37
|
+
# app = Configurator.new(cmdline, src_tree)
|
38
|
+
# app.tree_converter.run
|
39
|
+
|
40
|
+
# Giblog.logger.info { "Giblish is done!" }
|
41
|
+
# end
|
42
|
+
|
43
|
+
# # does not return, exits with status code
|
44
|
+
# def run_from_cmd_line
|
45
|
+
# begin
|
46
|
+
# run(ARGV)
|
47
|
+
# exit_code = 0
|
48
|
+
# rescue => exc
|
49
|
+
# Giblog.logger.error { exc.message }
|
50
|
+
# Giblog.logger.error { exc.backtrace }
|
51
|
+
# exit_code = 1
|
52
|
+
# end
|
53
|
+
# exit(exit_code)
|
54
|
+
# end
|
55
|
+
# end
|
56
56
|
|
57
57
|
class DirTreeConvert
|
58
58
|
# This class provides a file as the source for the asciidoc info and
|
@@ -197,15 +197,20 @@ module Giblish
|
|
197
197
|
Giblog.logger.level = Logger::INFO
|
198
198
|
|
199
199
|
# Parse cmd line
|
200
|
-
user_opts = CmdLine.new.parse(args)
|
201
|
-
Giblog.logger.level = user_opts.log_level
|
202
|
-
Giblog.logger.debug { "cmd line args: #{user_opts.inspect}" }
|
200
|
+
@user_opts = CmdLine.new.parse(args)
|
201
|
+
Giblog.logger.level = @user_opts.log_level
|
202
|
+
Giblog.logger.debug { "cmd line args: #{@user_opts.inspect}" }
|
203
203
|
|
204
204
|
# Select the coversion instance to use
|
205
|
-
@converter = select_conversion(user_opts)
|
205
|
+
@converter = select_conversion(@user_opts)
|
206
206
|
end
|
207
207
|
|
208
208
|
def run
|
209
|
+
begin
|
210
|
+
require "asciidoctor-diagram"
|
211
|
+
rescue LoadError
|
212
|
+
Giblog.logger.warn { "Did not find asciidoctor-diagram installed, diagrams will not be rendered." }
|
213
|
+
end
|
209
214
|
# do the conversion
|
210
215
|
@converter.run
|
211
216
|
end
|
@@ -156,20 +156,20 @@ module Giblish
|
|
156
156
|
}
|
157
157
|
|
158
158
|
# see https://docs.asciidoctor.org/asciidoctor/latest/api/options/
|
159
|
-
|
160
|
-
backend: "html5",
|
159
|
+
DEFAULT_ADOC_API_OPTS = {
|
160
|
+
# backend: "html5",
|
161
161
|
# base_dir:
|
162
|
-
catalog_assets: false,
|
162
|
+
# catalog_assets: false,
|
163
163
|
# converter:
|
164
|
-
doctype: "article",
|
164
|
+
# doctype: "article",
|
165
165
|
# eruby:
|
166
166
|
# ignore extention stuff
|
167
|
-
header_only: false,
|
167
|
+
# header_only: false,
|
168
168
|
# logger:
|
169
|
-
mkdirs: false,
|
170
|
-
parse: true,
|
169
|
+
# mkdirs: false,
|
170
|
+
# parse: true,
|
171
171
|
safe: :unsafe,
|
172
|
-
sourcemap: false,
|
172
|
+
# sourcemap: false,
|
173
173
|
# template stuff TBD,
|
174
174
|
# to_file:
|
175
175
|
# to_dir:
|
@@ -192,12 +192,67 @@ module Giblish
|
|
192
192
|
failure: ->(src, dst, dst_rel_path, ex, logstr) { TreeConverter.on_failure(src, dst, dst_rel_path, ex, logstr) }
|
193
193
|
})
|
194
194
|
|
195
|
-
#
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
195
|
+
# cache external configuration
|
196
|
+
@config_opts = opts.dup
|
197
|
+
end
|
198
|
+
|
199
|
+
# Resolve the document attributes according to the precedence.
|
200
|
+
#
|
201
|
+
# According to https://docs.asciidoctor.org/asciidoc/latest/attributes/assignment-precedence/
|
202
|
+
# The attribute precedence is:
|
203
|
+
# 1. An attribute passed to the API or CLI whose value does not end in @
|
204
|
+
# 2. An attribute defined in the document
|
205
|
+
# 3. An attribute passed to the API or CLI whose value or name ends in @
|
206
|
+
# 4. The default value of the attribute, if applicable
|
207
|
+
#
|
208
|
+
# giblish adds the following rules:
|
209
|
+
# 1.5 An attribute defined in an attribute provider for a specific source node
|
210
|
+
# 3.5 The default value set by giblish, if applicable
|
211
|
+
def resolve_doc_attributes(doc_src, node_attr)
|
212
|
+
# rule 3.5
|
213
|
+
doc_attr = DEFAULT_ADOC_DOC_ATTRIBS.dup
|
214
|
+
|
215
|
+
# sort attribs into soft and hard (rule 1 and 3)
|
216
|
+
soft_attr = {}
|
217
|
+
hard_attr = {}
|
218
|
+
@config_opts.fetch(:adoc_doc_attribs, {}).each do |k, v|
|
219
|
+
ks = k.to_s.strip
|
220
|
+
vs = v.to_s.strip
|
221
|
+
|
222
|
+
if ks.end_with?("@")
|
223
|
+
soft_attr[ks[0..]] = vs
|
224
|
+
next
|
225
|
+
end
|
226
|
+
if vs.end_with?("@")
|
227
|
+
soft_attr[ks] = vs[0..]
|
228
|
+
next
|
229
|
+
end
|
230
|
+
hard_attr[ks] = vs
|
231
|
+
end
|
232
|
+
|
233
|
+
# rule 3.
|
234
|
+
doc_attr.merge!(soft_attr)
|
235
|
+
|
236
|
+
# rule 2
|
237
|
+
Giblish.process_header_lines(doc_src.lines) do |line|
|
238
|
+
a = /^:(.+):(.*)$/.match(line)
|
239
|
+
next unless a
|
240
|
+
@logger.debug { "got header attr from doc: #{a[1]} : #{a[2]}" }
|
241
|
+
doc_attr[a[1].strip] = a[2].strip
|
242
|
+
end
|
243
|
+
|
244
|
+
@logger.debug { "idprefix before: #{doc_attr["idprefix"]}" }
|
245
|
+
|
246
|
+
# rule 1.5
|
247
|
+
doc_attr.merge!(node_attr)
|
248
|
+
|
249
|
+
# rule 1.
|
250
|
+
doc_attr.merge!(hard_attr)
|
251
|
+
|
252
|
+
@logger.debug { "idprefix after: #{doc_attr["idprefix"]}" }
|
253
|
+
|
254
|
+
# @logger&.debug { "Header attribs: #{doc_attr}" }
|
255
|
+
doc_attr
|
201
256
|
end
|
202
257
|
|
203
258
|
# require the following methods to be available from the src node:
|
@@ -216,34 +271,44 @@ module Giblish
|
|
216
271
|
@logger&.info { "Converting #{src_node.pathname} and store result under #{dst_node.parent.pathname}" }
|
217
272
|
|
218
273
|
# merge the common api opts with node specific
|
219
|
-
api_opts =
|
274
|
+
api_opts = DEFAULT_ADOC_API_OPTS.dup
|
275
|
+
api_opts.merge!(@config_opts.fetch(:adoc_api_opts, {}))
|
220
276
|
api_opts.merge!(src_node.api_options(src_node, dst_node, dst_top)) if src_node.respond_to?(:api_options)
|
221
|
-
api_opts[:attributes].merge!(src_node.document_attributes(src_node, dst_node, dst_top)) if src_node.respond_to?(:document_attributes)
|
222
277
|
|
223
278
|
# use a new logger instance for each conversion
|
224
279
|
adoc_logger = Giblish::AsciidoctorLogger.new(@logger, @adoc_log_level)
|
225
280
|
|
226
281
|
begin
|
227
|
-
|
282
|
+
doc_src = src_node.adoc_source(src_node, dst_node, dst_top)
|
283
|
+
|
284
|
+
node_attr = src_node.respond_to?(:document_attributes) ?
|
285
|
+
src_node.document_attributes(src_node, dst_node, dst_top) : {}
|
286
|
+
doc_attr = resolve_doc_attributes(doc_src, node_attr)
|
287
|
+
# piggy-back our own info on the doc attributes hash so that
|
288
|
+
# asciidoctor extensions can use this info later on
|
289
|
+
doc_attr["giblish-info"] = {
|
290
|
+
src_node: src_node,
|
291
|
+
dst_node: dst_node,
|
292
|
+
dst_top: dst_top
|
293
|
+
}
|
294
|
+
|
295
|
+
# load the source to enable access to doc attributes and properties
|
228
296
|
#
|
229
|
-
# NOTE:
|
297
|
+
# NOTE: 'parse' is set to false to prevent preprocessor extensions to be run as part
|
230
298
|
# of loading the document. We want them to run during the 'convert' call later when
|
231
299
|
# doc attribs have been amended.
|
232
|
-
|
300
|
+
#
|
301
|
+
# NOTE2: by trial-and-error, it seems that some document attributes must be set when
|
302
|
+
# calling 'load' and not added after the call and before the 'convert' call to have
|
303
|
+
# the expected effect (e.g. idprefix).
|
304
|
+
doc = Asciidoctor.load(doc_src, api_opts.merge(
|
233
305
|
{
|
306
|
+
attributes: doc_attr,
|
234
307
|
parse: false,
|
235
308
|
logger: adoc_logger
|
236
309
|
}
|
237
310
|
))
|
238
311
|
|
239
|
-
# piggy-back our own info on the doc attributes hash so that
|
240
|
-
# asciidoctor extensions can use this info later on
|
241
|
-
doc.attributes["giblish-info"] = {
|
242
|
-
src_node: src_node,
|
243
|
-
dst_node: dst_node,
|
244
|
-
dst_top: dst_top
|
245
|
-
}
|
246
|
-
|
247
312
|
# update the destination node with the correct file suffix. This is dependent
|
248
313
|
# on the type of conversion performed
|
249
314
|
dst_node.name = dst_node.name.sub_ext(doc.attributes["outfilesuffix"])
|
@@ -252,11 +317,11 @@ module Giblish
|
|
252
317
|
# make sure the dst dir exists
|
253
318
|
d.dirname.mkpath
|
254
319
|
|
255
|
-
# write the converted doc to
|
256
|
-
output = doc.convert(api_opts
|
320
|
+
# do the conversion and write the converted doc to file
|
321
|
+
output = doc.convert(api_opts)
|
257
322
|
doc.write(output, d.to_s)
|
258
323
|
|
259
|
-
# give user the opportunity to eg store the result of the conversion
|
324
|
+
# give the user the opportunity to eg store the result of the conversion
|
260
325
|
# as data in the destination node
|
261
326
|
@conv_cb[:success]&.call(src_node, dst_node, dst_top, doc, adoc_logger.in_mem_storage.string)
|
262
327
|
true
|
data/lib/giblish/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: giblish
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Anders Rillbert
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-01-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: minitest
|
@@ -383,7 +383,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
383
383
|
- !ruby/object:Gem::Version
|
384
384
|
version: '0'
|
385
385
|
requirements: []
|
386
|
-
rubygems_version: 3.3.
|
386
|
+
rubygems_version: 3.3.26
|
387
387
|
signing_key:
|
388
388
|
specification_version: 4
|
389
389
|
summary: A tool for publishing asciidoc docs stored in git repos
|