liquidoc 0.9.0 → 0.9.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 66391a246f45a5d814fa084fa90dd6d84e86fb5e871b6a539a77451fc1729d62
4
- data.tar.gz: 7ccd14f246cc5b0577a81f4bdeff17bd9ecf38af6484c69d9cc3bca3695b3cfa
3
+ metadata.gz: f4ca568ce8e9ab2521817401e597d32360a7837ae2181c10e1565ba0de1f1e21
4
+ data.tar.gz: add8c1533ea4538ec874c1b3d7519a6ff37e0fcb845501dfda01d2e43f26abe0
5
5
  SHA512:
6
- metadata.gz: 02ba0eb644ca0f479b4383cf91eaadbac99cad397dd149d20841d06528338bddaf18fdfcb29ec1d9a8645076be5e2bb5fb87c7abbfce33e3773a882e714bc89a
7
- data.tar.gz: fd785c1be75bbfa445190545ef7958307b1e32dbb1af5c27973b7bdddacff87413017b2cd6295acd7306b28a4181d9a226badf038687f3378ab4369ef3264900
6
+ metadata.gz: 52a72258b29fd0300ae3474f12b7f1c804e752f0b20e6529df94a1f74aa0faec81fec7e60574eebd0f09a6cc22e910e14ae12a208da210266f2b34b9c6a938f8
7
+ data.tar.gz: f0b0fcd553577991be21cc2c47296f1d4ac07eaa3b0fab2f1b51b66dfffe1f33a3a251f7c6e76a862e0bb119a46deb47245560e9bca06e6c293a0ea0182b387f
@@ -1,7 +1,7 @@
1
1
  require 'liquidoc'
2
+ require 'optparse'
2
3
  require 'yaml'
3
4
  require 'json'
4
- require 'optparse'
5
5
  require 'liquid'
6
6
  require 'asciidoctor'
7
7
  require 'asciidoctor-pdf'
@@ -51,6 +51,8 @@ require 'jekyll'
51
51
  @verbose = false
52
52
  @quiet = false
53
53
  @explicit = false
54
+ @search_index = false
55
+ @search_index_dry = ''
54
56
 
55
57
  # Instantiate the main Logger object, which is always running
56
58
  @logger = Logger.new(STDOUT)
@@ -344,6 +346,7 @@ class Build
344
346
  build['props'] = build['properties'] if build['properties']
345
347
  @build = build
346
348
  @type = type
349
+ @build['variables'] = {}
347
350
  end
348
351
 
349
352
  def template
@@ -445,6 +448,18 @@ class Build
445
448
  # props['files'].force_array if props['files']
446
449
  # end
447
450
 
451
+ def search
452
+ props['search']
453
+ end
454
+
455
+ def add_search_prop! prop
456
+ begin
457
+ self.search.merge!prop
458
+ rescue
459
+ raise "PropertyInsertionError"
460
+ end
461
+ end
462
+
448
463
  # NOTE this section repeats in Class.AsciiDocument
449
464
  def attributes
450
465
  @build['attributes']
@@ -609,11 +624,7 @@ end
609
624
 
610
625
  # Pull in a semi-structured data file, converting contents to a Ruby hash
611
626
  def ingest_data datasrc
612
- # Must be passed a proper data object (there must be a better way to validate arg datatypes)
613
- unless datasrc.is_a? Object
614
- raise "InvalidDataObject"
615
- end
616
- # This proc should really begin here, once the datasrc object is in order
627
+ raise "InvalidDataObject" unless datasrc.is_a? Object
617
628
  case datasrc.type
618
629
  when "yml"
619
630
  begin
@@ -677,7 +688,7 @@ def parse_regex data_file, pattern
677
688
  end
678
689
  end
679
690
  end
680
- output = {"data" => records}
691
+ output = records
681
692
  rescue Exception => ex
682
693
  @logger.error "Something went wrong trying to parse the free-form file. #{ex.class} thrown. #{ex.message}"
683
694
  raise "Freeform parse error"
@@ -911,8 +922,8 @@ def generate_site doc, build
911
922
  when "jekyll"
912
923
  attrs = doc.attributes
913
924
  build.add_config_file("_config.yml") unless build.prop_files_array
914
- jekyll_config = YAML.load_file(build.prop_files_array[0]) # load the first Jekyll config file locally
915
- attrs.merge! ({"base_dir" => jekyll_config['source']}) # Sets default Asciidoctor base_dir to == Jekyll root
925
+ jekyll = load_jekyll_data(build) # load the first Jekyll config file locally
926
+ attrs.merge! ({"base_dir" => jekyll['source']}) # Sets default Asciidoctor base_dir to == Jekyll root
916
927
  # write all AsciiDoc attributes to a config file for Jekyll to ingest
917
928
  attrs.merge!(build.attributes) if build.attributes
918
929
  attrs = {"asciidoctor" => {"attributes" => attrs} }
@@ -925,14 +936,31 @@ def generate_site doc, build
925
936
  if build.props['arguments']
926
937
  opts_args = build.props['arguments'].to_opts_args
927
938
  end
928
- command = "bundle exec jekyll build --config #{config_list} #{opts_args} #{quiet}"
939
+ base_args = "--config #{config_list} #{opts_args}"
940
+ command = "bundle exec jekyll build #{base_args} #{quiet}"
941
+ if @search_index
942
+ # TODO enable config-based admin api key ingest once config is dynamic
943
+ command = algolia_index_cmd(build, @search_api_key, base_args)
944
+ @logger.warn "Search indexing failed." unless command
945
+ end
946
+ end
947
+ if command
948
+ @logger.info "Running #{command}"
949
+ @logger.debug "AsciiDoc attributes: #{doc.attributes.to_yaml} "
950
+ system command
929
951
  end
930
- @logger.info "Running #{command}"
931
- @logger.debug "AsciiDoc attributes: #{doc.attributes.to_yaml} "
932
- system command
933
952
  jekyll_serve(build) if @jekyll_serve
934
953
  end
935
954
 
955
+ def load_jekyll_data build
956
+ data = {}
957
+ build.prop_files_array.each do |file|
958
+ settings = YAML.load_file(file)
959
+ data.merge!settings if settings
960
+ end
961
+ return data
962
+ end
963
+
936
964
  # ===
937
965
  # DEPLOY procs
938
966
  # ===
@@ -948,6 +976,20 @@ def jekyll_serve build
948
976
  system command
949
977
  end
950
978
 
979
+ def algolia_index_cmd build, apikey=nil, args
980
+ unless build.search and build.search['index']
981
+ @logger.warn "No index configuration found for build; jekyll-algolia operation skipped for this build."
982
+ return false
983
+ else
984
+ unless apikey
985
+ @logger.warn "No Algolia admin API key passed; skipping jekyll-algolia operation for this build."
986
+ return false
987
+ else
988
+ return "ALGOLIA_INDEX_NAME='#{build.search['index']}' ALGOLIA_API_KEY='#{apikey}' bundle exec jekyll algolia #{@search_index_dry} #{args} "
989
+ end
990
+ end
991
+ end
992
+
951
993
  # ===
952
994
  # Text manipulation Classes, Modules, procs, etc
953
995
  # ===
@@ -1115,7 +1157,7 @@ command_parser = OptionParser.new do|opts|
1115
1157
  @quiet = true
1116
1158
  end
1117
1159
 
1118
- opts.on("--explicit", "Log explicit step descriptions to console as build progresses. (Otherwise writes to file at #{@build_dir}/pre/config-explainer.adoc .)") do |n|
1160
+ opts.on("--explain", "Log explicit step descriptions to console as build progresses. (Otherwise writes to file at #{@build_dir}/pre/config-explainer.adoc .)") do |n|
1119
1161
  explainer_init("STDOUT")
1120
1162
  @explainer.level = Logger::INFO
1121
1163
  @logger.level = Logger::WARN # Suppress all those INFO-level messages
@@ -1130,21 +1172,27 @@ command_parser = OptionParser.new do|opts|
1130
1172
  @jekyll_serve = true
1131
1173
  end
1132
1174
 
1133
- opts.on("--var KEY=VALUE", "For passing variables directly to the 'vars.' scope template via command line, for non-config builds only.") do |n|
1134
- pair = {}
1135
- k,v = n.split('=')
1136
- pair[k] = v
1137
- @passed_vars.merge!pair
1175
+ opts.on("--search-index-push", "Runs any search indexing configured in the build step and pushes to Algolia.") do
1176
+ @search_index = true
1177
+ end
1178
+
1179
+ opts.on("--search-index-dry", "Runs any search indexing configured in the build step but does NOT push to Algolia.") do
1180
+ @search_index = true
1181
+ @search_index_dry = "--dry-run"
1182
+ end
1183
+
1184
+ opts.on("--search-api-key=STRING", "Passes Algolia Admin API key (which you should keep out of Git).") do |n|
1185
+ @search_api_key = n
1138
1186
  end
1139
1187
 
1140
- opts.on("-x", "--cvar KEY=VALUE", "For sending variables to the 'vars.' scope of the config file and triggering Liquid parsing of config.") do |n|
1188
+ opts.on("-v", "--var KEY=VALUE", "For passing variables directly to the 'vars.' scope of a template; for dynamic configs, too.") do |n|
1141
1189
  pair = {}
1142
1190
  k,v = n.split('=')
1143
1191
  pair[k] = v
1144
- @passed_configvars.merge!pair
1192
+ @passed_vars.merge!pair
1145
1193
  end
1146
1194
 
1147
- opts.on("--parse-config", "Preprocess the designated configuration file as a Liquid template. Superfluous when passing -x/--cvar arguments.") do
1195
+ opts.on("--parse-config", "Preprocess the designated configuration file as a Liquid template. Superfluous when passing -v/--var arguments.") do
1148
1196
  @parseconfig = true
1149
1197
  end
1150
1198
 
@@ -1176,5 +1224,5 @@ unless @config_file
1176
1224
  end
1177
1225
  else
1178
1226
  @logger.debug "Executing... config_build"
1179
- config_build(@config_file, @passed_configvars, @parseconfig)
1227
+ config_build(@config_file, @passed_vars, @parseconfig)
1180
1228
  end
@@ -1,3 +1,3 @@
1
1
  module Liquidoc
2
- VERSION = "0.9.0"
2
+ VERSION = "0.9.1"
3
3
  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.9.0
4
+ version: 0.9.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brian Dominick
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-08-17 00:00:00.000000000 Z
11
+ date: 2018-08-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler