module GovukTechDocs

Constants

VERSION

Public Class Methods

configure(context, options = {}) click to toggle source

Configure the tech docs template

@param options [Hash] @option options [Hash] livereload Options to pass to the `livereload`

extension. Hash with symbols as keys.
# File lib/govuk_tech_docs.rb, line 32
def self.configure(context, options = {})
  context.activate :sprockets

  context.sprockets.append_path File.join(__dir__, "../node_modules/govuk-frontend/")
  context.sprockets.append_path File.join(__dir__, "./source")

  context.activate :syntax

  context.files.watch :source, path: "#{__dir__}/source"

  context.set :markdown_engine, :redcarpet
  context.set :markdown,
              renderer: TechDocsHTMLRenderer.new(
                with_toc_data: true,
                api: true,
                context: context,
              ),
              fenced_code_blocks: true,
              tables: true,
              no_intra_emphasis: true

  # Reload the browser automatically whenever files change
  context.configure :development do
    activate :livereload, options[:livereload].to_h
  end

  context.configure :build do
    activate :autoprefixer
    activate :minify_javascript, ignore: ["/raw_assets/*"]
  end

  config_file = ENV.fetch("CONFIG_FILE", "config/tech-docs.yml")
  context.config[:tech_docs] = YAML.load_file(config_file).with_indifferent_access
  context.activate :unique_identifier
  context.activate :warning_text
  context.activate :api_reference

  context.helpers do
    include GovukTechDocs::TableOfContents::Helpers
    include GovukTechDocs::ContributionBanner

    def meta_tags
      @meta_tags ||= GovukTechDocs::MetaTags.new(config, current_page)
    end

    def current_page_review
      @current_page_review ||= GovukTechDocs::PageReview.new(current_page, config)
    end

    def format_date(date)
      date.strftime("%-e %B %Y")
    end

    def active_page(page_path)
      [
        page_path == "/" && current_page.path == "index.html",
        ("/" + current_page.path) == page_path,
        current_page.data.parent != nil && current_page.data.parent.to_s == page_path,
      ].any?
    end
  end

  context.page "/*.xml", layout: false
  context.page "/*.json", layout: false
  context.page "/*.txt", layout: false

  context.ready do
    redirects = GovukTechDocs::Redirects.new(context).redirects

    redirects.each do |from, to|
      context.redirect from, to
    end
  end

  if context.config[:tech_docs][:enable_search]
    context.activate :search do |search|
      search.resources = [""]

      search.fields = {
        title:   { boost: 100, store: true, required: true },
        content: { boost: 50, store: true },
        url:     { index: false, store: true },
      }

      search.pipeline_remove = %w[stopWordFilter]

      search.tokenizer_separator = '/[\s\-/]+/'
    end
  end
end

Public Instance Methods

active_page(page_path) click to toggle source
# File lib/govuk_tech_docs.rb, line 85
def active_page(page_path)
  [
    page_path == "/" && current_page.path == "index.html",
    ("/" + current_page.path) == page_path,
    current_page.data.parent != nil && current_page.data.parent.to_s == page_path,
  ].any?
end
current_page_review() click to toggle source
# File lib/govuk_tech_docs.rb, line 77
def current_page_review
  @current_page_review ||= GovukTechDocs::PageReview.new(current_page, config)
end
format_date(date) click to toggle source
# File lib/govuk_tech_docs.rb, line 81
def format_date(date)
  date.strftime("%-e %B %Y")
end
meta_tags() click to toggle source
# File lib/govuk_tech_docs.rb, line 73
def meta_tags
  @meta_tags ||= GovukTechDocs::MetaTags.new(config, current_page)
end