Class: JekyllBookshop::SiteData

Inherits:
Object
  • Object
show all
Defined in:
lib/jekyll-bookshop/site-data.rb

Class Method Summary collapse

Class Method Details

.extract(site) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/jekyll-bookshop/site-data.rb', line 5

def self.extract(site)
  @site = site

  payload = {}
  @site.collections.each_pair do |collection, items|
    payload[collection] = items.docs.map do |doc|
      doc.data.merge(hydrate_document_fields(doc))
    end
  end

  payload["data"] = {}
  @site.data.each_pair do |key, value|
    next if key.to_s.start_with?("_bookshop")

    payload["data"][key] = value
  end

  payload["baseurl"] = @site.baseurl
  payload["title"] = @site.config["title"]

  @site.data["_bookshop_site_data"] = { "site" => payload }

  update_browser_pages

  Jekyll.logger.info "Bookshop:",
                     "Bookshop site data generated"
end

.hydrate_document_excerpt(document, hydrated_doc) ⇒ Object



40
41
42
43
44
# File 'lib/jekyll-bookshop/site-data.rb', line 40

def self.hydrate_document_excerpt(document, hydrated_doc)
  hydrated_doc.merge!({
    "excerpt" => document.data["excerpt"].output,
  })
end

.hydrate_document_fields(document) ⇒ Object



33
34
35
36
37
38
# File 'lib/jekyll-bookshop/site-data.rb', line 33

def self.hydrate_document_fields(document)
  keys = %w(content url date relative_path permalink)
  hydrated_doc = {}
  keys.each { |key| hydrated_doc[key] = document.send(key) }
  hydrate_document_excerpt(document, hydrated_doc)
end

.update_browser_pagesObject



46
47
48
49
50
51
52
53
54
55
56
# File 'lib/jekyll-bookshop/site-data.rb', line 46

def self.update_browser_pages
  @site.pages.each do |page|
    next unless @site.data["_bookshop_data_pages"]&.include?(page.url)

    page.output = page.output.gsub(
      %r!bookshop_browser_site_data = null!,
      "bookshop_browser_site_data = #{@site.data["_bookshop_site_data"].to_json.gsub(%r!</script!i, "<\\/script")}"
    )
  end
  @site.data["_bookshop_data_pages"] = nil
end