algoliasearch-jekyll 0.5.3 → 0.6.0

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.
Files changed (62) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +4 -0
  3. data/Appraisals +8 -0
  4. data/CONTRIBUTING.md +15 -7
  5. data/Gemfile +1 -1
  6. data/Guardfile +14 -4
  7. data/README.md +1 -1
  8. data/algoliasearch-jekyll.gemspec +46 -33
  9. data/gemfiles/jekyll_v2.gemfile +21 -0
  10. data/gemfiles/jekyll_v3.gemfile +22 -0
  11. data/lib/record_extractor.rb +30 -12
  12. data/lib/version.rb +1 -1
  13. data/scripts/git_hooks/pre-push +1 -1
  14. data/scripts/test +4 -0
  15. data/scripts/test_ci +7 -0
  16. data/scripts/test_v2 +5 -0
  17. data/scripts/test_v3 +6 -0
  18. data/scripts/watch +4 -0
  19. data/scripts/watch_v2 +4 -0
  20. data/scripts/watch_v3 +4 -0
  21. data/spec/credential_checker_spec.rb +1 -1
  22. data/spec/fixtures/{_config.yml → jekyll_version_2/_config.yml} +4 -0
  23. data/spec/fixtures/{_layouts → jekyll_version_2/_layouts}/default.html +0 -0
  24. data/spec/fixtures/{_my-collection → jekyll_version_2/_my-collection}/collection-item.html +0 -0
  25. data/spec/fixtures/{_my-collection → jekyll_version_2/_my-collection}/collection-item.md +0 -0
  26. data/spec/fixtures/{_posts → jekyll_version_2/_posts}/2015-07-02-test-post.md +0 -0
  27. data/spec/fixtures/{_posts → jekyll_version_2/_posts}/2015-07-03-test-post-again.md +0 -0
  28. data/spec/fixtures/{about.md → jekyll_version_2/about.md} +0 -0
  29. data/spec/fixtures/{api_key_dir → jekyll_version_2/api_key_dir}/_algolia_api_key +0 -0
  30. data/spec/fixtures/{_site → jekyll_version_2}/assets/ring.png +0 -0
  31. data/spec/fixtures/{authors.html → jekyll_version_2/authors.html} +0 -0
  32. data/spec/fixtures/{excluded.html → jekyll_version_2/excluded.html} +0 -0
  33. data/spec/fixtures/{hierarchy.md → jekyll_version_2/hierarchy.md} +0 -0
  34. data/spec/fixtures/{index.html → jekyll_version_2/index.html} +0 -0
  35. data/spec/fixtures/{page2 → jekyll_version_2/page2}/index.html +0 -0
  36. data/spec/fixtures/{weight.md → jekyll_version_2/weight.md} +0 -0
  37. data/spec/fixtures/jekyll_version_3/_config.yml +17 -0
  38. data/spec/fixtures/jekyll_version_3/_layouts/default.html +6 -0
  39. data/spec/fixtures/{_site/my-collection → jekyll_version_3/_my-collection}/collection-item.html +5 -1
  40. data/spec/fixtures/jekyll_version_3/_my-collection/collection-item.md +7 -0
  41. data/spec/fixtures/jekyll_version_3/_posts/2015-07-02-test-post.md +32 -0
  42. data/spec/fixtures/jekyll_version_3/_posts/2015-07-03-test-post-again.md +7 -0
  43. data/spec/fixtures/jekyll_version_3/about.md +34 -0
  44. data/spec/fixtures/jekyll_version_3/api_key_dir/_algolia_api_key +1 -0
  45. data/spec/fixtures/{assets → jekyll_version_3/assets}/ring.png +0 -0
  46. data/spec/fixtures/{_site → jekyll_version_3}/authors.html +4 -0
  47. data/spec/fixtures/{_site → jekyll_version_3}/excluded.html +4 -0
  48. data/spec/fixtures/jekyll_version_3/hierarchy.md +35 -0
  49. data/spec/fixtures/jekyll_version_3/index.html +13 -0
  50. data/spec/fixtures/jekyll_version_3/page2/index.html +6 -0
  51. data/spec/fixtures/jekyll_version_3/weight.md +19 -0
  52. data/spec/record_extractor_spec.rb +131 -5
  53. data/spec/spec_helper.rb +47 -26
  54. metadata +56 -43
  55. data/spec/fixtures/_site/2015/07/02/test-post.html +0 -26
  56. data/spec/fixtures/_site/2015/07/03/test-post-again.html +0 -3
  57. data/spec/fixtures/_site/about.html +0 -31
  58. data/spec/fixtures/_site/hierarchy.html +0 -31
  59. data/spec/fixtures/_site/index.html +0 -17
  60. data/spec/fixtures/_site/page2/index.html +0 -40
  61. data/spec/fixtures/_site/weight.html +0 -15
  62. data/spec/spec_helper_jekyll.rb +0 -4
data/scripts/watch_v2 ADDED
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env bash
2
+ cd "$(dirname "$BASH_SOURCE")"/..
3
+
4
+ guard -g jekyll_v2
data/scripts/watch_v3 ADDED
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env bash
2
+ cd "$(dirname "$BASH_SOURCE")"/..
3
+
4
+ guard -g jekyll_v3
@@ -3,7 +3,7 @@ require 'spec_helper'
3
3
  describe(AlgoliaSearchCredentialChecker) do
4
4
  let(:config) do
5
5
  {
6
- 'source' => File.expand_path('./spec/fixtures'),
6
+ 'source' => fixture_path,
7
7
  'markdown_ext' => 'md,mkd',
8
8
  'algolia' => {
9
9
  'application_id' => 'APPID',
@@ -5,8 +5,12 @@ markdown_ext: 'md,mkd'
5
5
  paginate: 1
6
6
  timezone: Europe/Paris
7
7
 
8
+ gems:
9
+ - jekyll-paginate
10
+
8
11
  algolia:
9
12
  application_id: APPID
10
13
  index_name: INDEXNAME
11
14
  excluded_files:
12
15
  - excluded.html
16
+
@@ -0,0 +1,17 @@
1
+ collections:
2
+ my-collection:
3
+ output: true
4
+ markdown_ext: 'md,mkd'
5
+ paginate: 1
6
+ timezone: Europe/Paris
7
+
8
+ algolia:
9
+ application_id: APPID
10
+ index_name: INDEXNAME
11
+ excluded_files:
12
+ - excluded.html
13
+
14
+ # Jekyll 3.0 extracted the secondary features into their own plugins
15
+ gems:
16
+ - jekyll-paginate
17
+
@@ -0,0 +1,6 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en-us">
3
+ <body>
4
+ {{ content }}
5
+ </body>
6
+ </html>
@@ -1,2 +1,6 @@
1
+ ---
2
+ title: Collection Item
3
+ ---
4
+
1
5
  <p>The grandest of omelettes. Those that feast on dragon eggs often find that there
2
- is very little they would not dare to do.</p>
6
+ is very little they would not dare to do.</p>
@@ -0,0 +1,7 @@
1
+ ---
2
+ title: Collection Item
3
+ custom: Foo
4
+ ---
5
+
6
+ The grandest of omelettes. Those that feast on dragon eggs often find that there
7
+ is very little they would not dare to do.
@@ -0,0 +1,32 @@
1
+ ---
2
+ title: "Test post"
3
+ tags:
4
+ - tag
5
+ - another tag
6
+ custom: Foo
7
+ ---
8
+
9
+ Introduction text that also includes [some link](https://www.algolia.com). To
10
+ add a bit of fancy, we will also __bold__ and _italicize_ some text.
11
+
12
+ # Main title
13
+
14
+ We like writing stuff and then indexing it in a very fast engine. Here is why
15
+ a fast engine is good for you:
16
+
17
+ * fast
18
+ * fast
19
+ * fast
20
+ * and fast
21
+
22
+ ## Built with hands
23
+
24
+ All this text was typed with my own hands, on my own keyboard. I also did use
25
+ a Chair© and a Table™.
26
+
27
+ ## Features
28
+
29
+ The whole plugin is composed of parts of `code`, and sometime even
30
+ <code>&lt;code&gt;</code>.
31
+
32
+ Code is __✔ checked__ and errors are __✘ deleted__.
@@ -0,0 +1,7 @@
1
+ ---
2
+ title: "Test post again"
3
+ ---
4
+
5
+ The goal of this post is simply to trigger pagination, and see that we do not
6
+ index the pagination results.
7
+
@@ -0,0 +1,34 @@
1
+ ---
2
+ title: About page
3
+ custom: Foo
4
+ ---
5
+
6
+ # Heading 1
7
+
8
+ Text 1
9
+
10
+ ## Heading 2
11
+
12
+ Text 2
13
+
14
+ ### Heading 3
15
+
16
+ Text 3
17
+
18
+ - item 1
19
+ - item 2
20
+ - item 3
21
+
22
+ ### Another Heading 3
23
+
24
+ <p id="text4">Another text 4</p>
25
+
26
+ <h2 id="heading2b">Another Heading 2</h2>
27
+
28
+ Another `<text>` 5
29
+
30
+ ### Last Heading 3
31
+
32
+ <div>Just a div</div>
33
+
34
+ <div><p>Last text 6 </p></div>
@@ -0,0 +1 @@
1
+ APIKEY_FROM_FILE
@@ -1 +1,5 @@
1
+ ---
2
+ title: Authors
3
+ ---
4
+
1
5
  <p>This is an HTML page</p>
@@ -1 +1,5 @@
1
+ ---
2
+ title: Excluded file
3
+ ---
4
+
1
5
  <p>This should not be indexed</p>
@@ -0,0 +1,35 @@
1
+ ---
2
+ title: Hierarchy test
3
+ ---
4
+
5
+ # H1
6
+
7
+ TEXT1-H1
8
+
9
+ ## H2A
10
+
11
+ TEXT2-H2A-H1
12
+
13
+ TEXT3-H2A-H1
14
+
15
+ ## H2B
16
+
17
+ TEXT4-H2B-H1
18
+
19
+ ### H3A
20
+
21
+ TEXT5-H3-H2B-H1
22
+
23
+ <div>
24
+ <h4>H4</h4>
25
+ <p>TEXT7-H4-H3-H2B-H1</p>
26
+ </div>
27
+
28
+ ## H2C
29
+
30
+ TEXT8-H2C-H1
31
+
32
+ ### H3B `<code>`
33
+
34
+ TEXT9-H3B-H2C-H1
35
+
@@ -0,0 +1,13 @@
1
+ ---
2
+ layout: default
3
+ title: Home
4
+ ---
5
+
6
+ This default index page is used to display the paginated posts
7
+
8
+ {% for post in paginator.posts %}
9
+ <a href="{{ site.baseurl }}{{ post.url }}">
10
+ {{ post.title }}
11
+ </a>
12
+ {{ post.content }}
13
+ {% endfor %}
@@ -0,0 +1,6 @@
1
+ ---
2
+ layout: default
3
+ ---
4
+
5
+ This pagination page should not be indexed.
6
+
@@ -0,0 +1,19 @@
1
+ ---
2
+ title: Weight test
3
+ ---
4
+
5
+ # AAA BBB CCC DDD
6
+
7
+ aaa xxx aaa xxx aaa
8
+
9
+ ## AAA BBB
10
+
11
+ aaa bbb
12
+
13
+ ## CCC DDD
14
+
15
+ ccc ddd
16
+
17
+ ### DDD
18
+
19
+ aaa bbb ccc dddd
@@ -10,6 +10,12 @@ describe(AlgoliaSearchRecordExtractor) do
10
10
  let(:weight_page_file) { extractor.new(site.file_by_name('weight.md')) }
11
11
  let(:document_file) { extractor.new(site.file_by_name('collection-item.md')) }
12
12
 
13
+ before(:each) do
14
+ # Disabling the logs, while still allowing to spy them
15
+ Jekyll.logger = double('Specific Mock Logger').as_null_object
16
+ @logger = Jekyll.logger.writer
17
+ end
18
+
13
19
  describe 'metadata' do
14
20
  it 'gets metadata from page' do
15
21
  # Given
@@ -28,7 +34,6 @@ describe(AlgoliaSearchRecordExtractor) do
28
34
  actual = post_file.metadata
29
35
 
30
36
  # Then
31
- expect(actual[:type]).to eq 'post'
32
37
  expect(actual[:slug]).to eq 'test-post'
33
38
  expect(actual[:title]).to eq 'Test post'
34
39
  expect(actual[:url]).to eq '/2015/07/02/test-post.html'
@@ -57,12 +62,135 @@ describe(AlgoliaSearchRecordExtractor) do
57
62
  expect(actual[:url]).to eq '/my-collection/collection-item.html'
58
63
  expect(actual[:custom]).to eq 'Foo'
59
64
  end
65
+
66
+ if restrict_jekyll_version(more_than: '3.0')
67
+ describe 'Jekyll > 3.0' do
68
+ it 'should not throw any deprecation warnings' do
69
+ # Given
70
+
71
+ # When
72
+ post_file.metadata
73
+
74
+ # Expect
75
+ expect(@logger).to_not have_received(:warn)
76
+ end
77
+ end
78
+
79
+ end
80
+ end
81
+
82
+ describe 'slug' do
83
+ it 'gets it from data if available' do
84
+ # Given
85
+ post_file.file.data['slug'] = 'foo'
86
+ allow(post_file.file).to receive(:respond_to?).with(:slug) do
87
+ false
88
+ end
89
+
90
+ # When
91
+ actual = post_file.slug
92
+
93
+ # Then
94
+ expect(actual).to eql('foo')
95
+ end
96
+
97
+ it 'gets it from the root if not in data' do
98
+ # Given
99
+ post_file.file.data.delete 'slug'
100
+ allow(post_file.file).to receive(:slug).and_return('foo')
101
+
102
+ # When
103
+ actual = post_file.slug
104
+
105
+ # Then
106
+ expect(actual).to eql('foo')
107
+ end
108
+
109
+ it 'gets it from the data even if in the root' do
110
+ # Given
111
+ post_file.file.data['slug'] = 'foo'
112
+ allow(post_file.file).to receive(:slug).and_return('bar')
113
+
114
+ # When
115
+ actual = post_file.slug
116
+
117
+ # Then
118
+ expect(actual).to eql('foo')
119
+ end
120
+
121
+ it 'guesses it from the path if not found' do
122
+ # Given
123
+ post_file.file.data.delete 'slug'
124
+ allow(post_file.file).to receive(:respond_to?).with(:slug) do
125
+ false
126
+ end
127
+ allow(post_file.file).to receive(:path) do
128
+ '/path/to/file/foo.html'
129
+ end
130
+
131
+ # When
132
+ actual = post_file.slug
133
+
134
+ # # Then
135
+ expect(actual).to eql('foo')
136
+ end
60
137
  end
61
138
 
62
139
  describe 'tags' do
63
- it 'returns nil if no tag found' do
64
- expect(page_file.tags).to eq nil
140
+ it 'returns tags in data if available' do
141
+ # Given
142
+ post_file.file.data['tags'] = %w(foo bar)
143
+ allow(post_file.file).to receive(:respond_to?).with(:tags) do
144
+ false
145
+ end
146
+
147
+ # When
148
+ actual = post_file.tags
149
+
150
+ # Then
151
+ expect(actual).to include('foo', 'bar')
152
+ end
153
+
154
+ it 'returns tags at the root if not in data' do
155
+ # Given
156
+ post_file.file.data.delete 'tags'
157
+ allow(post_file.file).to receive(:tags).and_return(%w(foo bar))
158
+
159
+ # When
160
+ actual = post_file.tags
161
+
162
+ # Then
163
+ expect(actual).to include('foo', 'bar')
164
+ end
165
+
166
+ it 'returns tags in data even if in root' do
167
+ # Given
168
+ post_file.file.data['tags'] = %w(foo bar)
169
+ allow(post_file.file).to receive(:tags).and_return(%w(js css))
170
+
171
+ # When
172
+ actual = post_file.tags
173
+
174
+ # Then
175
+ expect(actual).to include('foo', 'bar')
176
+ end
177
+
178
+ it 'parses tags as string if they are another type' do
179
+ # Given
180
+ tag_foo = double('Extended Tag', to_s: 'foo')
181
+ tag_bar = double('Extended Tag', to_s: 'bar')
182
+ post_file.file.data['tags'] = [tag_foo, tag_bar]
183
+ allow(post_file.file).to receive(:respond_to?).with(:tags) do
184
+ false
185
+ end
186
+
187
+ # When
188
+ actual = post_file.tags
189
+
190
+ # Then
191
+ expect(actual).to include('foo', 'bar')
65
192
  end
193
+
66
194
  it 'extract tags from front matter' do
67
195
  # Given
68
196
  actual = post_file.tags
@@ -390,8 +518,6 @@ describe(AlgoliaSearchRecordExtractor) do
390
518
 
391
519
  # Then
392
520
  expect(actual).to eq 1
393
-
394
- # I don't seem fit for that
395
521
  end
396
522
 
397
523
  it 'should still work with non-string keys' do