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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 45b0b7ea39a4402d2b911c7d7b89506b32180ca3
4
- data.tar.gz: 8108ba80710087dbb4a6988f82a0bd134e9f98e0
3
+ metadata.gz: 83d2b65441f0766102161c0489cedec031fb34fe
4
+ data.tar.gz: 612b8f30867b4695af0b39ead29304360bf1d644
5
5
  SHA512:
6
- metadata.gz: 6eacff7d6a9016b9aec9ca43afc57f9e21db8f3e89c476beef83b47179007146ca28573a6a2fc9273bee9a73019303db031697d825953045649d409f96c7d77e
7
- data.tar.gz: 8dba254174d7f2ec35cc21a5a8d97b40f17fec211aedf8565bc309c7ac65ef979de50048aefb7d3af1181095570314e3292a20c570d2d8a845794a8dae71e001
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 a `data` hash inside its `options` in `resource.metadata`, except for:
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
- You should also `require` the `lunr.min.js` file to your `all.js` file:
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
- catch(:required) do
43
- next if resource.data['index'] == false
44
- next unless @resources_to_index.any? {|whitelisted| resource.path.start_with? whitelisted }
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
- to_index = Hash.new
47
- to_store = Hash.new
48
+ to_index = Hash.new
49
+ to_store = Hash.new
48
50
 
49
- @fields.each do |field, opts|
50
- value = value_for(resource, field, opts)
51
- throw(:required) if value.blank? && opts[:required]
52
- to_index[field] = value unless opts[:index] == false
53
- to_store[field] = value if opts[:store]
54
- end
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
- index.add(to_index.merge(id: id))
57
- store[id] = to_store
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
- Nokogiri::HTML(resource.render(layout: false)).xpath("//text()").text
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
@@ -1,3 +1,3 @@
1
1
  module MiddlemanSearch
2
- VERSION = "0.1.1"
2
+ VERSION = "0.2.0"
3
3
  end
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.1.1
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.0.14
124
+ rubygems_version: 2.2.2
125
125
  signing_key:
126
126
  specification_version: 4
127
127
  summary: LunrJS-based search for Middleman