jekyll-algolia 1.0.0 → 1.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CONTRIBUTING.md +51 -30
- data/README.md +69 -27
- data/lib/errors/invalid_credentials.txt +12 -0
- data/lib/errors/invalid_index_name.txt +9 -0
- data/lib/errors/missing_api_key.txt +15 -0
- data/lib/errors/missing_application_id.txt +11 -0
- data/lib/errors/missing_index_name.txt +18 -0
- data/lib/errors/no_records_found.txt +14 -0
- data/lib/errors/record_too_big.txt +27 -0
- data/lib/errors/record_too_big_api.txt +10 -0
- data/lib/errors/settings_manually_edited.txt +17 -0
- data/lib/errors/too_many_records.txt +14 -0
- data/lib/errors/unknown_application_id.txt +16 -0
- data/lib/errors/unknown_settings.txt +12 -0
- data/lib/jekyll-algolia.rb +45 -60
- data/lib/jekyll/algolia/configurator.rb +137 -44
- data/lib/jekyll/algolia/error_handler.rb +36 -48
- data/lib/jekyll/algolia/extractor.rb +16 -6
- data/lib/jekyll/algolia/file_browser.rb +161 -68
- data/lib/jekyll/algolia/hooks.rb +18 -6
- data/lib/jekyll/algolia/indexer.rb +283 -145
- data/lib/jekyll/algolia/logger.rb +39 -8
- data/lib/jekyll/algolia/overwrites/githubpages-configuration.rb +32 -0
- data/lib/jekyll/algolia/overwrites/jekyll-algolia-site.rb +151 -0
- data/lib/jekyll/algolia/overwrites/jekyll-document.rb +13 -0
- data/lib/jekyll/algolia/overwrites/jekyll-paginate-pager.rb +20 -0
- data/lib/jekyll/algolia/overwrites/jekyll-tags-link.rb +33 -0
- data/lib/jekyll/algolia/progress_bar.rb +27 -0
- data/lib/jekyll/algolia/shrinker.rb +112 -0
- data/lib/jekyll/algolia/utils.rb +118 -2
- data/lib/jekyll/algolia/version.rb +1 -1
- data/lib/jekyll/commands/algolia.rb +3 -14
- metadata +75 -31
- data/errors/invalid_credentials.txt +0 -10
- data/errors/invalid_credentials_for_tmp_index.txt +0 -17
- data/errors/invalid_index_name.txt +0 -11
- data/errors/missing_api_key.txt +0 -17
- data/errors/missing_application_id.txt +0 -12
- data/errors/missing_index_name.txt +0 -19
- data/errors/no_records_found.txt +0 -20
- data/errors/record_too_big.txt +0 -25
- data/errors/unknown_application_id.txt +0 -20
- data/errors/unknown_settings.txt +0 -15
data/lib/jekyll/algolia/utils.rb
CHANGED
@@ -6,6 +6,19 @@ module Jekyll
|
|
6
6
|
module Algolia
|
7
7
|
# Generic language-wide utils
|
8
8
|
module Utils
|
9
|
+
# Public: Allow redefining an instance method on the fly with a new one
|
10
|
+
#
|
11
|
+
# instance - The instance to overwrite
|
12
|
+
# method - The method symbol to overwrite
|
13
|
+
# block - The new block to use for replacing (as a proc)
|
14
|
+
#
|
15
|
+
# Solution found on
|
16
|
+
# https://stackoverflow.com/questions/803020/redefining-a-single-ruby-method-on-a-single-instance-with-a-lambda/16631789
|
17
|
+
def self.monkey_patch(instance, method, block)
|
18
|
+
metaclass = class << instance; self; end
|
19
|
+
metaclass.send(:define_method, method, block)
|
20
|
+
end
|
21
|
+
|
9
22
|
# Public: Convert a hash with string keys to a hash with symbol keys
|
10
23
|
#
|
11
24
|
# hash - The input hash, with string keys
|
@@ -13,22 +26,36 @@ module Jekyll
|
|
13
26
|
Hash[hash.map { |key, value| [key.to_sym, value] }]
|
14
27
|
end
|
15
28
|
|
29
|
+
# Public: Check if a variable is an instance of a specific class
|
30
|
+
#
|
31
|
+
# input - the variable to test
|
32
|
+
# classname - the string representation of the class
|
33
|
+
def self.instance_of?(input, classname)
|
34
|
+
input.instance_of? Object.const_get(classname)
|
35
|
+
rescue StandardError
|
36
|
+
# The class might not even exist
|
37
|
+
false
|
38
|
+
end
|
39
|
+
|
16
40
|
# Public: Convert an HTML string to its content only
|
17
41
|
#
|
18
42
|
# html - String representation of the HTML node
|
19
43
|
def self.html_to_text(html)
|
44
|
+
return nil if html.nil?
|
45
|
+
|
20
46
|
text = Nokogiri::HTML(html).text
|
21
47
|
text.tr("\n", ' ').squeeze(' ').strip
|
22
48
|
end
|
23
49
|
|
24
|
-
# Public: Remove all keys with a nil value or an empty
|
50
|
+
# Public: Remove all keys with a nil value or an empty string from a hash
|
25
51
|
#
|
26
52
|
# hash - The input hash
|
27
53
|
def self.compact_empty(hash)
|
28
54
|
new_hash = {}
|
29
55
|
hash.each do |key, value|
|
30
56
|
next if value.nil?
|
31
|
-
next if value.
|
57
|
+
next if value.is_a?(String) && value.empty?
|
58
|
+
|
32
59
|
new_hash[key] = value
|
33
60
|
end
|
34
61
|
new_hash
|
@@ -59,10 +86,99 @@ module Jekyll
|
|
59
86
|
# It is basically a wrapper around [].find, handling more edge-cases
|
60
87
|
def self.find_by_key(items, key, value)
|
61
88
|
return nil if items.nil?
|
89
|
+
|
62
90
|
items.find do |item|
|
63
91
|
item[key] == value
|
64
92
|
end
|
65
93
|
end
|
94
|
+
|
95
|
+
# Public: Convert an object into an object that can easily be converted to
|
96
|
+
# JSON, to be stored as a record
|
97
|
+
#
|
98
|
+
# item - The object to convert
|
99
|
+
#
|
100
|
+
# It will keep any string, number, boolean,boolean,array or nested object,
|
101
|
+
# but will try to stringify other objects, excluding the one that contain
|
102
|
+
# a unique identifier once serialized.
|
103
|
+
def self.jsonify(item)
|
104
|
+
simple_types = [
|
105
|
+
NilClass,
|
106
|
+
TrueClass, FalseClass,
|
107
|
+
Integer, Float,
|
108
|
+
String
|
109
|
+
]
|
110
|
+
# Integer arrived in Ruby 2.4. Before that it was Fixnum and Bignum
|
111
|
+
if Gem::Version.new(RUBY_VERSION) < Gem::Version.new('2.4.0')
|
112
|
+
# rubocop:disable Lint/UnifiedInteger
|
113
|
+
simple_types += [Fixnum, Bignum]
|
114
|
+
# rubocop:enable Lint/UnifiedInteger
|
115
|
+
end
|
116
|
+
return item if simple_types.member?(item.class)
|
117
|
+
|
118
|
+
# Recursive types
|
119
|
+
return item.map { |value| jsonify(value) } if item.is_a?(Array)
|
120
|
+
if item.is_a?(Hash)
|
121
|
+
return item.map { |key, value| [key, jsonify(value)] }.to_h
|
122
|
+
end
|
123
|
+
|
124
|
+
# Can't be stringified, discard it
|
125
|
+
return nil unless item.respond_to?(:to_s)
|
126
|
+
|
127
|
+
# Discard also if is a serialized version with unique identifier
|
128
|
+
stringified = item.to_s
|
129
|
+
return nil if match?(stringified, /#<[^ ].*@[0-9]* .*>/)
|
130
|
+
|
131
|
+
stringified
|
132
|
+
end
|
133
|
+
|
134
|
+
# Public: Get a hash representing the difference between two hashes
|
135
|
+
#
|
136
|
+
# It only checks that all keys of alpha are also in beta, with the same
|
137
|
+
# value. If not, it remember what was the value of beta and return it in
|
138
|
+
# the output
|
139
|
+
def self.diff_keys(alpha, beta)
|
140
|
+
diff = {}
|
141
|
+
alpha.each do |key, value|
|
142
|
+
diff[key] = beta[key] if beta[key] != value
|
143
|
+
end
|
144
|
+
|
145
|
+
return nil if diff.empty?
|
146
|
+
|
147
|
+
diff
|
148
|
+
end
|
149
|
+
|
150
|
+
# Public: Split a long text into lines of specific length
|
151
|
+
#
|
152
|
+
# It takes care to not cut words
|
153
|
+
def self.split_lines(input, max_length)
|
154
|
+
# Force splitting on actual new lines first
|
155
|
+
if input.include?("\n")
|
156
|
+
output = []
|
157
|
+
input.split("\n").each do |line|
|
158
|
+
output += split_lines(line, max_length)
|
159
|
+
end
|
160
|
+
return output
|
161
|
+
end
|
162
|
+
|
163
|
+
output = []
|
164
|
+
words = input.split(' ')
|
165
|
+
current_line = words.shift || ''
|
166
|
+
test_line = '' # must be defined outside of the loop
|
167
|
+
|
168
|
+
words.each do |word|
|
169
|
+
test_line = "#{current_line} #{word}"
|
170
|
+
if test_line.length > max_length
|
171
|
+
output << current_line
|
172
|
+
current_line = word
|
173
|
+
next
|
174
|
+
end
|
175
|
+
current_line = test_line
|
176
|
+
end
|
177
|
+
output << current_line
|
178
|
+
|
179
|
+
# Making sure all lines are the same length
|
180
|
+
output.map { |line| line.ljust(max_length, ' ') }
|
181
|
+
end
|
66
182
|
end
|
67
183
|
end
|
68
184
|
end
|
@@ -14,20 +14,6 @@ module Jekyll
|
|
14
14
|
'--config CONFIG_FILE[,CONFIG_FILE2,...]',
|
15
15
|
Array,
|
16
16
|
'Custom configuration file'
|
17
|
-
command.option 'future',
|
18
|
-
'--future',
|
19
|
-
'Index posts with a future date'
|
20
|
-
command.option 'limit_posts',
|
21
|
-
'--limit_posts MAX_POSTS',
|
22
|
-
Integer,
|
23
|
-
'Limits the number of posts to parse and index'
|
24
|
-
command.option 'show_drafts',
|
25
|
-
'-D',
|
26
|
-
'--drafts',
|
27
|
-
'Index posts in the _drafts folder'
|
28
|
-
command.option 'unpublished',
|
29
|
-
'--unpublished',
|
30
|
-
'Index posts that were marked as unpublished'
|
31
17
|
command.option 'dry_run',
|
32
18
|
'--dry-run',
|
33
19
|
'-n',
|
@@ -35,6 +21,9 @@ module Jekyll
|
|
35
21
|
command.option 'verbose',
|
36
22
|
'--verbose',
|
37
23
|
'Display more information on what is indexed'
|
24
|
+
command.option 'force_settings',
|
25
|
+
'--force-settings',
|
26
|
+
'Force updating of the index settings'
|
38
27
|
|
39
28
|
command.action do |_, options|
|
40
29
|
configuration = configuration_from_options(options)
|
metadata
CHANGED
@@ -1,14 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jekyll-algolia
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tim Carry
|
8
|
+
- Sylvain Utard
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date:
|
12
|
+
date: 2019-10-21 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
15
|
name: algolia_html_extractor
|
@@ -16,28 +17,28 @@ dependencies:
|
|
16
17
|
requirements:
|
17
18
|
- - "~>"
|
18
19
|
- !ruby/object:Gem::Version
|
19
|
-
version: '2.
|
20
|
+
version: '2.6'
|
20
21
|
type: :runtime
|
21
22
|
prerelease: false
|
22
23
|
version_requirements: !ruby/object:Gem::Requirement
|
23
24
|
requirements:
|
24
25
|
- - "~>"
|
25
26
|
- !ruby/object:Gem::Version
|
26
|
-
version: '2.
|
27
|
+
version: '2.6'
|
27
28
|
- !ruby/object:Gem::Dependency
|
28
29
|
name: algoliasearch
|
29
30
|
requirement: !ruby/object:Gem::Requirement
|
30
31
|
requirements:
|
31
32
|
- - "~>"
|
32
33
|
- !ruby/object:Gem::Version
|
33
|
-
version: '1.
|
34
|
+
version: '1.26'
|
34
35
|
type: :runtime
|
35
36
|
prerelease: false
|
36
37
|
version_requirements: !ruby/object:Gem::Requirement
|
37
38
|
requirements:
|
38
39
|
- - "~>"
|
39
40
|
- !ruby/object:Gem::Version
|
40
|
-
version: '1.
|
41
|
+
version: '1.26'
|
41
42
|
- !ruby/object:Gem::Dependency
|
42
43
|
name: filesize
|
43
44
|
requirement: !ruby/object:Gem::Requirement
|
@@ -56,58 +57,64 @@ dependencies:
|
|
56
57
|
name: jekyll
|
57
58
|
requirement: !ruby/object:Gem::Requirement
|
58
59
|
requirements:
|
59
|
-
- - "
|
60
|
+
- - ">="
|
60
61
|
- !ruby/object:Gem::Version
|
61
|
-
version: '3.
|
62
|
+
version: '3.6'
|
63
|
+
- - "<"
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '5.0'
|
62
66
|
type: :runtime
|
63
67
|
prerelease: false
|
64
68
|
version_requirements: !ruby/object:Gem::Requirement
|
65
69
|
requirements:
|
66
|
-
- - "
|
70
|
+
- - ">="
|
67
71
|
- !ruby/object:Gem::Version
|
68
|
-
version: '3.
|
72
|
+
version: '3.6'
|
73
|
+
- - "<"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '5.0'
|
69
76
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
77
|
+
name: json
|
71
78
|
requirement: !ruby/object:Gem::Requirement
|
72
79
|
requirements:
|
73
80
|
- - "~>"
|
74
81
|
- !ruby/object:Gem::Version
|
75
|
-
version: '
|
82
|
+
version: '2.0'
|
76
83
|
type: :runtime
|
77
84
|
prerelease: false
|
78
85
|
version_requirements: !ruby/object:Gem::Requirement
|
79
86
|
requirements:
|
80
87
|
- - "~>"
|
81
88
|
- !ruby/object:Gem::Version
|
82
|
-
version: '
|
89
|
+
version: '2.0'
|
83
90
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
91
|
+
name: nokogiri
|
85
92
|
requirement: !ruby/object:Gem::Requirement
|
86
93
|
requirements:
|
87
94
|
- - "~>"
|
88
95
|
- !ruby/object:Gem::Version
|
89
|
-
version: '
|
96
|
+
version: '1.6'
|
90
97
|
type: :runtime
|
91
98
|
prerelease: false
|
92
99
|
version_requirements: !ruby/object:Gem::Requirement
|
93
100
|
requirements:
|
94
101
|
- - "~>"
|
95
102
|
- !ruby/object:Gem::Version
|
96
|
-
version: '
|
103
|
+
version: '1.6'
|
97
104
|
- !ruby/object:Gem::Dependency
|
98
|
-
name:
|
105
|
+
name: progressbar
|
99
106
|
requirement: !ruby/object:Gem::Requirement
|
100
107
|
requirements:
|
101
108
|
- - "~>"
|
102
109
|
- !ruby/object:Gem::Version
|
103
|
-
version: '1.
|
110
|
+
version: '1.9'
|
104
111
|
type: :runtime
|
105
112
|
prerelease: false
|
106
113
|
version_requirements: !ruby/object:Gem::Requirement
|
107
114
|
requirements:
|
108
115
|
- - "~>"
|
109
116
|
- !ruby/object:Gem::Version
|
110
|
-
version: '1.
|
117
|
+
version: '1.9'
|
111
118
|
- !ruby/object:Gem::Dependency
|
112
119
|
name: verbal_expressions
|
113
120
|
requirement: !ruby/object:Gem::Requirement
|
@@ -122,6 +129,20 @@ dependencies:
|
|
122
129
|
- - "~>"
|
123
130
|
- !ruby/object:Gem::Version
|
124
131
|
version: 0.1.5
|
132
|
+
- !ruby/object:Gem::Dependency
|
133
|
+
name: awesome_print
|
134
|
+
requirement: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - "~>"
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '1.8'
|
139
|
+
type: :development
|
140
|
+
prerelease: false
|
141
|
+
version_requirements: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - "~>"
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '1.8'
|
125
146
|
- !ruby/object:Gem::Dependency
|
126
147
|
name: coveralls
|
127
148
|
requirement: !ruby/object:Gem::Requirement
|
@@ -164,6 +185,20 @@ dependencies:
|
|
164
185
|
- - "~>"
|
165
186
|
- !ruby/object:Gem::Version
|
166
187
|
version: '4.3'
|
188
|
+
- !ruby/object:Gem::Dependency
|
189
|
+
name: guard
|
190
|
+
requirement: !ruby/object:Gem::Requirement
|
191
|
+
requirements:
|
192
|
+
- - "~>"
|
193
|
+
- !ruby/object:Gem::Version
|
194
|
+
version: '2.14'
|
195
|
+
type: :development
|
196
|
+
prerelease: false
|
197
|
+
version_requirements: !ruby/object:Gem::Requirement
|
198
|
+
requirements:
|
199
|
+
- - "~>"
|
200
|
+
- !ruby/object:Gem::Version
|
201
|
+
version: '2.14'
|
167
202
|
- !ruby/object:Gem::Dependency
|
168
203
|
name: guard-rspec
|
169
204
|
requirement: !ruby/object:Gem::Requirement
|
@@ -249,23 +284,25 @@ dependencies:
|
|
249
284
|
- !ruby/object:Gem::Version
|
250
285
|
version: '0.10'
|
251
286
|
description: Index all your content into Algolia by running `jekyll algolia`
|
252
|
-
email:
|
287
|
+
email: support@algolia.com
|
253
288
|
executables: []
|
254
289
|
extensions: []
|
255
290
|
extra_rdoc_files: []
|
256
291
|
files:
|
257
292
|
- CONTRIBUTING.md
|
258
293
|
- README.md
|
259
|
-
- errors/invalid_credentials.txt
|
260
|
-
- errors/
|
261
|
-
- errors/
|
262
|
-
- errors/
|
263
|
-
- errors/
|
264
|
-
- errors/
|
265
|
-
- errors/
|
266
|
-
- errors/
|
267
|
-
- errors/
|
268
|
-
- errors/
|
294
|
+
- lib/errors/invalid_credentials.txt
|
295
|
+
- lib/errors/invalid_index_name.txt
|
296
|
+
- lib/errors/missing_api_key.txt
|
297
|
+
- lib/errors/missing_application_id.txt
|
298
|
+
- lib/errors/missing_index_name.txt
|
299
|
+
- lib/errors/no_records_found.txt
|
300
|
+
- lib/errors/record_too_big.txt
|
301
|
+
- lib/errors/record_too_big_api.txt
|
302
|
+
- lib/errors/settings_manually_edited.txt
|
303
|
+
- lib/errors/too_many_records.txt
|
304
|
+
- lib/errors/unknown_application_id.txt
|
305
|
+
- lib/errors/unknown_settings.txt
|
269
306
|
- lib/jekyll-algolia.rb
|
270
307
|
- lib/jekyll/algolia/configurator.rb
|
271
308
|
- lib/jekyll/algolia/error_handler.rb
|
@@ -274,6 +311,13 @@ files:
|
|
274
311
|
- lib/jekyll/algolia/hooks.rb
|
275
312
|
- lib/jekyll/algolia/indexer.rb
|
276
313
|
- lib/jekyll/algolia/logger.rb
|
314
|
+
- lib/jekyll/algolia/overwrites/githubpages-configuration.rb
|
315
|
+
- lib/jekyll/algolia/overwrites/jekyll-algolia-site.rb
|
316
|
+
- lib/jekyll/algolia/overwrites/jekyll-document.rb
|
317
|
+
- lib/jekyll/algolia/overwrites/jekyll-paginate-pager.rb
|
318
|
+
- lib/jekyll/algolia/overwrites/jekyll-tags-link.rb
|
319
|
+
- lib/jekyll/algolia/progress_bar.rb
|
320
|
+
- lib/jekyll/algolia/shrinker.rb
|
277
321
|
- lib/jekyll/algolia/utils.rb
|
278
322
|
- lib/jekyll/algolia/version.rb
|
279
323
|
- lib/jekyll/commands/algolia.rb
|
@@ -297,7 +341,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
297
341
|
version: '0'
|
298
342
|
requirements: []
|
299
343
|
rubyforge_project:
|
300
|
-
rubygems_version: 2.
|
344
|
+
rubygems_version: 2.5.2.3
|
301
345
|
signing_key:
|
302
346
|
specification_version: 4
|
303
347
|
summary: Index your Jekyll content into Algolia
|
@@ -1,10 +0,0 @@
|
|
1
|
-
E: [✗ Error] Invalid credentials
|
2
|
-
E:
|
3
|
-
E: The jekyll-algolia plugin could not connect to your application ID using the
|
4
|
-
E: API key your provided.
|
5
|
-
W:
|
6
|
-
W: Make sure your API key has access to your {application_id} application.
|
7
|
-
I:
|
8
|
-
I: You can find your API key in your Algolia dashboard here:
|
9
|
-
I: https://www.algolia.com/licensing
|
10
|
-
I:
|
@@ -1,17 +0,0 @@
|
|
1
|
-
E: [✗ Error] Invalid credentials for temporary index
|
2
|
-
E:
|
3
|
-
E: The jekyll-algolia plugin could not access your index with the API key you
|
4
|
-
E: provided.
|
5
|
-
W:
|
6
|
-
W: When using the `atomic` indexing mode, we will push all your content to a
|
7
|
-
W: temporary index, then overwrite the actual index with it. The API key you
|
8
|
-
W: defined should have access rights on both.
|
9
|
-
I:
|
10
|
-
I: Make sure your API key has access:
|
11
|
-
I: - {index_name}
|
12
|
-
I: - {index_name_tmp}
|
13
|
-
I:
|
14
|
-
I: You can configure API keys from your dashboard:
|
15
|
-
I: https://www.algolia.com/apps/{application_id}/api-keys/restricted
|
16
|
-
I:
|
17
|
-
I:
|