Class: Jekyll::Spaceship::Config

Inherits:
Object
  • Object
show all
Defined in:
lib/jekyll-spaceship/cores/config.rb

Constant Summary collapse

CONFIG_NAME =
'jekyll-spaceship'
DEFAULT_CONFIG =
{
  'processors' => [
    'table-processor',
    'mathjax-processor',
    'plantuml-processor',
    'mermaid-processor',
    'polyfill-processor',
    'media-processor',
    'emoji-processor',
    'element-processor'
  ]
}
@@store =
{}

Class Method Summary collapse

Class Method Details

.deep_dig(obj, key) ⇒ Object



34
35
36
37
38
39
40
41
42
# File 'lib/jekyll-spaceship/cores/config.rb', line 34

def self.deep_dig(obj, key)
  if obj.respond_to?(:key?) && obj.key?(key)
    obj[key]
  elsif obj.respond_to?(:each)
    result = nil
    obj.find { |*a| result = self.deep_dig(a.last, key) }
    result
  end
end

.deep_merge(first, second) ⇒ Object



21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/jekyll-spaceship/cores/config.rb', line 21

def self.deep_merge(first, second)
  merger = proc do |_, f, s|
    if Hash === f && Hash === s
      f.merge(s, &merger)
    elsif Array === f && Array === s
      s || f
    else
      [:undefined, nil, :nil].include?(s) ? f : s
    end
  end
  first.merge(second.to_h, &merger)
end

.load(config = {}) ⇒ Object



49
50
51
52
53
54
55
56
# File 'lib/jekyll-spaceship/cores/config.rb', line 49

def self.load(config = {})
  config = deep_merge(
    { CONFIG_NAME => DEFAULT_CONFIG },
    config
  )[CONFIG_NAME]
  @@store = config
  self.use_processors(config)
end

.load_configObject



64
65
66
67
68
69
70
71
72
# File 'lib/jekyll-spaceship/cores/config.rb', line 64

def self.load_config
  # post load site config for `group :jekyll_plugin`
  Jekyll::Hooks.register :site, :after_init do |site|
    # load config
    self.load(site.config)
    # dispatch site after_init event
    Manager.dispatch(site, :site, :after_init)
  end
end

.store(section, default) ⇒ Object



44
45
46
47
# File 'lib/jekyll-spaceship/cores/config.rb', line 44

def self.store(section, default)
  return @@store[section] if default.nil?
  @@store[section] = deep_merge(default, @@store[section])
end

.use_processors(config) ⇒ Object



58
59
60
61
62
# File 'lib/jekyll-spaceship/cores/config.rb', line 58

def self.use_processors(config)
  config['processors'].each do |processor|
    Register.use processor
  end
end