diff options
Diffstat (limited to 'scripts/lib/glfm/render_static_html.rb')
-rw-r--r-- | scripts/lib/glfm/render_static_html.rb | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/scripts/lib/glfm/render_static_html.rb b/scripts/lib/glfm/render_static_html.rb new file mode 100644 index 00000000000..d533e586fe1 --- /dev/null +++ b/scripts/lib/glfm/render_static_html.rb @@ -0,0 +1,50 @@ +# frozen_string_literal: true + +require_relative 'constants' +require_relative 'shared' + +# Purpose: +# - Reads a set of markdown examples from a hash which has been serialized to disk +# - Converts each example to static HTML using the `markdown` helper +# - Writes the HTML for each example to a hash which is serialized to disk +# +# It should be invoked via `rails runner` from the Rails root directory. +# It is intended to be invoked from the `update_example_snapshots.rb` script class. +module Glfm + class RenderStaticHtml + include Constants + include Shared + + def process + markdown_yml_path = ARGV[0] + markdown_hash = YAML.load_file(markdown_yml_path) + + # NOTE: We COULD parallelize this loop like the Javascript WYSIWYG example generation does, + # but it wouldn't save much time. Most of the time is spent loading the Rails environment + # via `rails runner`. In initial testing, this loop only took ~7 seconds while the entire + # script took ~20 seconds. Unfortunately, there's no easy way to execute + # `ApplicationController.helpers.markdown` without using `rails runner` + static_html_hash = markdown_hash.transform_values do |markdown| + ApplicationController.helpers.markdown(markdown) + end + + static_html_tempfile_path = Dir::Tmpname.create(STATIC_HTML_TEMPFILE_BASENAME) do |path| + tmpfile = File.open(path, 'w') + YAML.dump(static_html_hash, tmpfile) + tmpfile.close + end + + # Write the path to the output file to stdout + print static_html_tempfile_path + end + end +end + +# current_user must be in global scope for `markdown` helper to work. Currently it's not supported +# to pass it in the context. +def current_user + # TODO: This will likely need to be a more realistic user object for some of the GLFM examples + User.new +end + +Glfm::RenderStaticHtml.new.process |