nesta-plugin-search 0.0.2

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.
data/.gitignore ADDED
@@ -0,0 +1,4 @@
1
+ pkg/*
2
+ *.gem
3
+ .bundle
4
+ vendor/bundle
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in nesta-search.gemspec
4
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,16 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ nesta-plugin-search (0.1.2)
5
+ ferret (>= 0.11.6)
6
+
7
+ GEM
8
+ remote: http://rubygems.org/
9
+ specs:
10
+ ferret (0.11.8.5)
11
+
12
+ PLATFORMS
13
+ ruby
14
+
15
+ DEPENDENCIES
16
+ nesta-plugin-search!
data/README.md ADDED
@@ -0,0 +1,80 @@
1
+ README
2
+ ======
3
+
4
+ nesta-plugin-search is a plugin for the Nesta CMS use
5
+ [Ferret](https://github.com/dbalmain/ferret) to index and search your site.
6
+
7
+ Installation
8
+ ------------
9
+
10
+ To install it as a gem add nesta-search to the `Gemfile` in your Nesta
11
+ project, and then re-run `bundle`:
12
+
13
+ $ echo "gem 'nesta-plugin-search'" >> Gemfile
14
+ $ bundle
15
+
16
+ Text Search Usage
17
+ -----------------
18
+
19
+ Create a `/search` page -- `content/pages/search.haml` -- here's an example:
20
+
21
+ %h1 Search Results
22
+ - if (results = search_results( search_index, params[:q] )) && !results.empty?
23
+ %section.articles= article_summaries(results)
24
+ - else
25
+ %h3 No articles found!
26
+
27
+ Add a searchbox to your layout, something like:
28
+
29
+ %form{:action => "/search"}
30
+ %input{:type => "text", :name => "q", :value => "#{params[:q]||''}"}
31
+
32
+
33
+ Text Search Configuration
34
+ -------------------------
35
+
36
+ Set `search_index_timeout` to the number of seconds you want your default indexes to
37
+ be stored for. By default, this is `false`, which never expires the index. It should
38
+ be noted that reindexing is slow.
39
+
40
+ Set `search_ignore_list` to the abspath of the pages you want to be excluded from the
41
+ search index. "/search" is forcefully excluded always and "/" is the default.
42
+
43
+ Example:
44
+
45
+ search_index_timeout: 3600
46
+ search_ignore_list:
47
+ - /
48
+ - /foo
49
+ - /foo/bar
50
+
51
+ > IMPORTANT NOTE: If you're not using "/search" as your search page, please add it to
52
+ > this list or bad things may happen.
53
+
54
+ Advanced Usage Notes
55
+ --------------------
56
+
57
+ Provided Index Helpers:
58
+
59
+ - `search_index` -- an index of all pages and articles.
60
+ - `article_index` -- an index of articles only.
61
+
62
+ Creating your own index:
63
+
64
+ - my_index = Nesta::Plugin::Search::Index.new( :my_find_method ).index
65
+ %h1 Search Results
66
+ - if (results = search_results( my_index, params[:q] )) && !results.empty?
67
+ %section.articles= article_summaries(results)
68
+ - else
69
+ %h3 No articles found!
70
+
71
+ If you want to pregenerate your cache to disk and load it that way, it would be something
72
+ like this:
73
+
74
+ - existing_index = Ferret::Index::Index.new(:path => "/path/to/existing/index")
75
+ %h1 Search Results
76
+ - if (results = search_results( existing_index, params[:q] )) && !results.empty?
77
+ %section.articles= article_summaries(results)
78
+ - else
79
+ %h3 No articles found!
80
+
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
@@ -0,0 +1,3 @@
1
+ require "nesta-plugin-search/version"
2
+
3
+ Nesta::Plugin.register(__FILE__)
@@ -0,0 +1,83 @@
1
+ module Nesta
2
+ class App
3
+ helpers do
4
+ def search_index
5
+ $search_index ||= Nesta::Plugin::Search::Index.new(:find_all, Nesta::Config.search_index_timeout).index
6
+ end
7
+
8
+ def article_index
9
+ $article_index ||= Nesta::Plugin::Search::Index.new(:find_articles, Nesta::Config.search_index_timeout).index
10
+ end
11
+
12
+ def search_results index, term
13
+ Nesta::Plugin::Search.results( index, term ) || []
14
+ end
15
+ end
16
+ end
17
+
18
+ class Config
19
+ @settings += %w[ search_index_timeout search_ignore_list ]
20
+
21
+ def self.search_index_timeout
22
+ from_yaml("search_index_timeout")||false
23
+ end
24
+
25
+ def self.search_ignore_list
26
+ (from_yaml("search_ignore_list")||["/"]) + %w[ /search ]
27
+ end
28
+ end
29
+
30
+ module Plugin
31
+ module Search
32
+
33
+ def self.results index, term
34
+ results = []
35
+ index.search_each(term) do |key, score|
36
+ results.push Nesta::Page.find_by_path(index[key][:href])# rescue nil
37
+ end
38
+ results
39
+ end
40
+
41
+ class Index
42
+ attr_accessor :index_method
43
+
44
+ # Currently imethod is expected to be:
45
+ # - :find_all
46
+ # - :find_articles
47
+ #
48
+ # Initializing with a timeout = false will
49
+ # cause index to not expire without a server
50
+ # restart.
51
+ def initialize(imethod, timeout=false) # 12 hours default
52
+ @index_method = imethod.to_sym
53
+ if timeout
54
+ @timeout = timeout
55
+ @expire_at = Time.now+timeout
56
+ end
57
+ end
58
+
59
+ def index
60
+ # index and return if index doesn't exist or is empty
61
+ return @index = reindex unless @index && @index.size > 0
62
+
63
+ # return existing index if current index isn't expired or expired_at isn't set
64
+ return @index if @expire_at && @expire_at > Time.now
65
+
66
+ # if all else fails, index and return
67
+ return @index = reindex
68
+ end
69
+
70
+ def reindex
71
+ @index = Ferret::Index::Index.new
72
+
73
+ Nesta::Page.send(@index_method).each do |item|
74
+ unless Nesta::Config.search_ignore_list.include?(item.abspath)
75
+ @index << {:heading => item.heading, :href => item.abspath, :summary => item.summary, :body => item.body}
76
+ end
77
+ end
78
+ @index
79
+ end
80
+ end
81
+ end
82
+ end
83
+ end
@@ -0,0 +1,7 @@
1
+ module Nesta
2
+ module Plugin
3
+ module Search
4
+ VERSION = "0.0.2"
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,21 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "nesta-plugin-search/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "nesta-plugin-search"
7
+ s.version = Nesta::Plugin::Search::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["Joshua Mervine"]
10
+ s.email = ["joshua@mervine.net"]
11
+ s.homepage = "http://github.com/jmervine/search-plugin-nesta"
12
+ s.summary = %q{Search plugin for Nesta CMS}
13
+ s.description = %q{Uses Ferret to search your Nesta site. Based on https://github.com/gma/nesta-search.}
14
+
15
+ s.add_dependency 'ferret', '=0.11.8.5'
16
+
17
+ s.files = `git ls-files`.split("\n")
18
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
19
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
20
+ s.require_paths = ["lib"]
21
+ end
metadata ADDED
@@ -0,0 +1,71 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: nesta-plugin-search
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Joshua Mervine
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-04-11 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: ferret
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - '='
20
+ - !ruby/object:Gem::Version
21
+ version: 0.11.8.5
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - '='
28
+ - !ruby/object:Gem::Version
29
+ version: 0.11.8.5
30
+ description: Uses Ferret to search your Nesta site. Based on https://github.com/gma/nesta-search.
31
+ email:
32
+ - joshua@mervine.net
33
+ executables: []
34
+ extensions: []
35
+ extra_rdoc_files: []
36
+ files:
37
+ - .gitignore
38
+ - Gemfile
39
+ - Gemfile.lock
40
+ - README.md
41
+ - Rakefile
42
+ - lib/nesta-plugin-search.rb
43
+ - lib/nesta-plugin-search/init.rb
44
+ - lib/nesta-plugin-search/version.rb
45
+ - nesta-plugin-search.gemspec
46
+ homepage: http://github.com/jmervine/search-plugin-nesta
47
+ licenses: []
48
+ post_install_message:
49
+ rdoc_options: []
50
+ require_paths:
51
+ - lib
52
+ required_ruby_version: !ruby/object:Gem::Requirement
53
+ none: false
54
+ requirements:
55
+ - - ! '>='
56
+ - !ruby/object:Gem::Version
57
+ version: '0'
58
+ required_rubygems_version: !ruby/object:Gem::Requirement
59
+ none: false
60
+ requirements:
61
+ - - ! '>='
62
+ - !ruby/object:Gem::Version
63
+ version: '0'
64
+ requirements: []
65
+ rubyforge_project:
66
+ rubygems_version: 1.8.24
67
+ signing_key:
68
+ specification_version: 3
69
+ summary: Search plugin for Nesta CMS
70
+ test_files: []
71
+ has_rdoc: