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/dss_tech_docs.rb, line 32
def self.configure(context, options = {})
  context.activate :sprockets
  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_css, ignore: ['/raw_assets/*']
    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 = [
        'stopWordFilter'
      ]

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

Public Instance Methods

active_page(page_path) click to toggle source
# File lib/dss_tech_docs.rb, line 82
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/dss_tech_docs.rb, line 74
def current_page_review
  @current_page_review ||= GovukTechDocs::PageReview.new(current_page, config)
end
format_date(date) click to toggle source
# File lib/dss_tech_docs.rb, line 78
def format_date(date)
  date.strftime('%-e %B %Y')
end
meta_tags() click to toggle source
# File lib/dss_tech_docs.rb, line 70
def meta_tags
  @meta_tags ||= GovukTechDocs::MetaTags.new(config, current_page)
end