algoliasearch-jekyll 0.7.0 → 0.8.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +15 -5
- data/algoliasearch-jekyll.gemspec +3 -3
- data/lib/credential_checker.rb +26 -3
- data/lib/push.rb +3 -2
- data/lib/version.rb +1 -1
- data/spec/credential_checker_spec.rb +128 -3
- data/spec/spec_helper.rb +1 -1
- data/txt/application_id_missing +2 -0
- data/txt/index_name_missing +2 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2ebfd20e06b278a2b943b37c75d7b3075779f48d
|
4
|
+
data.tar.gz: 2272b59b28c71753e7b7e15ade27807fcb8feaf4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 324e688e2753917e29d652832162e7feca773f2461681cc7cdcd008a36e735321c5d641448ecd7e497af4e551be66ec032446a2fc9340aa4bde71cfb4936499d
|
7
|
+
data.tar.gz: 90fcc05cc357873eb8b49ba3c8d35c5e2e00aaf796e762726c9b66f9e27e6aae3dd9caa8d42f6b42f5bd3c81ce497716e20a4b0e6f2c41a0063162efc119799d
|
data/README.md
CHANGED
@@ -12,7 +12,7 @@ Algolia index by simply running `jekyll algolia push`.
|
|
12
12
|
## Usage
|
13
13
|
|
14
14
|
```shell
|
15
|
-
$ jekyll algolia push
|
15
|
+
$ bundle exec jekyll algolia push
|
16
16
|
```
|
17
17
|
|
18
18
|
This will push the content of your jekyll website to your Algolia index.
|
@@ -32,7 +32,7 @@ source 'https://rubygems.org'
|
|
32
32
|
gem 'jekyll', '~> 2.5.3'
|
33
33
|
|
34
34
|
group :jekyll_plugins do
|
35
|
-
gem 'algoliasearch-jekyll', '~> 0.
|
35
|
+
gem 'algoliasearch-jekyll', '~> 0.7.0'
|
36
36
|
end
|
37
37
|
```
|
38
38
|
|
@@ -60,6 +60,10 @@ algolia:
|
|
60
60
|
index_name: 'your_index_name'
|
61
61
|
```
|
62
62
|
|
63
|
+
You can also define the `ALGOLIA_APPLICATION_ID` and `ALGOLIA_INDEX_NAME`
|
64
|
+
environment variables. If present, they will be used instead of the options in
|
65
|
+
`_config.yml`.
|
66
|
+
|
63
67
|
You write api key will be read from the `ALGOLIA_API_KEY` environment variable.
|
64
68
|
You can define it on the same line as your command, allowing you to type
|
65
69
|
`ALGOLIA_API_KEY='your_write_api_key' jekyll algolia push`.
|
@@ -149,11 +153,17 @@ The `AlgoliaSearchRecordExtractor` contains two methods (`custom_hook_each` and
|
|
149
153
|
`custom_hook_all`) that are here so you can overwrite them to add your custom
|
150
154
|
logic. They currently simply return the argument they take as input.
|
151
155
|
|
156
|
+
The best way to override them is to create a `./_plugins/search.rb` file, with
|
157
|
+
the following content:
|
158
|
+
|
152
159
|
```ruby
|
153
160
|
class AlgoliaSearchRecordExtractor
|
154
161
|
# Hook to modify a record after extracting
|
155
|
-
# `node` refers to the Nokogiri HTML node of the element
|
156
162
|
def custom_hook_each(item, node)
|
163
|
+
# `node` is a Nokogiri HTML node, so you can access its type through `node.name`
|
164
|
+
# or its classname through `node.attr('class')` for example
|
165
|
+
|
166
|
+
# Just return `nil` instead of `item` if you want to discard this record
|
157
167
|
item
|
158
168
|
end
|
159
169
|
|
@@ -210,8 +220,8 @@ version of the popular [Hyde theme][8].
|
|
210
220
|
## GitHub Pages
|
211
221
|
|
212
222
|
GitHub does not allow custom plugins to be run on GitHub Pages. This means that
|
213
|
-
you'll either have to run `jekyll algolia push` manually, or
|
214
|
-
to do it for you.
|
223
|
+
you'll either have to run `bundle exec jekyll algolia push` manually, or
|
224
|
+
configure TravisCI to do it for you.
|
215
225
|
|
216
226
|
[Travis CI][9] is an hosted continuous integration
|
217
227
|
service, and it's free for open-source projects. Properly configured, it can
|
@@ -2,16 +2,16 @@
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
3
|
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
|
-
# stub: algoliasearch-jekyll 0.
|
5
|
+
# stub: algoliasearch-jekyll 0.8.0 ruby lib
|
6
6
|
|
7
7
|
Gem::Specification.new do |s|
|
8
8
|
s.name = "algoliasearch-jekyll"
|
9
|
-
s.version = "0.
|
9
|
+
s.version = "0.8.0"
|
10
10
|
|
11
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
12
12
|
s.require_paths = ["lib"]
|
13
13
|
s.authors = ["Tim Carry"]
|
14
|
-
s.date = "2016-
|
14
|
+
s.date = "2016-07-13"
|
15
15
|
s.description = "Index all your pages and posts to an Algolia index with `jekyll algolia push`"
|
16
16
|
s.email = "tim@pixelastic.com"
|
17
17
|
s.extra_rdoc_files = [
|
data/lib/credential_checker.rb
CHANGED
@@ -26,6 +26,29 @@ class AlgoliaSearchCredentialChecker
|
|
26
26
|
nil
|
27
27
|
end
|
28
28
|
|
29
|
+
# Read key either from ENV or _config.yml
|
30
|
+
def get_key(env_name, config_key)
|
31
|
+
# First read in ENV
|
32
|
+
return ENV[env_name] if ENV[env_name]
|
33
|
+
|
34
|
+
# Otherwise read from _config.yml
|
35
|
+
if @config['algolia'] && @config['algolia'][config_key]
|
36
|
+
return @config['algolia'][config_key]
|
37
|
+
end
|
38
|
+
|
39
|
+
nil
|
40
|
+
end
|
41
|
+
|
42
|
+
# Read the application id either from the config file or from ENV
|
43
|
+
def application_id
|
44
|
+
get_key('ALGOLIA_APPLICATION_ID', 'application_id')
|
45
|
+
end
|
46
|
+
|
47
|
+
# Read the index name either from the config file or from ENV
|
48
|
+
def index_name
|
49
|
+
get_key('ALGOLIA_INDEX_NAME', 'index_name')
|
50
|
+
end
|
51
|
+
|
29
52
|
# Check that the API key is available
|
30
53
|
def check_api_key
|
31
54
|
return if api_key
|
@@ -35,14 +58,14 @@ class AlgoliaSearchCredentialChecker
|
|
35
58
|
|
36
59
|
# Check that the application id is defined
|
37
60
|
def check_application_id
|
38
|
-
return if
|
61
|
+
return if application_id
|
39
62
|
@logger.display('application_id_missing')
|
40
63
|
exit 1
|
41
64
|
end
|
42
65
|
|
43
66
|
# Check that the index name is defined
|
44
67
|
def check_index_name
|
45
|
-
return if
|
68
|
+
return if index_name
|
46
69
|
@logger.display('index_name_missing')
|
47
70
|
exit 1
|
48
71
|
end
|
@@ -55,7 +78,7 @@ class AlgoliaSearchCredentialChecker
|
|
55
78
|
check_index_name
|
56
79
|
|
57
80
|
Algolia.init(
|
58
|
-
application_id:
|
81
|
+
application_id: application_id,
|
59
82
|
api_key: api_key
|
60
83
|
)
|
61
84
|
|
data/lib/push.rb
CHANGED
@@ -176,12 +176,13 @@ class AlgoliaSearchJekyllPush < Jekyll::Command
|
|
176
176
|
end
|
177
177
|
|
178
178
|
def push(items)
|
179
|
-
AlgoliaSearchCredentialChecker.new(@config)
|
179
|
+
checker = AlgoliaSearchCredentialChecker.new(@config)
|
180
|
+
checker.assert_valid
|
180
181
|
|
181
182
|
Jekyll.logger.info '=== DRY RUN ===' if @is_dry_run
|
182
183
|
|
183
184
|
# Add items to a temp index, then rename it
|
184
|
-
index_name =
|
185
|
+
index_name = checker.index_name
|
185
186
|
index_name_tmp = "#{index_name}_tmp"
|
186
187
|
batch_add_items(items, create_index(index_name_tmp))
|
187
188
|
Algolia.move_index(index_name_tmp, index_name) unless @is_dry_run
|
data/lib/version.rb
CHANGED
@@ -59,6 +59,130 @@ describe(AlgoliaSearchCredentialChecker) do
|
|
59
59
|
end
|
60
60
|
end
|
61
61
|
|
62
|
+
describe 'check_api_key' do
|
63
|
+
it 'should exit with error if no API key' do
|
64
|
+
# Given
|
65
|
+
allow(checker).to receive(:api_key).and_return(nil)
|
66
|
+
allow(checker.logger).to receive(:display)
|
67
|
+
|
68
|
+
# When / Then
|
69
|
+
expect(-> { checker.check_api_key }).to raise_error SystemExit
|
70
|
+
end
|
71
|
+
|
72
|
+
it 'should do nothing when an API key is found' do
|
73
|
+
# Given
|
74
|
+
allow(checker).to receive(:api_key).and_return('APIKEY')
|
75
|
+
|
76
|
+
# When / Then
|
77
|
+
expect(-> { checker.check_api_key }).not_to raise_error
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
describe 'application_id' do
|
82
|
+
it 'reads value from the _config.yml file' do
|
83
|
+
# Given
|
84
|
+
|
85
|
+
# When
|
86
|
+
actual = checker.application_id
|
87
|
+
|
88
|
+
# Then
|
89
|
+
expect(actual).to eq 'APPID'
|
90
|
+
end
|
91
|
+
|
92
|
+
it 'reads from ENV var if set' do
|
93
|
+
# Given
|
94
|
+
stub_const('ENV', 'ALGOLIA_APPLICATION_ID' => 'APPLICATION_ID_FROM_ENV')
|
95
|
+
|
96
|
+
# When
|
97
|
+
actual = checker.application_id
|
98
|
+
|
99
|
+
# Then
|
100
|
+
expect(actual).to eq 'APPLICATION_ID_FROM_ENV'
|
101
|
+
end
|
102
|
+
|
103
|
+
it 'returns nil if no key found' do
|
104
|
+
# Given
|
105
|
+
config['algolia']['application_id'] = nil
|
106
|
+
|
107
|
+
# When
|
108
|
+
actual = checker.application_id
|
109
|
+
|
110
|
+
# Then
|
111
|
+
expect(actual).to be_nil
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
describe 'check_application_id' do
|
116
|
+
it 'should exit with error if no application ID' do
|
117
|
+
# Given
|
118
|
+
allow(checker).to receive(:application_id).and_return(nil)
|
119
|
+
allow(checker.logger).to receive(:display)
|
120
|
+
|
121
|
+
# When / Then
|
122
|
+
expect(-> { checker.check_application_id }).to raise_error SystemExit
|
123
|
+
end
|
124
|
+
|
125
|
+
it 'should do nothing when an application ID is found' do
|
126
|
+
# Given
|
127
|
+
allow(checker).to receive(:application_id).and_return('APPLICATIONID')
|
128
|
+
|
129
|
+
# When / Then
|
130
|
+
expect(-> { checker.check_application_id }).not_to raise_error
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
describe 'index_name' do
|
135
|
+
it 'reads value from the _config.yml file' do
|
136
|
+
# Given
|
137
|
+
|
138
|
+
# When
|
139
|
+
actual = checker.index_name
|
140
|
+
|
141
|
+
# Then
|
142
|
+
expect(actual).to eq 'INDEXNAME'
|
143
|
+
end
|
144
|
+
|
145
|
+
it 'reads from ENV var if set' do
|
146
|
+
# Given
|
147
|
+
stub_const('ENV', 'ALGOLIA_INDEX_NAME' => 'INDEX_NAME_FROM_ENV')
|
148
|
+
|
149
|
+
# When
|
150
|
+
actual = checker.index_name
|
151
|
+
|
152
|
+
# Then
|
153
|
+
expect(actual).to eq 'INDEX_NAME_FROM_ENV'
|
154
|
+
end
|
155
|
+
|
156
|
+
it 'returns nil if no key found' do
|
157
|
+
# Given
|
158
|
+
config['algolia']['index_name'] = nil
|
159
|
+
|
160
|
+
# When
|
161
|
+
actual = checker.index_name
|
162
|
+
|
163
|
+
# Then
|
164
|
+
expect(actual).to be_nil
|
165
|
+
end
|
166
|
+
end
|
167
|
+
describe 'check_index_name' do
|
168
|
+
it 'should exit with error if no index name' do
|
169
|
+
# Given
|
170
|
+
allow(checker).to receive(:index_name).and_return(nil)
|
171
|
+
allow(checker.logger).to receive(:display)
|
172
|
+
|
173
|
+
# When / Then
|
174
|
+
expect(-> { checker.check_index_name }).to raise_error SystemExit
|
175
|
+
end
|
176
|
+
|
177
|
+
it 'should do nothing when an index name is found' do
|
178
|
+
# Given
|
179
|
+
allow(checker).to receive(:index_name).and_return('INDEXNAME')
|
180
|
+
|
181
|
+
# When / Then
|
182
|
+
expect(-> { checker.check_index_name }).not_to raise_error
|
183
|
+
end
|
184
|
+
end
|
185
|
+
|
62
186
|
describe 'assert_valid' do
|
63
187
|
before(:each) do
|
64
188
|
allow(checker.logger).to receive(:display)
|
@@ -104,7 +228,8 @@ describe(AlgoliaSearchCredentialChecker) do
|
|
104
228
|
|
105
229
|
it 'should init the Algolia client' do
|
106
230
|
# Given
|
107
|
-
|
231
|
+
allow(checker).to receive(:application_id).and_return('FOO')
|
232
|
+
allow(checker).to receive(:api_key).and_return('BAR')
|
108
233
|
allow(Algolia).to receive(:init)
|
109
234
|
|
110
235
|
# When
|
@@ -112,8 +237,8 @@ describe(AlgoliaSearchCredentialChecker) do
|
|
112
237
|
|
113
238
|
# Then
|
114
239
|
expect(Algolia).to have_received(:init).with(
|
115
|
-
application_id: '
|
116
|
-
api_key: '
|
240
|
+
application_id: 'FOO',
|
241
|
+
api_key: 'BAR'
|
117
242
|
)
|
118
243
|
end
|
119
244
|
end
|
data/spec/spec_helper.rb
CHANGED
data/txt/application_id_missing
CHANGED
data/txt/index_name_missing
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: algoliasearch-jekyll
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tim Carry
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-07-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: algoliasearch
|