pollyanna 1.0.3 → 1.0.4
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 +2 -0
- data/Gemfile +7 -0
- data/Gemfile.lock +48 -0
- data/README.rdoc +68 -59
- data/VERSION +1 -1
- data/lib/pollyanna/searchable.rb +1 -2
- data/pollyanna.gemspec +11 -9
- metadata +24 -10
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
pollyanna (1.0.2)
|
5
|
+
|
6
|
+
GEM
|
7
|
+
remote: http://rubygems.org/
|
8
|
+
specs:
|
9
|
+
actionmailer (2.3.8)
|
10
|
+
actionpack (= 2.3.8)
|
11
|
+
actionpack (2.3.8)
|
12
|
+
activesupport (= 2.3.8)
|
13
|
+
rack (~> 1.1.0)
|
14
|
+
activerecord (2.3.8)
|
15
|
+
activesupport (= 2.3.8)
|
16
|
+
activeresource (2.3.8)
|
17
|
+
activesupport (= 2.3.8)
|
18
|
+
activesupport (2.3.8)
|
19
|
+
columnize (0.3.2)
|
20
|
+
linecache (0.43)
|
21
|
+
rack (1.1.0)
|
22
|
+
rails (2.3.8)
|
23
|
+
actionmailer (= 2.3.8)
|
24
|
+
actionpack (= 2.3.8)
|
25
|
+
activerecord (= 2.3.8)
|
26
|
+
activeresource (= 2.3.8)
|
27
|
+
activesupport (= 2.3.8)
|
28
|
+
rake (>= 0.8.3)
|
29
|
+
rake (0.8.7)
|
30
|
+
rspec (1.3.1)
|
31
|
+
rspec-rails (1.3.3)
|
32
|
+
rack (>= 1.0.0)
|
33
|
+
rspec (= 1.3.1)
|
34
|
+
ruby-debug (0.10.4)
|
35
|
+
columnize (>= 0.1)
|
36
|
+
ruby-debug-base (~> 0.10.4.0)
|
37
|
+
ruby-debug-base (0.10.4)
|
38
|
+
linecache (>= 0.3)
|
39
|
+
|
40
|
+
PLATFORMS
|
41
|
+
ruby
|
42
|
+
|
43
|
+
DEPENDENCIES
|
44
|
+
pollyanna!
|
45
|
+
rails (= 2.3.8)
|
46
|
+
rspec (= 1.3.1)
|
47
|
+
rspec-rails (= 1.3.3)
|
48
|
+
ruby-debug
|
data/README.rdoc
CHANGED
@@ -1,59 +1,68 @@
|
|
1
|
-
= Pollyanna - very simple search for your ActiveRecord models
|
2
|
-
|
3
|
-
Pollyanna adds a very simple full text search to your ActiveRecord models.
|
4
|
-
Before saving, searchable models copy strings relevant to the search into a text column.
|
5
|
-
Pollyanna finds results for a query using LIKE patterns in SQL.
|
6
|
-
|
7
|
-
We found Pollyanna very useful for search-as-you-type boxes.
|
8
|
-
|
9
|
-
== Example
|
10
|
-
|
11
|
-
class Movie < ActiveRecord::Base
|
12
|
-
include Pollyanna::Searchable
|
13
|
-
|
14
|
-
def search_text
|
15
|
-
"#{title} #{year} #{director}"
|
16
|
-
end
|
17
|
-
|
18
|
-
end
|
19
|
-
|
20
|
-
class MoviesController
|
21
|
-
|
22
|
-
def index
|
23
|
-
@movies = Movie.search(params[:query])
|
24
|
-
end
|
25
|
-
|
26
|
-
end
|
27
|
-
|
28
|
-
== Making a model searchable
|
29
|
-
|
30
|
-
1. Add a text column "search_text" to a model
|
31
|
-
2. Have the model include <tt>Pollyanna::Searchable</tt>
|
32
|
-
3. Overwrite <tt>search_text</tt> to define which text is indexed upon saving
|
33
|
-
4. <tt>Model.search("query goes here")</tt> now gives you a scope for the results of your query. Blank queries return everything.
|
34
|
-
|
35
|
-
== Searching other columns
|
36
|
-
|
37
|
-
If you want to search a column other than <tt>search_text</tt>, you may say <tt>Movie.search(query, :by => "other_column")</tt>.
|
38
|
-
|
39
|
-
== How queries are matched
|
40
|
-
|
41
|
-
- Pollyanna matches partial words, so "oo" matches "foo".
|
42
|
-
- Multiple words in a query are AND-ed automatically.
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
1
|
+
= Pollyanna - very simple search for your ActiveRecord models
|
2
|
+
|
3
|
+
Pollyanna adds a very simple full text search to your ActiveRecord models.
|
4
|
+
Before saving, searchable models copy strings relevant to the search into a text column.
|
5
|
+
Pollyanna finds results for a query using LIKE patterns in SQL.
|
6
|
+
|
7
|
+
We found Pollyanna very useful for search-as-you-type boxes.
|
8
|
+
|
9
|
+
== Example
|
10
|
+
|
11
|
+
class Movie < ActiveRecord::Base
|
12
|
+
include Pollyanna::Searchable
|
13
|
+
|
14
|
+
def search_text
|
15
|
+
"#{title} #{year} #{director}"
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
|
20
|
+
class MoviesController
|
21
|
+
|
22
|
+
def index
|
23
|
+
@movies = Movie.search(params[:query])
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
|
28
|
+
== Making a model searchable
|
29
|
+
|
30
|
+
1. Add a text column "search_text" to a model
|
31
|
+
2. Have the model include <tt>Pollyanna::Searchable</tt>
|
32
|
+
3. Overwrite <tt>search_text</tt> to define which text is indexed upon saving
|
33
|
+
4. <tt>Model.search("query goes here")</tt> now gives you a scope for the results of your query. Blank queries return everything.
|
34
|
+
|
35
|
+
== Searching other columns
|
36
|
+
|
37
|
+
If you want to search a column other than <tt>search_text</tt>, you may say <tt>Movie.search(query, :by => "other_column")</tt>.
|
38
|
+
|
39
|
+
== How queries are matched
|
40
|
+
|
41
|
+
- Pollyanna matches partial words, so "oo" matches "foo".
|
42
|
+
- Multiple words in a query are AND-ed automatically.
|
43
|
+
|
44
|
+
|
45
|
+
== Installation
|
46
|
+
|
47
|
+
Pollyanna is a gem, which you can install with
|
48
|
+
sudo gem install pollyanna
|
49
|
+
|
50
|
+
In Rails 2, add the following to your <tt>environment.rb</tt>:
|
51
|
+
config.gem 'pollyanna'
|
52
|
+
|
53
|
+
In Rails 3, add the following to your <tt>Gemfile</tt>:
|
54
|
+
gem 'pollyanna'
|
55
|
+
|
56
|
+
|
57
|
+
== Rails 3 compatibility
|
58
|
+
|
59
|
+
We cannot guarantee Rails 3 compatibility at this point, but we will upgrade the gem when Rails 3 is released.
|
60
|
+
|
61
|
+
|
62
|
+
== Credits
|
63
|
+
|
64
|
+
Henning Koch
|
65
|
+
|
66
|
+
{makandra.com}[http://makandra.com/]
|
67
|
+
|
68
|
+
{gem-session.com}[http://gem-session.com/]
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.0.
|
1
|
+
1.0.4
|
data/lib/pollyanna/searchable.rb
CHANGED
@@ -4,8 +4,7 @@ module Pollyanna
|
|
4
4
|
def self.included(klass)
|
5
5
|
klass.class_eval do
|
6
6
|
before_save :set_search_text
|
7
|
-
|
8
|
-
named_scope :search, Proc.new { |query, options| Search.new(query, table_name).scope_options(options) }
|
7
|
+
named_scope :search, lambda { |*args| query, options = args; Search.new(query, table_name).scope_options(options) }
|
9
8
|
end
|
10
9
|
end
|
11
10
|
|
data/pollyanna.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{pollyanna}
|
8
|
-
s.version = "1.0.
|
8
|
+
s.version = "1.0.4"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Henning Koch"]
|
12
|
-
s.date = %q{
|
12
|
+
s.date = %q{2011-03-14}
|
13
13
|
s.description = %q{Very simple search for your ActiveRecord models.}
|
14
14
|
s.email = %q{github@makandra.de}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -17,6 +17,8 @@ Gem::Specification.new do |s|
|
|
17
17
|
]
|
18
18
|
s.files = [
|
19
19
|
".gitignore",
|
20
|
+
"Gemfile",
|
21
|
+
"Gemfile.lock",
|
20
22
|
"MIT-LICENSE",
|
21
23
|
"README.rdoc",
|
22
24
|
"Rakefile",
|
@@ -49,22 +51,22 @@ Gem::Specification.new do |s|
|
|
49
51
|
s.homepage = %q{http://github.com/makandra/pollyanna}
|
50
52
|
s.rdoc_options = ["--charset=UTF-8"]
|
51
53
|
s.require_paths = ["lib"]
|
52
|
-
s.rubygems_version = %q{1.3.
|
54
|
+
s.rubygems_version = %q{1.3.7}
|
53
55
|
s.summary = %q{Very simple search for your ActiveRecord models.}
|
54
56
|
s.test_files = [
|
55
|
-
"spec/
|
57
|
+
"spec/app_root/app/controllers/application_controller.rb",
|
56
58
|
"spec/app_root/app/models/movie.rb",
|
57
|
-
"spec/app_root/
|
59
|
+
"spec/app_root/config/boot.rb",
|
58
60
|
"spec/app_root/config/environment.rb",
|
61
|
+
"spec/app_root/config/environments/in_memory.rb",
|
59
62
|
"spec/app_root/config/environments/mysql.rb",
|
60
63
|
"spec/app_root/config/environments/postgresql.rb",
|
61
|
-
"spec/app_root/config/environments/sqlite3.rb",
|
62
|
-
"spec/app_root/config/environments/in_memory.rb",
|
63
64
|
"spec/app_root/config/environments/sqlite.rb",
|
64
|
-
"spec/app_root/config/
|
65
|
+
"spec/app_root/config/environments/sqlite3.rb",
|
65
66
|
"spec/app_root/config/routes.rb",
|
66
67
|
"spec/app_root/db/migrate/001_create_movies.rb",
|
67
68
|
"spec/app_root/lib/console_with_fixtures.rb",
|
69
|
+
"spec/search_spec.rb",
|
68
70
|
"spec/searchable_spec.rb",
|
69
71
|
"spec/spec_helper.rb"
|
70
72
|
]
|
@@ -73,7 +75,7 @@ Gem::Specification.new do |s|
|
|
73
75
|
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
74
76
|
s.specification_version = 3
|
75
77
|
|
76
|
-
if Gem::Version.new(Gem::
|
78
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
77
79
|
else
|
78
80
|
end
|
79
81
|
else
|
metadata
CHANGED
@@ -1,7 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pollyanna
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
hash: 31
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 1
|
8
|
+
- 0
|
9
|
+
- 4
|
10
|
+
version: 1.0.4
|
5
11
|
platform: ruby
|
6
12
|
authors:
|
7
13
|
- Henning Koch
|
@@ -9,7 +15,7 @@ autorequire:
|
|
9
15
|
bindir: bin
|
10
16
|
cert_chain: []
|
11
17
|
|
12
|
-
date:
|
18
|
+
date: 2011-03-14 00:00:00 +01:00
|
13
19
|
default_executable:
|
14
20
|
dependencies: []
|
15
21
|
|
@@ -23,6 +29,8 @@ extra_rdoc_files:
|
|
23
29
|
- README.rdoc
|
24
30
|
files:
|
25
31
|
- .gitignore
|
32
|
+
- Gemfile
|
33
|
+
- Gemfile.lock
|
26
34
|
- MIT-LICENSE
|
27
35
|
- README.rdoc
|
28
36
|
- Rakefile
|
@@ -61,37 +69,43 @@ rdoc_options:
|
|
61
69
|
require_paths:
|
62
70
|
- lib
|
63
71
|
required_ruby_version: !ruby/object:Gem::Requirement
|
72
|
+
none: false
|
64
73
|
requirements:
|
65
74
|
- - ">="
|
66
75
|
- !ruby/object:Gem::Version
|
76
|
+
hash: 3
|
77
|
+
segments:
|
78
|
+
- 0
|
67
79
|
version: "0"
|
68
|
-
version:
|
69
80
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
70
82
|
requirements:
|
71
83
|
- - ">="
|
72
84
|
- !ruby/object:Gem::Version
|
85
|
+
hash: 3
|
86
|
+
segments:
|
87
|
+
- 0
|
73
88
|
version: "0"
|
74
|
-
version:
|
75
89
|
requirements: []
|
76
90
|
|
77
91
|
rubyforge_project:
|
78
|
-
rubygems_version: 1.3.
|
92
|
+
rubygems_version: 1.3.7
|
79
93
|
signing_key:
|
80
94
|
specification_version: 3
|
81
95
|
summary: Very simple search for your ActiveRecord models.
|
82
96
|
test_files:
|
83
|
-
- spec/search_spec.rb
|
84
|
-
- spec/app_root/app/models/movie.rb
|
85
97
|
- spec/app_root/app/controllers/application_controller.rb
|
98
|
+
- spec/app_root/app/models/movie.rb
|
99
|
+
- spec/app_root/config/boot.rb
|
86
100
|
- spec/app_root/config/environment.rb
|
101
|
+
- spec/app_root/config/environments/in_memory.rb
|
87
102
|
- spec/app_root/config/environments/mysql.rb
|
88
103
|
- spec/app_root/config/environments/postgresql.rb
|
89
|
-
- spec/app_root/config/environments/sqlite3.rb
|
90
|
-
- spec/app_root/config/environments/in_memory.rb
|
91
104
|
- spec/app_root/config/environments/sqlite.rb
|
92
|
-
- spec/app_root/config/
|
105
|
+
- spec/app_root/config/environments/sqlite3.rb
|
93
106
|
- spec/app_root/config/routes.rb
|
94
107
|
- spec/app_root/db/migrate/001_create_movies.rb
|
95
108
|
- spec/app_root/lib/console_with_fixtures.rb
|
109
|
+
- spec/search_spec.rb
|
96
110
|
- spec/searchable_spec.rb
|
97
111
|
- spec/spec_helper.rb
|