middleman-search 0.1.1 → 0.2.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.
- checksums.yaml +4 -4
- data/README.md +11 -3
- data/lib/middleman-search/extension.rb +1 -0
- data/lib/middleman-search/search-index-resource.rb +24 -14
- data/lib/middleman-search/version.rb +1 -1
- metadata +16 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 83d2b65441f0766102161c0489cedec031fb34fe
|
4
|
+
data.tar.gz: 612b8f30867b4695af0b39ead29304360bf1d644
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 86b81ea83c06557e4f29e9a7823b88a96260a55dfbc36c268fb436ecd230df85adf7db9a74f2a7255a2ec1e5715ab5c38020e3933e227fc4e85a187c0ab0b12b
|
7
|
+
data.tar.gz: 8fab755798193a108e834998327d3350995b8f8027bb5476ffbfde35c3efbfa4eeab04e910185f740860dd06e6a551b3ac78bcbdebe488569ac391f4378aacb4
|
data/README.md
CHANGED
@@ -27,8 +27,14 @@ activate :search do
|
|
27
27
|
search.fields = {
|
28
28
|
title: {boost: 100, store: true, required: true},
|
29
29
|
content: {boost: 50},
|
30
|
-
url: {index: false, store: true}
|
30
|
+
url: {index: false, store: true},
|
31
|
+
author: {boost: 30}
|
31
32
|
}
|
33
|
+
search.before_index = Proc.new do |to_index, to_store, resource|
|
34
|
+
if author = resource.data.author
|
35
|
+
to_index[:author] = data.authors[author].name
|
36
|
+
end
|
37
|
+
end
|
32
38
|
end
|
33
39
|
```
|
34
40
|
|
@@ -41,11 +47,13 @@ Where `resources` is a list of the beginning of the URL of the resources to inde
|
|
41
47
|
|
42
48
|
Note that a special field `id` is included automatically, with an autogenerated identifier to be used as the `ref` for the document.
|
43
49
|
|
44
|
-
All fields values are retrieved from the resource `data` (ie its frontmatter), or from
|
50
|
+
All fields values are retrieved from the resource `data` (ie its frontmatter), or from the `options` in the `resource.metadata` (i.e., any options specified in a `proxy` page), except for:
|
45
51
|
- `url` which is the actual resource url
|
46
52
|
- `content` the text extracted from the rendered resource, without including its layout
|
47
53
|
|
48
|
-
|
54
|
+
The `before_index` option accepts a callback that will be executed for each resource, and will be executed with the document to be indexed and the map to be stored, in the `index` and `docs` objects of the output respectively (see below), as well as the resource being processed. You can use this callback to modify either of those, or `throw(:skip)` to skip the resource in question.
|
55
|
+
|
56
|
+
You should also `require` the `lunr.min.js` file to your `all.js` file, to actually use the index for search in your website:
|
49
57
|
|
50
58
|
```javascript
|
51
59
|
//= require lunr.min
|
@@ -5,6 +5,7 @@ module Middleman
|
|
5
5
|
class SearchExtension < Middleman::Extension
|
6
6
|
option :resources, [], 'Paths of resources to index'
|
7
7
|
option :fields, {}, 'Fields to index, with their options'
|
8
|
+
option :before_index, nil, 'Callback receiving (to_index, to_store, resource) to execute before indexing a document'
|
8
9
|
option :index_path, 'search.json', 'Index file path'
|
9
10
|
|
10
11
|
def manipulate_resource_list(resources)
|
@@ -4,6 +4,7 @@ module Middleman
|
|
4
4
|
def initialize(store, path, options)
|
5
5
|
@resources_to_index = options[:resources]
|
6
6
|
@fields = options[:fields]
|
7
|
+
@callback = options[:before_index]
|
7
8
|
super(store, path)
|
8
9
|
end
|
9
10
|
|
@@ -39,22 +40,28 @@ module Middleman
|
|
39
40
|
|
40
41
|
# Iterate over all resources and build index
|
41
42
|
@app.sitemap.resources.each_with_index do |resource, id|
|
42
|
-
|
43
|
-
|
44
|
-
|
43
|
+
begin
|
44
|
+
catch(:skip) do
|
45
|
+
next if resource.data['index'] == false
|
46
|
+
next unless @resources_to_index.any? {|whitelisted| resource.path.start_with? whitelisted }
|
45
47
|
|
46
|
-
|
47
|
-
|
48
|
+
to_index = Hash.new
|
49
|
+
to_store = Hash.new
|
48
50
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
51
|
+
@fields.each do |field, opts|
|
52
|
+
value = value_for(resource, field, opts)
|
53
|
+
throw(:skip) if value.blank? && opts[:required]
|
54
|
+
to_index[field] = value unless opts[:index] == false
|
55
|
+
to_store[field] = value if opts[:store]
|
56
|
+
end
|
57
|
+
|
58
|
+
@callback.call(to_index, to_store, resource) if @callback
|
55
59
|
|
56
|
-
|
57
|
-
|
60
|
+
index.add(to_index.merge(id: id))
|
61
|
+
store[id] = to_store
|
62
|
+
end
|
63
|
+
rescue => ex
|
64
|
+
logger.warn "Error processing resource for index: #{resource.path}\n#{ex}\n #{ex.backtrace.join("\n ")}"
|
58
65
|
end
|
59
66
|
end
|
60
67
|
|
@@ -73,7 +80,10 @@ module Middleman
|
|
73
80
|
def value_for(resource, field, opts={})
|
74
81
|
case field.to_s
|
75
82
|
when 'content'
|
76
|
-
|
83
|
+
html = resource.render(layout: false) do
|
84
|
+
self.current_path = resource.path
|
85
|
+
end
|
86
|
+
Nokogiri::HTML(html).xpath("//text()").text
|
77
87
|
when 'url'
|
78
88
|
resource.url
|
79
89
|
else
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: middleman-search
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matías García Isaía
|
@@ -15,70 +15,70 @@ dependencies:
|
|
15
15
|
name: middleman-core
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
requirements:
|
18
|
-
- - ~>
|
18
|
+
- - "~>"
|
19
19
|
- !ruby/object:Gem::Version
|
20
20
|
version: '3.2'
|
21
21
|
type: :runtime
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
|
-
- - ~>
|
25
|
+
- - "~>"
|
26
26
|
- !ruby/object:Gem::Version
|
27
27
|
version: '3.2'
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
29
|
name: therubyracer
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
31
31
|
requirements:
|
32
|
-
- - ~>
|
32
|
+
- - "~>"
|
33
33
|
- !ruby/object:Gem::Version
|
34
34
|
version: '0.12'
|
35
35
|
type: :runtime
|
36
36
|
prerelease: false
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
38
38
|
requirements:
|
39
|
-
- - ~>
|
39
|
+
- - "~>"
|
40
40
|
- !ruby/object:Gem::Version
|
41
41
|
version: '0.12'
|
42
42
|
- !ruby/object:Gem::Dependency
|
43
43
|
name: nokogiri
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
45
45
|
requirements:
|
46
|
-
- - ~>
|
46
|
+
- - "~>"
|
47
47
|
- !ruby/object:Gem::Version
|
48
48
|
version: '1.5'
|
49
49
|
type: :runtime
|
50
50
|
prerelease: false
|
51
51
|
version_requirements: !ruby/object:Gem::Requirement
|
52
52
|
requirements:
|
53
|
-
- - ~>
|
53
|
+
- - "~>"
|
54
54
|
- !ruby/object:Gem::Version
|
55
55
|
version: '1.5'
|
56
56
|
- !ruby/object:Gem::Dependency
|
57
57
|
name: bundler
|
58
58
|
requirement: !ruby/object:Gem::Requirement
|
59
59
|
requirements:
|
60
|
-
- - ~>
|
60
|
+
- - "~>"
|
61
61
|
- !ruby/object:Gem::Version
|
62
62
|
version: '1.5'
|
63
63
|
type: :development
|
64
64
|
prerelease: false
|
65
65
|
version_requirements: !ruby/object:Gem::Requirement
|
66
66
|
requirements:
|
67
|
-
- - ~>
|
67
|
+
- - "~>"
|
68
68
|
- !ruby/object:Gem::Version
|
69
69
|
version: '1.5'
|
70
70
|
- !ruby/object:Gem::Dependency
|
71
71
|
name: rake
|
72
72
|
requirement: !ruby/object:Gem::Requirement
|
73
73
|
requirements:
|
74
|
-
- -
|
74
|
+
- - ">="
|
75
75
|
- !ruby/object:Gem::Version
|
76
76
|
version: '0'
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
79
|
version_requirements: !ruby/object:Gem::Requirement
|
80
80
|
requirements:
|
81
|
-
- -
|
81
|
+
- - ">="
|
82
82
|
- !ruby/object:Gem::Version
|
83
83
|
version: '0'
|
84
84
|
description: LunrJS-based search for Middleman
|
@@ -89,8 +89,8 @@ executables: []
|
|
89
89
|
extensions: []
|
90
90
|
extra_rdoc_files: []
|
91
91
|
files:
|
92
|
-
- .gitignore
|
93
|
-
- .travis.yml
|
92
|
+
- ".gitignore"
|
93
|
+
- ".travis.yml"
|
94
94
|
- Gemfile
|
95
95
|
- LICENSE.txt
|
96
96
|
- README.md
|
@@ -111,17 +111,17 @@ require_paths:
|
|
111
111
|
- lib
|
112
112
|
required_ruby_version: !ruby/object:Gem::Requirement
|
113
113
|
requirements:
|
114
|
-
- -
|
114
|
+
- - ">="
|
115
115
|
- !ruby/object:Gem::Version
|
116
116
|
version: '0'
|
117
117
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
118
118
|
requirements:
|
119
|
-
- -
|
119
|
+
- - ">="
|
120
120
|
- !ruby/object:Gem::Version
|
121
121
|
version: '0'
|
122
122
|
requirements: []
|
123
123
|
rubyforge_project:
|
124
|
-
rubygems_version: 2.
|
124
|
+
rubygems_version: 2.2.2
|
125
125
|
signing_key:
|
126
126
|
specification_version: 4
|
127
127
|
summary: LunrJS-based search for Middleman
|