nanoc-algolia 0.0.1
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 +7 -0
- data/README.md +47 -0
- data/lib/nanoc-algolia.rb +72 -0
- metadata +73 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 870dce1c8736b04a2d8ab13d2510a73cb49a5e07
|
4
|
+
data.tar.gz: d4bad8dea5215ac2f73f7e73126dbde9b8e72b9b
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 7756a20f41a2de1130d71233d8ec45f34841d52b00220c0026ca39d22402c49212ffde1bc26f85710b1bb4e919768e6a77ac9e9a84143b23e71deb2a1556d9c2
|
7
|
+
data.tar.gz: 12e5e04a09accd688e37bad77e5b98cdb7b5b31c6b4220e9f2b36964a14747e86fbcb9e16150b895b0144c95016832b98da5f1fd9741b2ce3fb4f98e38ca6347
|
data/README.md
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
# Nanoc algolia
|
2
|
+
|
3
|
+
Index an item in algolia
|
4
|
+
|
5
|
+
It use [nokogiri](http://nokogiri.org/) and algolia.
|
6
|
+
|
7
|
+
Note: It doesn't allow quering the index, it cannot works with nanoc. You should probably use the javascript integration.
|
8
|
+
|
9
|
+
## Install
|
10
|
+
|
11
|
+
gem install nanoc-algolia
|
12
|
+
|
13
|
+
If you use bundler, add it to your Gemfile:
|
14
|
+
|
15
|
+
gem "nanoc-algolia", "~> 0.0.1"
|
16
|
+
|
17
|
+
## Usage
|
18
|
+
|
19
|
+
Add to *lib/default.rb*:
|
20
|
+
|
21
|
+
```ruby
|
22
|
+
require 'nanoc-algolia'
|
23
|
+
```
|
24
|
+
|
25
|
+
Add to *config.yaml*:
|
26
|
+
|
27
|
+
algolia:
|
28
|
+
application_id: your_application_id
|
29
|
+
api_key: your_api_key
|
30
|
+
index: your_index_name
|
31
|
+
|
32
|
+
Add a filter at the compile time to use it:
|
33
|
+
|
34
|
+
```ruby
|
35
|
+
compile '*' do
|
36
|
+
filter :algolia
|
37
|
+
filter :erb
|
38
|
+
layout 'default'
|
39
|
+
end
|
40
|
+
```
|
41
|
+
|
42
|
+
## License
|
43
|
+
|
44
|
+
(c) 2011 Pascal Widdershoven (https://github.com/PascalW/jekyll_indextank)
|
45
|
+
(c) 2015 Stormz
|
46
|
+
|
47
|
+
This code is free to use under the terms of the MIT license
|
@@ -0,0 +1,72 @@
|
|
1
|
+
# Derived from https://github.com/PascalW/jekyll_indextank
|
2
|
+
require 'algoliasearch'
|
3
|
+
require 'nokogiri'
|
4
|
+
|
5
|
+
class SearchFilter < Nanoc::Filter
|
6
|
+
identifier :search
|
7
|
+
type :text
|
8
|
+
|
9
|
+
def initialize(hash = {})
|
10
|
+
super
|
11
|
+
|
12
|
+
raise ArgumentError.new 'Missing algolia:application_id' unless @config[:algolia][:application_id]
|
13
|
+
raise ArgumentError.new 'Missing algolia:api_key' unless @config[:algolia][:api_key]
|
14
|
+
raise ArgumentError.new 'Missing algolia:index' unless @config[:algolia][:index]
|
15
|
+
|
16
|
+
@last_indexed_file = '.nanoc_algolia'
|
17
|
+
|
18
|
+
load_last_timestamp
|
19
|
+
|
20
|
+
Algolia.init application_id: @config[:algolia][:application_id],
|
21
|
+
api_key: @config[:algolia][:api_key]
|
22
|
+
|
23
|
+
@index = Algolia::Index.new(@config[:algolia][:index])
|
24
|
+
end
|
25
|
+
|
26
|
+
# Index all pages
|
27
|
+
# The main content from each page is extracted and indexed at algolia
|
28
|
+
# The id of each document will be the absolute url to the resource without domain name
|
29
|
+
def run(content, params={})
|
30
|
+
# only process item that are changed since last regeneration
|
31
|
+
if (!@last_indexed.nil? && @last_indexed > item.mtime)
|
32
|
+
return content
|
33
|
+
end
|
34
|
+
|
35
|
+
puts "Indexing page #{@item.identifier}"
|
36
|
+
|
37
|
+
page_text = extract_text(content)
|
38
|
+
|
39
|
+
@index.save_object(
|
40
|
+
{
|
41
|
+
text: => page_text,
|
42
|
+
title: => @item[:title] || item.identifier
|
43
|
+
}, item.identifer)
|
44
|
+
puts 'Indexed ' << item.identifier
|
45
|
+
|
46
|
+
@last_indexed = Time.now
|
47
|
+
write_last_indexed
|
48
|
+
|
49
|
+
content
|
50
|
+
end
|
51
|
+
|
52
|
+
def extract_text(content)
|
53
|
+
doc = Nokogiri::HTML(content)
|
54
|
+
doc.xpath('//*/text()').to_a.join(" ").gsub("\r"," ").gsub("\n"," ")
|
55
|
+
end
|
56
|
+
|
57
|
+
def write_last_indexed
|
58
|
+
begin
|
59
|
+
File.open(@last_indexed_file, 'w') {|f| Marshal.dump(@last_indexed, f)}
|
60
|
+
rescue
|
61
|
+
puts 'WARNING: cannot write indexed timestamps file.'
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def load_last_timestamp
|
66
|
+
begin
|
67
|
+
@last_indexed = File.open(@last_indexed_file, "rb") {|f| Marshal.load(f)}
|
68
|
+
rescue
|
69
|
+
@last_indexed = nil
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
metadata
ADDED
@@ -0,0 +1,73 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: nanoc-algolia
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- François de Metz
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-06-08 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: algoliasearch
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.5'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.5'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: nokogiri
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.6'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.6'
|
41
|
+
description:
|
42
|
+
email: francois@2metz.fr
|
43
|
+
executables: []
|
44
|
+
extensions: []
|
45
|
+
extra_rdoc_files:
|
46
|
+
- README.md
|
47
|
+
files:
|
48
|
+
- README.md
|
49
|
+
- lib/nanoc-algolia.rb
|
50
|
+
homepage: https://github.com/stormz/nanoc-algolia
|
51
|
+
licenses: []
|
52
|
+
metadata: {}
|
53
|
+
post_install_message:
|
54
|
+
rdoc_options: []
|
55
|
+
require_paths:
|
56
|
+
- lib
|
57
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
63
|
+
requirements:
|
64
|
+
- - ">="
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: '0'
|
67
|
+
requirements: []
|
68
|
+
rubyforge_project:
|
69
|
+
rubygems_version: 2.4.6
|
70
|
+
signing_key:
|
71
|
+
specification_version: 4
|
72
|
+
summary: Index items from nanoc site to algolia
|
73
|
+
test_files: []
|