liquidoc 0.11.0 → 0.12.0.pre.rc1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/liquidoc/version.rb +1 -1
- data/lib/liquidoc.rb +75 -52
- metadata +16 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d8e7be74837c6d2456cc2186bd58240dd64f32dfbe22e4e960e4887e11b0f892
|
4
|
+
data.tar.gz: 42a9d17d69753e6f7c905f2cf35f08fe0bf68ce3cfa8e76c81fb314fe2b097e4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 386c7dc3021bff1955cdfa02ea1e39799510ad41a9ad7c95f7bd23b4bb8feb914bc6b35f5698c0bf17e899247ee3bc2cbd795679e29f3ed0eac8bfff7b03cfb2
|
7
|
+
data.tar.gz: 236059bc98386f110a6cec058658d58ba173c7b8d1f0a9ad654f3613776f76dbcfda2deb0ecc8fc3ef3500a525e1d33979c6d00264a5e516dbb195ba9328bf25
|
data/lib/liquidoc/version.rb
CHANGED
data/lib/liquidoc.rb
CHANGED
@@ -40,7 +40,7 @@ require 'highline'
|
|
40
40
|
@configs_dir = @base_dir + '_configs'
|
41
41
|
@templates_dir = @base_dir + '_templates/'
|
42
42
|
@data_dir = @base_dir + '_data/'
|
43
|
-
@
|
43
|
+
@data_files = nil
|
44
44
|
@attributes_file_def = '_data/asciidoctor.yml'
|
45
45
|
@attributes_file = @attributes_file_def
|
46
46
|
@pdf_theme_file = 'theme/pdf-theme.yml'
|
@@ -75,17 +75,21 @@ FileUtils::mkdir_p("#{@build_dir}/pre") unless File.exists?("#{@build_dir}/pre")
|
|
75
75
|
# ===
|
76
76
|
|
77
77
|
# Establish source, template, index, etc details for build jobs from a config file
|
78
|
-
def config_build config_file, config_vars={}, parse=false
|
78
|
+
def config_build config_file, config_vars={}, data_files=nil, parse=false
|
79
79
|
@logger.debug "Using config file #{config_file}."
|
80
80
|
validate_file_input(config_file, "config")
|
81
|
-
if config_vars.length > 0 or parse or contains_liquid(config_file)
|
81
|
+
if config_vars.length > 0 or data_files or parse or contains_liquid(config_file)
|
82
82
|
@logger.debug "Config_vars: #{config_vars.length}"
|
83
83
|
# If config variables are passed on the CLI, we want to parse the config file
|
84
84
|
# and use the parsed version for the rest fo this routine
|
85
85
|
config_out = "#{@build_dir}/pre/#{File.basename(config_file)}"
|
86
|
-
|
87
|
-
|
88
|
-
|
86
|
+
data_obj = DataObj.new()
|
87
|
+
if data_files
|
88
|
+
payload = get_payload(data_files)
|
89
|
+
data_obj.add_payload!(payload)
|
90
|
+
end
|
91
|
+
data_obj.add_data!(config_vars, "vars")
|
92
|
+
liquify(data_obj, config_file, config_out)
|
89
93
|
config_file = config_out
|
90
94
|
@logger.debug "Config parsed! Using #{config_out} for build."
|
91
95
|
validate_file_input(config_file, "config")
|
@@ -131,41 +135,23 @@ def iterate_build cfg
|
|
131
135
|
data_obj = DataObj.new()
|
132
136
|
if step.data
|
133
137
|
data_files = DataFiles.new(step.data)
|
134
|
-
|
135
|
-
|
136
|
-
data = ingest_data(src) # Extract data from file
|
137
|
-
rescue Exception => ex
|
138
|
-
@logger.error "#{ex.class}: #{ex.message}"
|
139
|
-
raise "DataFileReadFail (#{src.file})"
|
140
|
-
end
|
141
|
-
begin # Create build.data
|
142
|
-
if data_files.sources.size == 1
|
143
|
-
data_obj.add_data!("", data) if data.is_a? Hash
|
144
|
-
# Insert arrays into the data. scope, and for backward compatibility, hashes as well
|
145
|
-
data_obj.add_data!("data", data)
|
146
|
-
else
|
147
|
-
data_obj.add_data!(src.name, data) # Insert object under self-named scope
|
148
|
-
end
|
149
|
-
rescue Exception => ex
|
150
|
-
@logger.error "#{ex.class}: #{ex.message}"
|
151
|
-
raise "DataIngestFail (#{src.file})"
|
152
|
-
end
|
153
|
-
end
|
138
|
+
payload = get_payload(data_files)
|
139
|
+
data_obj.add_payload!(payload)
|
154
140
|
end
|
155
141
|
builds.each do |bld|
|
156
142
|
build = Build.new(bld, type, data_obj) # create an instance of the Build class; Build.new accepts a 'bld' hash & action 'type'
|
157
143
|
if build.template
|
158
|
-
# Prep & perform a Liquid-parsed build
|
144
|
+
# Prep & perform a Liquid-parsed build
|
159
145
|
@explainer.info build.message
|
160
|
-
build.add_data!("vars"
|
146
|
+
build.add_data!(build.variables, "vars") if build.variables
|
161
147
|
liquify(build.data, build.template, build.output) # perform the liquify operation
|
162
148
|
else # Prep & perform a direct conversion
|
163
149
|
# Delete nested data and vars objects
|
164
150
|
build.data.remove_scope("data")
|
165
151
|
build.data.remove_scope("vars")
|
166
152
|
# Add vars from CLI or config args
|
167
|
-
build.data.add_data!(
|
168
|
-
build.data.add_data!(
|
153
|
+
build.data.add_data!(build.variables) unless build.variables.empty?
|
154
|
+
build.data.add_data!(@passed_vars) unless @passed_vars.empty?
|
169
155
|
regurgidata(build.data, build.output)
|
170
156
|
end
|
171
157
|
end
|
@@ -479,8 +465,8 @@ class Build
|
|
479
465
|
@data unless @data.nil?
|
480
466
|
end
|
481
467
|
|
482
|
-
def add_data!
|
483
|
-
@data.add_data!(
|
468
|
+
def add_data! data, scope=""
|
469
|
+
@data.add_data!(data, scope)
|
484
470
|
end
|
485
471
|
|
486
472
|
# def vars
|
@@ -612,6 +598,7 @@ class Build
|
|
612
598
|
end # class Build
|
613
599
|
|
614
600
|
class DataSrc
|
601
|
+
# Organizes metadata about an ingestible data source
|
615
602
|
# initialization means establishing a proper hash for the 'data' param
|
616
603
|
def initialize sources
|
617
604
|
@datasrc = {}
|
@@ -679,9 +666,9 @@ end # class DataSrc
|
|
679
666
|
# DataFiles
|
680
667
|
class DataFiles
|
681
668
|
# Accepts a single String, Hash, or Array
|
682
|
-
# String must be a filename
|
683
|
-
# Hash must contain :
|
684
|
-
# Array must contain filenames as strings
|
669
|
+
# String must be a path/filename
|
670
|
+
# Hash must contain file: and optionally type: and pattern:
|
671
|
+
# Array must contain path/filenames as strings
|
685
672
|
# Returns array of DataSrc objects
|
686
673
|
def initialize data_sources
|
687
674
|
@data_sources = []
|
@@ -696,6 +683,7 @@ class DataFiles
|
|
696
683
|
end
|
697
684
|
|
698
685
|
def sources
|
686
|
+
# An Array of DataSrc objects
|
699
687
|
@data_sources
|
700
688
|
end
|
701
689
|
|
@@ -714,13 +702,14 @@ class DataObj
|
|
714
702
|
@data = {"vars" => {}}
|
715
703
|
end
|
716
704
|
|
717
|
-
def add_data! scope=""
|
705
|
+
def add_data! data, scope=""
|
718
706
|
# Merges data into existing scope or creates a new scope
|
719
707
|
if scope.empty? # store new object at root of this object
|
720
708
|
self.data.merge!data
|
721
709
|
else # store new object as a subordinate, named object
|
722
|
-
if self.data.key?(scope) # merge into existing
|
723
|
-
self.data[scope].merge!data
|
710
|
+
if self.data.key?(scope) # merge/append into existing object
|
711
|
+
self.data[scope].merge!data if self.data[scope].is_a? Hash
|
712
|
+
self.data[scope] << data if self.data[scope].is_a? Array
|
724
713
|
else # create a new key named after the scope
|
725
714
|
scoped_hash = { scope => data }
|
726
715
|
self.data.merge!scoped_hash
|
@@ -728,6 +717,21 @@ class DataObj
|
|
728
717
|
end
|
729
718
|
end
|
730
719
|
|
720
|
+
def add_payload! payload
|
721
|
+
# Expects an Array of Hashes ([{name=>String, data=>Object},...])
|
722
|
+
if payload.size == 1
|
723
|
+
# If payload is a single Hash, store it at the root level (no scope)
|
724
|
+
self.add_data!(payload[0]['data']) if payload[0]['data'].is_a? Hash
|
725
|
+
# Insert arrays into the data. scope, and for backward compatibility, hashes as well
|
726
|
+
self.add_data!(payload[0]['data'], "data")
|
727
|
+
end
|
728
|
+
# For ALL payloads, create a self-named obj scope
|
729
|
+
payload.each do |obj|
|
730
|
+
puts obj
|
731
|
+
self.add_data!(obj['data'], obj['name']) # Insert object under self-named scope
|
732
|
+
end
|
733
|
+
end
|
734
|
+
|
731
735
|
def data
|
732
736
|
@data
|
733
737
|
end
|
@@ -770,7 +774,25 @@ end
|
|
770
774
|
# PARSE-type build procs
|
771
775
|
# ===
|
772
776
|
|
773
|
-
|
777
|
+
def get_payload data_files
|
778
|
+
# data_files: a proper DataFile object
|
779
|
+
payload = []
|
780
|
+
data_files.sources.each do |src|
|
781
|
+
obj = {}
|
782
|
+
begin
|
783
|
+
data = ingest_data(src) # Extract data from file
|
784
|
+
rescue Exception => ex
|
785
|
+
@logger.error "#{ex.class}: #{ex.message}"
|
786
|
+
raise "DataFileReadFail (#{src.file})"
|
787
|
+
end
|
788
|
+
obj['name'] = src.name
|
789
|
+
obj['data'] = data
|
790
|
+
payload << obj
|
791
|
+
end
|
792
|
+
return payload
|
793
|
+
end
|
794
|
+
|
795
|
+
# Pull in a semi-structured data file, converting contents to a Ruby object
|
774
796
|
def ingest_data datasrc
|
775
797
|
raise "InvalidDataSrcObject" unless datasrc.is_a? DataSrc
|
776
798
|
case datasrc.type
|
@@ -862,21 +884,20 @@ def liquify data_obj, template_file, output
|
|
862
884
|
end
|
863
885
|
end
|
864
886
|
|
865
|
-
def cli_liquify
|
887
|
+
def cli_liquify data_files=nil, template_file=nil, output_file=nil, passed_vars
|
866
888
|
# converts command-line options into liquify or regurgidata inputs
|
867
889
|
data_obj = DataObj.new()
|
868
|
-
if
|
869
|
-
|
870
|
-
|
871
|
-
data_obj.add_data!("", ingested)
|
890
|
+
if data_files
|
891
|
+
payload = get_payload(data_files)
|
892
|
+
data_obj.add_payload!(payload)
|
872
893
|
end
|
873
894
|
if template_file
|
874
|
-
data_obj.add_data!("data"
|
875
|
-
data_obj.add_data!("vars"
|
895
|
+
# data_obj.add_data!(ingested, "data") if df
|
896
|
+
data_obj.add_data!(passed_vars, "vars") if passed_vars
|
876
897
|
liquify(data_obj, template_file, output_file)
|
877
898
|
else
|
878
899
|
data_obj.remove_scope("vars")
|
879
|
-
data_obj.add_data!(
|
900
|
+
data_obj.add_data!(passed_vars) if passed_vars
|
880
901
|
regurgidata(data_obj, output_file)
|
881
902
|
end
|
882
903
|
end
|
@@ -1303,8 +1324,10 @@ command_parser = OptionParser.new do|opts|
|
|
1303
1324
|
@config_file = @base_dir + n
|
1304
1325
|
end
|
1305
1326
|
|
1306
|
-
opts.on("-d PATH", "--data=PATH", "Semi-structured data source (input) path. Ex. path/to/data.yml. Required unless --config is called." ) do |n|
|
1307
|
-
|
1327
|
+
opts.on("-d PATH[,PATH]", "--data=PATH[,PATH]", "Semi-structured data source (input) path or paths. Ex. path/to/data.yml or data/file1.yml,data/file2.json. Required unless --config is called; optional with config." ) do |n|
|
1328
|
+
data_files = n.split(',')
|
1329
|
+
data_files = data_files.map! {|file| @base_dir + file}
|
1330
|
+
@data_files = DataFiles.new(data_files)
|
1308
1331
|
end
|
1309
1332
|
|
1310
1333
|
opts.on("-f PATH", "--from=PATH", "Directory to copy assets from." ) do |n|
|
@@ -1396,13 +1419,13 @@ explainer_init
|
|
1396
1419
|
|
1397
1420
|
unless @config_file
|
1398
1421
|
@logger.debug "Executing config-free build based on API/CLI arguments alone."
|
1399
|
-
if @
|
1400
|
-
cli_liquify(@
|
1422
|
+
if @data_files
|
1423
|
+
cli_liquify(@data_files, @template_file, @output_file, @passed_vars)
|
1401
1424
|
end
|
1402
1425
|
if @index_file
|
1403
1426
|
@logger.warn "Rendering via command line arguments is not yet implemented. Use a config file."
|
1404
1427
|
end
|
1405
1428
|
else
|
1406
1429
|
@logger.debug "Executing... config_build"
|
1407
|
-
config_build(@config_file, @passed_vars, @parseconfig)
|
1430
|
+
config_build(@config_file, @passed_vars, @data_files, @parseconfig)
|
1408
1431
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: liquidoc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.12.0.pre.rc1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brian Dominick
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-03-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -28,30 +28,30 @@ dependencies:
|
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 12.3.3
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - "
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
40
|
+
version: 12.3.3
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: asciidoctor
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
47
|
+
version: '2.0'
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
54
|
+
version: '2.0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: json
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -84,16 +84,16 @@ dependencies:
|
|
84
84
|
name: asciidoctor-pdf
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- -
|
87
|
+
- - '='
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version: 1.5.
|
89
|
+
version: 1.5.3
|
90
90
|
type: :runtime
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- -
|
94
|
+
- - '='
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version: 1.5.
|
96
|
+
version: 1.5.3
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: logger
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -128,28 +128,28 @@ dependencies:
|
|
128
128
|
requirements:
|
129
129
|
- - "~>"
|
130
130
|
- !ruby/object:Gem::Version
|
131
|
-
version: '
|
131
|
+
version: '4.0'
|
132
132
|
type: :runtime
|
133
133
|
prerelease: false
|
134
134
|
version_requirements: !ruby/object:Gem::Requirement
|
135
135
|
requirements:
|
136
136
|
- - "~>"
|
137
137
|
- !ruby/object:Gem::Version
|
138
|
-
version: '
|
138
|
+
version: '4.0'
|
139
139
|
- !ruby/object:Gem::Dependency
|
140
140
|
name: jekyll-asciidoc
|
141
141
|
requirement: !ruby/object:Gem::Requirement
|
142
142
|
requirements:
|
143
143
|
- - "~>"
|
144
144
|
- !ruby/object:Gem::Version
|
145
|
-
version: '
|
145
|
+
version: '3.0'
|
146
146
|
type: :runtime
|
147
147
|
prerelease: false
|
148
148
|
version_requirements: !ruby/object:Gem::Requirement
|
149
149
|
requirements:
|
150
150
|
- - "~>"
|
151
151
|
- !ruby/object:Gem::Version
|
152
|
-
version: '
|
152
|
+
version: '3.0'
|
153
153
|
- !ruby/object:Gem::Dependency
|
154
154
|
name: highline
|
155
155
|
requirement: !ruby/object:Gem::Requirement
|