Module: GovukTechDocs

Defined in:
lib/govuk_tech_docs.rb,
lib/govuk_tech_docs/pages.rb,
lib/govuk_tech_docs/version.rb,
lib/govuk_tech_docs/meta_tags.rb,
lib/govuk_tech_docs/redirects.rb,
lib/govuk_tech_docs/page_review.rb,
lib/govuk_tech_docs/contribution_banner.rb,
lib/govuk_tech_docs/tech_docs_html_renderer.rb,
lib/govuk_tech_docs/table_of_contents/heading.rb,
lib/govuk_tech_docs/table_of_contents/helpers.rb,
lib/govuk_tech_docs/unique_identifier_extension.rb,
lib/govuk_tech_docs/unique_identifier_generator.rb,
lib/govuk_tech_docs/table_of_contents/heading_tree.rb,
lib/govuk_tech_docs/table_of_contents/headings_builder.rb,
lib/govuk_tech_docs/api_reference/api_reference_renderer.rb,
lib/govuk_tech_docs/api_reference/api_reference_extension.rb,
lib/govuk_tech_docs/table_of_contents/heading_tree_builder.rb,
lib/govuk_tech_docs/table_of_contents/heading_tree_renderer.rb

Defined Under Namespace

Modules: ApiReference, ContributionBanner, TableOfContents Classes: MetaTags, PageReview, Pages, Redirects, SourceUrls, TechDocsHTMLRenderer, UniqueIdentifierExtension, UniqueIdentifierGenerator

Constant Summary collapse

VERSION =
"1.6.1".freeze

Class Method Summary collapse

Class Method Details

.configure(context, options = {}) ⇒ Object

Configure the tech docs template

Parameters:

  • options (Hash) (defaults to: {})

Options Hash (options):

  • livereload (Hash)

    Options to pass to the ‘livereload` extension. Hash with symbols as keys.



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
# File 'lib/govuk_tech_docs.rb', line 31

def self.configure(context, options = {})
  context.activate :autoprefixer
  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 :minify_css
    activate :minify_javascript
  end

  context.config[:tech_docs] = YAML.load_file('config/tech-docs.yml').with_indifferent_access
  context.activate :unique_identifier

  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