This repository was archived by the owner on Feb 19, 2025. It is now read-only.
forked from algolia/jekyll-algolia
-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathjekyll-algolia.rb
92 lines (79 loc) · 2.92 KB
/
jekyll-algolia.rb
1
2
3
4
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
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
# frozen_string_literal: true
require 'jekyll/commands/algolia'
require 'date'
module Jekyll
# Requirable file, loading all dependencies.
# Methods here are called by the main `jekyll algolia` command
module Algolia
require 'jekyll/algolia/configurator'
require 'jekyll/algolia/error_handler'
require 'jekyll/algolia/extractor'
require 'jekyll/algolia/file_browser'
require 'jekyll/algolia/hooks'
require 'jekyll/algolia/indexer'
require 'jekyll/algolia/logger'
require 'jekyll/algolia/progress_bar'
require 'jekyll/algolia/shrinker'
require 'jekyll/algolia/utils'
require 'jekyll/algolia/version'
MissingCredentialsError = Class.new(StandardError)
# Public: Init the Algolia module
#
# config - A hash of Jekyll config option (merge of _config.yml options and
# options passed on the command line)
#
# The gist of the plugin works by instanciating a Jekyll site,
# monkey-patching its `write` method and building it.
def self.init(config = {})
# Monkey patch Jekyll and external plugins
load_overwrites
config = Configurator.init(config).config
@site = Jekyll::Algolia::Site.new(config)
unless Configurator.assert_valid_credentials
raise(
MissingCredentialsError,
"One or more credentials were not found for site at: #{@site.source}"
)
end
Configurator.warn_of_deprecated_options
if Configurator.dry_run?
Logger.log('W:==== THIS IS A DRY RUN ====')
Logger.log('W: - No records will be pushed to your index')
Logger.log('W: - No settings will be updated on your index')
end
self
end
# Public: Monkey patch Jekyll and external plugins so they don't interfere
# with our plugin
#
# Note: This is only loaded when running `jekyll algolia` so should not have
# any impact on regular builds
def self.load_overwrites
require 'jekyll/algolia/overwrites/githubpages-configuration'
require 'jekyll/algolia/overwrites/jekyll-algolia-site'
require 'jekyll/algolia/overwrites/jekyll-document'
require 'jekyll/algolia/overwrites/jekyll-paginate-pager'
require 'jekyll/algolia/overwrites/jekyll-tags-link'
# Register our own tags to overwrite the default tags
Liquid::Template.register_tag('link', JekyllAlgoliaLink)
end
# Public: Run the main Algolia module
#
# Actually "process" the site, which will acts just like a regular `jekyll
# build` except that our monkey patched `write` method will be called
# instead.
#
# Note: The internal list of files to be processed will only be created when
# calling .process
def self.run
Logger.log('I:Processing site...')
@site.process
end
# Public: Get access to the Jekyll site
#
# Tests will need access to the inner Jekyll website so we expose it here
def self.site
@site
end
end
end