Module: FastComments::Jekyll::ConfigResolver

Defined in:
lib/fastcomments/jekyll/config_resolver.rb

Overview

Merges widget config from three sources and camelizes the result. Precedence (later wins): global _config.yml defaults < page-derived < tag attributes.

Class Method Summary collapse

Class Method Details

.derive(context) ⇒ Object



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/fastcomments/jekyll/config_resolver.rb', line 30

def derive(context)
  page = page(context)
  # Real Jekyll exposes `page` as a Liquid::Drop (Jekyll::Drops::DocumentDrop),
  # not a Hash; both answer page["url"]/page["title"], so guard on [] not Hash.
  return {} unless page.respond_to?(:[])

  derived = {}
  derived["url_id"] = page["url"] if page["url"]

  site = site(context)
  site_url = site ? site.config["url"] : nil
  derived["url"] = "#{site_url}#{page["url"]}" if site_url && !site_url.to_s.empty? && page["url"]

  derived["page_title"] = page["title"] if page["title"]
  derived
end

.global_config(context) ⇒ Object



22
23
24
25
26
27
28
# File 'lib/fastcomments/jekyll/config_resolver.rb', line 22

def global_config(context)
  site = site(context)
  return {} unless site

  config = site.config["fastcomments"]
  config.is_a?(Hash) ? config : {}
end

.page(context) ⇒ Object



55
56
57
58
59
# File 'lib/fastcomments/jekyll/config_resolver.rb', line 55

def page(context)
  context["page"]
rescue StandardError
  nil
end

.resolve(context, attrs, derive_page_context: false) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
# File 'lib/fastcomments/jekyll/config_resolver.rb', line 8

def resolve(context, attrs, derive_page_context: false)
  merged = {}

  global_config(context).each { |key, value| merged[key.to_s] = value }

  if derive_page_context
    derive(context).each { |key, value| merged[key] = value unless value.nil? }
  end

  attrs.each { |key, value| merged[key.to_s] = value }

  KeyMapper.map_keys(Util.sanitize_config(merged))
end

.site(context) ⇒ Object



47
48
49
50
51
52
53
# File 'lib/fastcomments/jekyll/config_resolver.rb', line 47

def site(context)
  registers = context.registers
  site = registers && registers[:site]
  site if site.respond_to?(:config)
rescue StandardError
  nil
end