Class: JekyllPagesApiSearch::SearchIndexBuilder

Inherits:
Object
  • Object
show all
Defined in:
lib/jekyll_pages_api_search/search.rb

Constant Summary collapse

DIRNAME =
File.dirname(__FILE__).freeze
COMPILE_SCRIPT =
File.join(DIRNAME, 'search.js').freeze
INDEX_FILE =
'search-index.json'.freeze

Class Method Summary collapse

Class Method Details

.build_index(site) ⇒ Object



12
13
14
15
16
17
18
19
20
21
22
# File 'lib/jekyll_pages_api_search/search.rb', line 12

def self.build_index(site)
  corpus_page = find_corpus_page(site.pages)
  raise 'Pages API corpus not found' if corpus_page == nil

  search_config = site.config['jekyll_pages_api_search']
  index_fields = JSON.generate(search_config['index_fields'] || {})
  input = "{\"corpus\": #{corpus_page.output}," \
    "\"indexFields\": #{index_fields}}"
  compile(input,
    JekyllPagesApi::PageWithoutAFile.new(site, site.source, '', INDEX_FILE))
end

.compile(input, index_page) ⇒ Object



28
29
30
31
32
33
34
# File 'lib/jekyll_pages_api_search/search.rb', line 28

def self.compile(input, index_page)
  compiler = open("|node #{COMPILE_SCRIPT}", File::RDWR)
  compiler.puts(input)
  compiler.close_write
  index_page.output = compiler.gets
  index_page
end

.find_corpus_page(pages) ⇒ Object



24
25
26
# File 'lib/jekyll_pages_api_search/search.rb', line 24

def self.find_corpus_page(pages)
  pages.each {|page| return page if page.name == 'pages.json'}
end