middleman-search 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
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