jekyll-algolia 1.3.1 → 1.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5d547736b3282c2c6785883b020f3dc257eccab5
4
- data.tar.gz: c6d8d3425babfbeb511edd10e010202796781a69
3
+ metadata.gz: bf886389ae5ad938db693d1bc2ed35e2b89015d3
4
+ data.tar.gz: 252509afafa7dd89faea1ed3dc7aa9590da1a9be
5
5
  SHA512:
6
- metadata.gz: b3742dc353e318baa82f2fc34aefa9ee3ac1edcca07e7e17cb7b0595dd88a7e28e802b951e5194650a55c9a2a6cd4e5e6f192d1f93a16aa30b1236420784b6be
7
- data.tar.gz: 72ecdb419401a45183b0f6cd8541d20f3931604387f1d102370c49bb55d90dec157015d5d2aea0afe48edeaf39516377a910b43b0940696c3fa54c293bd6cb72
6
+ metadata.gz: 3a4472b586bbd24f67ee82c4e1bdb8505789d50296b5604b4be388fa25df123545c5e949b8e7caada3276e28a4f1a9f0270a0ae5013f08d1c47d17df0238fc27
7
+ data.tar.gz: 78946a3ec46e391260479c1e2a24b131c3627d86f4b643f8e884b8cb183376317e95827600036b402c703ad2f796023d7f939777961ed809e70f40581b5f3221
@@ -1,7 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'jekyll/commands/algolia'
4
- require 'jekyll/algolia/overwrites'
4
+ require 'jekyll/algolia/overwrites/jekyll-algolia-site'
5
+ require 'jekyll/algolia/overwrites/jekyll-document'
6
+ require 'jekyll/algolia/overwrites/jekyll-tags-link'
5
7
  require 'date'
6
8
 
7
9
  module Jekyll
@@ -34,6 +36,9 @@ module Jekyll
34
36
 
35
37
  Configurator.warn_of_deprecated_options
36
38
 
39
+ # Register our own tags to overwrite the default tags
40
+ Liquid::Template.register_tag('link', JekyllAlgoliaLink)
41
+
37
42
  if Configurator.dry_run?
38
43
  Logger.log('W:==== THIS IS A DRY RUN ====')
39
44
  Logger.log('W: - No records will be pushed to your index')
@@ -62,136 +67,5 @@ module Jekyll
62
67
  def self.site
63
68
  @site
64
69
  end
65
-
66
- # A Jekyll::Site subclass that overrides process from the parent class to
67
- # create JSON records out of rendered documents and push those records to
68
- # Algolia instead of writing files to disk.
69
- class Site < Jekyll::Site
70
- # We expose a way to reset the collection, as it will be needed in the
71
- # tests
72
- attr_writer :collections
73
-
74
- # Public: Overwriting the parent method
75
- #
76
- # This will prepare the website, gathering all files, excluding the one we
77
- # don't need to index, then render them (converting to HTML), the finally
78
- # calling `push` to push to Algolia
79
- def process
80
- # Default Jekyll preflight
81
- reset
82
- read
83
- generate
84
-
85
- # Removing all files that won't be indexed, so we don't waste time
86
- # rendering them
87
- keep_only_indexable_files
88
-
89
- # Starting the rendering progress bar
90
- init_rendering_progress_bar
91
-
92
- # Converting them to HTML
93
- render
94
-
95
- # Pushing them Algolia
96
- push
97
- end
98
-
99
- # Public: Return the number of pages/documents to index
100
- def indexable_item_count
101
- count = @pages.length
102
- @collections.each_value { |collection| count += collection.docs.length }
103
- count
104
- end
105
-
106
- # Public: Init the rendering progress bar, incrementing it for each
107
- # rendered item
108
- #
109
- # This uses Jekyll post_render hooks, listening to both pages and
110
- # documents
111
- def init_rendering_progress_bar
112
- progress_bar = ProgressBar.create(
113
- total: indexable_item_count,
114
- format: 'Rendering to HTML (%j%%) |%B|'
115
- )
116
- Jekyll::Hooks.register :pages, :post_render do |_|
117
- progress_bar.increment
118
- end
119
-
120
- Jekyll::Hooks.register :documents, :post_render do |_|
121
- progress_bar.increment
122
- end
123
- end
124
-
125
- # Public: Filtering a list of items to only keep the one that are
126
- # indexable.
127
- #
128
- # items - List of Pages/Documents
129
- #
130
- # Note: It also sets the layout to nil, to further speed up the rendering
131
- def indexable_list(items)
132
- new_list = []
133
- items.each do |item|
134
- next unless FileBrowser.indexable?(item)
135
-
136
- item.data = {} if item.data.nil?
137
- item.data['layout'] = nil
138
- new_list << item
139
- end
140
- new_list
141
- end
142
-
143
- # Public: Removing non-indexable Pages, Posts and Documents from the
144
- # internals
145
- def keep_only_indexable_files
146
- @pages = indexable_list(@pages)
147
-
148
- # Applying to each collections
149
- @collections.each_value do |collection|
150
- collection.docs = indexable_list(collection.docs)
151
- end
152
-
153
- # Remove all static files
154
- @static_files = []
155
- end
156
-
157
- # Public: Extract records from every file and index them
158
- def push
159
- records = []
160
- files = []
161
- progress_bar = ProgressBar.create(
162
- total: indexable_item_count,
163
- format: 'Extracting records (%j%%) |%B|'
164
- )
165
- each_site_file do |file|
166
- # Even if we cleared the list of documents/pages beforehand, some
167
- # files might still sneak up to this point (like static files added to
168
- # a collection directory), so we check again if they can really be
169
- # indexed.
170
- next unless FileBrowser.indexable?(file)
171
-
172
- path = FileBrowser.relative_path(file.path)
173
-
174
- Logger.verbose("I:Extracting records from #{path}")
175
- file_records = Extractor.run(file)
176
-
177
- files << file
178
- records += file_records
179
-
180
- progress_bar.increment
181
- end
182
-
183
- # Applying the user hook on the whole list of records
184
- records = Hooks.apply_all(records, self)
185
-
186
- # Adding a unique objectID to each record
187
- records.map! do |record|
188
- Extractor.add_unique_object_id(record)
189
- end
190
-
191
- Logger.verbose("I:Found #{files.length} files")
192
-
193
- Indexer.run(records)
194
- end
195
- end
196
70
  end
197
71
  end
@@ -0,0 +1,144 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Jekyll
4
+ module Algolia
5
+ # A Jekyll::Site subclass that overrides process from the parent class to
6
+ # create JSON records out of rendered documents and push those records to
7
+ # Algolia instead of writing files to disk.
8
+ class Site < Jekyll::Site
9
+ # We expose a way to reset the collection, as it will be needed in the
10
+ # tests
11
+ attr_writer :collections
12
+
13
+ attr_reader :original_site_files
14
+
15
+ # Public: Overwriting the parent method
16
+ #
17
+ # This will prepare the website, gathering all files, excluding the one we
18
+ # don't need to index, then render them (converting to HTML), the finally
19
+ # calling `push` to push to Algolia
20
+ def process
21
+ # Default Jekyll preflight
22
+ reset
23
+ read
24
+ generate
25
+
26
+ # Removing all files that won't be indexed, so we don't waste time
27
+ # rendering them
28
+ keep_only_indexable_files
29
+
30
+ # Starting the rendering progress bar
31
+ init_rendering_progress_bar
32
+
33
+ # Converting them to HTML
34
+ render
35
+
36
+ # Pushing them Algolia
37
+ push
38
+ end
39
+
40
+ # Public: Return the number of pages/documents to index
41
+ def indexable_item_count
42
+ count = @pages.length
43
+ @collections.each_value { |collection| count += collection.docs.length }
44
+ count
45
+ end
46
+
47
+ # Public: Init the rendering progress bar, incrementing it for each
48
+ # rendered item
49
+ #
50
+ # This uses Jekyll post_render hooks, listening to both pages and
51
+ # documents
52
+ def init_rendering_progress_bar
53
+ progress_bar = ProgressBar.create(
54
+ total: indexable_item_count,
55
+ format: 'Rendering to HTML (%j%%) |%B|'
56
+ )
57
+ Jekyll::Hooks.register :pages, :post_render do |_|
58
+ progress_bar.increment
59
+ end
60
+
61
+ Jekyll::Hooks.register :documents, :post_render do |_|
62
+ progress_bar.increment
63
+ end
64
+ end
65
+
66
+ # Public: Filtering a list of items to only keep the one that are
67
+ # indexable.
68
+ #
69
+ # items - List of Pages/Documents
70
+ #
71
+ # Note: It also sets the layout to nil, to further speed up the rendering
72
+ def indexable_list(items)
73
+ new_list = []
74
+ items.each do |item|
75
+ next unless FileBrowser.indexable?(item)
76
+
77
+ item.data = {} if item.data.nil?
78
+ item.data['layout'] = nil
79
+ new_list << item
80
+ end
81
+ new_list
82
+ end
83
+
84
+ # Public: Removing non-indexable Pages, Posts and Documents from the
85
+ # internals
86
+ def keep_only_indexable_files
87
+ @original_site_files = {
88
+ pages: @pages,
89
+ collections: @collections,
90
+ static_files: @static_files
91
+ }
92
+
93
+ @pages = indexable_list(@pages)
94
+
95
+ # Applying to each collections
96
+ @collections.each_value do |collection|
97
+ collection.docs = indexable_list(collection.docs)
98
+ end
99
+
100
+ # Remove all static files
101
+ @static_files = []
102
+ end
103
+
104
+ # Public: Extract records from every file and index them
105
+ def push
106
+ records = []
107
+ files = []
108
+ progress_bar = ProgressBar.create(
109
+ total: indexable_item_count,
110
+ format: 'Extracting records (%j%%) |%B|'
111
+ )
112
+ each_site_file do |file|
113
+ # Even if we cleared the list of documents/pages beforehand, some
114
+ # files might still sneak up to this point (like static files added to
115
+ # a collection directory), so we check again if they can really be
116
+ # indexed.
117
+ next unless FileBrowser.indexable?(file)
118
+
119
+ path = FileBrowser.relative_path(file.path)
120
+
121
+ Logger.verbose("I:Extracting records from #{path}")
122
+ file_records = Extractor.run(file)
123
+
124
+ files << file
125
+ records += file_records
126
+
127
+ progress_bar.increment
128
+ end
129
+
130
+ # Applying the user hook on the whole list of records
131
+ records = Hooks.apply_all(records, self)
132
+
133
+ # Adding a unique objectID to each record
134
+ records.map! do |record|
135
+ Extractor.add_unique_object_id(record)
136
+ end
137
+
138
+ Logger.verbose("I:Found #{files.length} files")
139
+
140
+ Indexer.run(records)
141
+ end
142
+ end
143
+ end
144
+ end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ # The default `link` tag allow to link to a specific page, using its relative
4
+ # path. Because we might not be indexing the destination of the link, we might
5
+ # not have the representation of the page in our data. If that happens, the
6
+ # `link` tag fails.
7
+ #
8
+ # To fix that we'll overwrite the default `link` tag to loop over a backup copy
9
+ # of the original files (before we clean it for indexing)
10
+ #
11
+ # https://github.com/algolia/jekyll-algolia/issues/62
12
+ class JekyllAlgoliaLink < Jekyll::Tags::Link
13
+ def render(context)
14
+ original_files = context.registers[:site].original_site_files
15
+
16
+ original_files[:pages].each do |page|
17
+ return page.url if page.relative_path == @relative_path
18
+ end
19
+
20
+ original_files[:collections].each_value do |collection|
21
+ collection.docs.each do |item|
22
+ return item.url if item.relative_path == @relative_path
23
+ end
24
+ end
25
+
26
+ original_files[:static_files].each do |asset|
27
+ return asset.url if asset.relative_path == @relative_path
28
+ return asset.url if asset.relative_path == "/#{@relative_path}"
29
+ end
30
+
31
+ '/'
32
+ end
33
+ end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Jekyll
4
4
  module Algolia
5
- VERSION = '1.3.1'
5
+ VERSION = '1.3.2'
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jekyll-algolia
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.1
4
+ version: 1.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tim Carry
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-04-04 00:00:00.000000000 Z
11
+ date: 2018-04-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: algolia_html_extractor
@@ -303,7 +303,9 @@ files:
303
303
  - lib/jekyll/algolia/hooks.rb
304
304
  - lib/jekyll/algolia/indexer.rb
305
305
  - lib/jekyll/algolia/logger.rb
306
- - lib/jekyll/algolia/overwrites.rb
306
+ - lib/jekyll/algolia/overwrites/jekyll-algolia-site.rb
307
+ - lib/jekyll/algolia/overwrites/jekyll-document.rb
308
+ - lib/jekyll/algolia/overwrites/jekyll-tags-link.rb
307
309
  - lib/jekyll/algolia/progress_bar.rb
308
310
  - lib/jekyll/algolia/utils.rb
309
311
  - lib/jekyll/algolia/version.rb