jqr-simple_column_search 0.0.3
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/CHANGELOG +3 -0
- data/Manifest +8 -0
- data/README.rdoc +32 -0
- data/Rakefile +22 -0
- data/init.rb +1 -0
- data/lib/simple_column_search.rb +28 -0
- data/simple_column_search.gemspec +34 -0
- data/spec/models.rb +0 -0
- data/spec/spec_helper.rb +12 -0
- metadata +76 -0
data/CHANGELOG
ADDED
data/Manifest
ADDED
data/README.rdoc
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
= Simple Column Search
|
2
|
+
|
3
|
+
Quick and dirty multi column LIKE searches. Handles partial matches and multiple ANDed terms.
|
4
|
+
|
5
|
+
Running lots of queries or have a large data set? You should probably upgrade to a real search back-end already!
|
6
|
+
|
7
|
+
== Examples
|
8
|
+
|
9
|
+
class User
|
10
|
+
simple_column_search :first_name, :last_name
|
11
|
+
end
|
12
|
+
|
13
|
+
User.search('elijah') # => anyone with first or last name elijah
|
14
|
+
User.search('miller') # => anyone with first or last name miller
|
15
|
+
User.search('elijah miller')
|
16
|
+
# => anyone with first or last name elijah AND
|
17
|
+
# anyone with first or last name miller
|
18
|
+
|
19
|
+
== Install
|
20
|
+
|
21
|
+
As a Rails plugin.
|
22
|
+
|
23
|
+
./script/plugin install git://github.com/jqr/simple_column_search.git
|
24
|
+
|
25
|
+
Prefer gems?
|
26
|
+
|
27
|
+
gem sources -a http://gems.github.com
|
28
|
+
gem install jqr-simple_column_search
|
29
|
+
|
30
|
+
|
31
|
+
Homepage:: http://github.com/jqr/simple_column_search/tree/master
|
32
|
+
License:: Copyright (c) 2008 Elijah Miller <mailto:elijah.miller@gmail.com>, released under the MIT license.
|
data/Rakefile
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'spec/rake/spectask'
|
2
|
+
|
3
|
+
require 'echoe'
|
4
|
+
Echoe.new 'simple_column_search' do |p|
|
5
|
+
p.description = "Quick and dirty multi column LIKE searches."
|
6
|
+
# p.url = "http://has_one_autocreate.rubyforge.org"
|
7
|
+
p.author = "Elijah Miller"
|
8
|
+
p.email = "elijah.miller@gmail.com"
|
9
|
+
p.retain_gemspec = true
|
10
|
+
p.need_tar_gz = false
|
11
|
+
p.extra_deps = [
|
12
|
+
]
|
13
|
+
p.ignore_pattern = ['spec/test.sqlite3']
|
14
|
+
end
|
15
|
+
|
16
|
+
desc 'Default: run specs'
|
17
|
+
task :default => :spec
|
18
|
+
Spec::Rake::SpecTask.new do |t|
|
19
|
+
t.spec_files = FileList["spec/**/*_spec.rb"]
|
20
|
+
end
|
21
|
+
|
22
|
+
task :test => :spec
|
data/init.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require 'simple_column_search'
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'activerecord'
|
3
|
+
|
4
|
+
class ActiveRecord::Base
|
5
|
+
# Adds a Model.search('term1 term2') method that searches across SEARCH_COLUMNS
|
6
|
+
# for ANDed TERMS ORed across columns.
|
7
|
+
#
|
8
|
+
# class User
|
9
|
+
# simple_column_search :first_name, :last_name
|
10
|
+
# end
|
11
|
+
#
|
12
|
+
# User.search('elijah') # => anyone with first or last name elijah
|
13
|
+
# User.search('miller') # => anyone with first or last name miller
|
14
|
+
# User.search('elijah miller')
|
15
|
+
# # => anyone with first or last name elijah AND
|
16
|
+
# # anyone with first or last name miller
|
17
|
+
def self.simple_column_search(*columns)
|
18
|
+
named_scope :search, lambda { |terms|
|
19
|
+
conditions = terms.split.inject(nil) do |acc, term|
|
20
|
+
pattern = term + '%'
|
21
|
+
merge_conditions acc, [columns.collect { |column| "#{table_name}.#{column} LIKE :pattern" }.join(' OR '), { :pattern => pattern }]
|
22
|
+
end
|
23
|
+
|
24
|
+
{ :conditions => conditions }
|
25
|
+
}
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
Gem::Specification.new do |s|
|
4
|
+
s.name = %q{simple_column_search}
|
5
|
+
s.version = "0.0.3"
|
6
|
+
|
7
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
8
|
+
s.authors = ["Elijah Miller"]
|
9
|
+
s.date = %q{2008-12-23}
|
10
|
+
s.description = %q{Quick and dirty multi column LIKE searches.}
|
11
|
+
s.email = %q{elijah.miller@gmail.com}
|
12
|
+
s.extra_rdoc_files = ["CHANGELOG", "lib/simple_column_search.rb", "README.rdoc"]
|
13
|
+
s.files = ["CHANGELOG", "init.rb", "lib/simple_column_search.rb", "Manifest", "Rakefile", "README.rdoc", "spec/models.rb", "spec/spec_helper.rb", "simple_column_search.gemspec"]
|
14
|
+
s.has_rdoc = true
|
15
|
+
s.homepage = %q{}
|
16
|
+
s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Simple_column_search", "--main", "README.rdoc"]
|
17
|
+
s.require_paths = ["lib"]
|
18
|
+
s.rubyforge_project = %q{simple_column_search}
|
19
|
+
s.rubygems_version = %q{1.3.1}
|
20
|
+
s.summary = %q{Quick and dirty multi column LIKE searches.}
|
21
|
+
|
22
|
+
if s.respond_to? :specification_version then
|
23
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
24
|
+
s.specification_version = 2
|
25
|
+
|
26
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
27
|
+
s.add_development_dependency(%q<echoe>, [">= 0"])
|
28
|
+
else
|
29
|
+
s.add_dependency(%q<echoe>, [">= 0"])
|
30
|
+
end
|
31
|
+
else
|
32
|
+
s.add_dependency(%q<echoe>, [">= 0"])
|
33
|
+
end
|
34
|
+
end
|
data/spec/models.rb
ADDED
File without changes
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'spec'
|
2
|
+
require 'fileutils'
|
3
|
+
|
4
|
+
require File.join(File.dirname(__FILE__), '..', 'lib', 'simple_column_search')
|
5
|
+
|
6
|
+
require File.join(File.dirname(__FILE__), 'models')
|
7
|
+
|
8
|
+
TEST_DATABASE_FILE = File.join(File.dirname(__FILE__), 'test.sqlite3')
|
9
|
+
|
10
|
+
Spec::Runner.configure do |config|
|
11
|
+
|
12
|
+
end
|
metadata
ADDED
@@ -0,0 +1,76 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: jqr-simple_column_search
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.3
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Elijah Miller
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2008-12-23 00:00:00 -08:00
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: echoe
|
17
|
+
version_requirement:
|
18
|
+
version_requirements: !ruby/object:Gem::Requirement
|
19
|
+
requirements:
|
20
|
+
- - ">="
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: "0"
|
23
|
+
version:
|
24
|
+
description: Quick and dirty multi column LIKE searches.
|
25
|
+
email: elijah.miller@gmail.com
|
26
|
+
executables: []
|
27
|
+
|
28
|
+
extensions: []
|
29
|
+
|
30
|
+
extra_rdoc_files:
|
31
|
+
- CHANGELOG
|
32
|
+
- lib/simple_column_search.rb
|
33
|
+
- README.rdoc
|
34
|
+
files:
|
35
|
+
- CHANGELOG
|
36
|
+
- init.rb
|
37
|
+
- lib/simple_column_search.rb
|
38
|
+
- Manifest
|
39
|
+
- Rakefile
|
40
|
+
- README.rdoc
|
41
|
+
- spec/models.rb
|
42
|
+
- spec/spec_helper.rb
|
43
|
+
- simple_column_search.gemspec
|
44
|
+
has_rdoc: true
|
45
|
+
homepage: ""
|
46
|
+
post_install_message:
|
47
|
+
rdoc_options:
|
48
|
+
- --line-numbers
|
49
|
+
- --inline-source
|
50
|
+
- --title
|
51
|
+
- Simple_column_search
|
52
|
+
- --main
|
53
|
+
- README.rdoc
|
54
|
+
require_paths:
|
55
|
+
- lib
|
56
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - ">="
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: "0"
|
61
|
+
version:
|
62
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
63
|
+
requirements:
|
64
|
+
- - ">="
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: "1.2"
|
67
|
+
version:
|
68
|
+
requirements: []
|
69
|
+
|
70
|
+
rubyforge_project: simple_column_search
|
71
|
+
rubygems_version: 1.2.0
|
72
|
+
signing_key:
|
73
|
+
specification_version: 2
|
74
|
+
summary: Quick and dirty multi column LIKE searches.
|
75
|
+
test_files: []
|
76
|
+
|