meta_search 1.0.4 → 1.0.5
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 +5 -0
- data/README.rdoc +3 -0
- data/VERSION +1 -1
- data/lib/meta_search/builder.rb +14 -2
- data/lib/meta_search/searches/active_record.rb +6 -5
- data/meta_search.gemspec +5 -16
- data/test/fixtures/developers.yml +8 -1
- data/test/test_search.rb +48 -2
- metadata +5 -13
data/CHANGELOG
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
Changes since 1.0.4 (2011-04-08):
|
2
|
+
* Add :join_type option to Builder to allow for using InnerJoin if desired
|
3
|
+
(Stephen Pike)
|
4
|
+
* Fix a memory leak in development mode (Bonias)
|
5
|
+
|
1
6
|
Changes since 1.0.3 (2011-03-14):
|
2
7
|
* Be sure not to override form_for options if super returns a non-true value,
|
3
8
|
fixes a compatibility issue when using client_side_validation
|
data/README.rdoc
CHANGED
@@ -1,5 +1,8 @@
|
|
1
1
|
= MetaSearch
|
2
2
|
|
3
|
+
(If you're using edge Rails and you'd like to take an early peek at the successor to
|
4
|
+
MetaSearch, please have a look at {Ransack}[http://github.com/ernie/ransack])
|
5
|
+
|
3
6
|
MetaSearch is extensible searching for your form_for enjoyment. It “wraps” one of your ActiveRecord models, providing methods that allow you to build up search conditions against that model, and has a few extra form helpers to simplify sorting and supplying multiple parameters to your condition methods as well.
|
4
7
|
|
5
8
|
== Getting Started
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.0.
|
1
|
+
1.0.5
|
data/lib/meta_search/builder.rb
CHANGED
@@ -33,6 +33,8 @@ module MetaSearch
|
|
33
33
|
@base = @relation.klass
|
34
34
|
@search_key = (opts.delete(:search_key) || 'search').to_s
|
35
35
|
@options = opts # Let's just hang on to other options for use in authorization blocks
|
36
|
+
@join_type = opts[:join_type] || Arel::Nodes::OuterJoin
|
37
|
+
@join_type = get_join_type(@join_type)
|
36
38
|
@join_dependency = build_join_dependency
|
37
39
|
@search_attributes = {}
|
38
40
|
@errors = ActiveModel::Errors.new(self)
|
@@ -257,7 +259,7 @@ module MetaSearch
|
|
257
259
|
assoc.parent == parent
|
258
260
|
end
|
259
261
|
unless found_association
|
260
|
-
@join_dependency.send(:build_with_metasearch, association, parent,
|
262
|
+
@join_dependency.send(:build_with_metasearch, association, parent, @join_type, klass)
|
261
263
|
found_association = @join_dependency.join_associations.last
|
262
264
|
@relation = @relation.joins(found_association)
|
263
265
|
end
|
@@ -299,5 +301,15 @@ module MetaSearch
|
|
299
301
|
arel.joins(arel)
|
300
302
|
end
|
301
303
|
|
304
|
+
def get_join_type(opt_join)
|
305
|
+
# Allow "inner"/:inner and "upper"/:upper
|
306
|
+
if opt_join.to_s.upcase == 'INNER'
|
307
|
+
opt_join = Arel::Nodes::InnerJoin
|
308
|
+
elsif opt_join.to_s.upcase == 'OUTER'
|
309
|
+
opt_join = Arel::Nodes::OuterJoin
|
310
|
+
end
|
311
|
+
# Default to trusting what the user gave us
|
312
|
+
opt_join
|
313
|
+
end
|
302
314
|
end
|
303
|
-
end
|
315
|
+
end
|
@@ -181,22 +181,23 @@ module MetaSearch
|
|
181
181
|
end
|
182
182
|
|
183
183
|
def self.for(klass)
|
184
|
-
DISPATCH[klass]
|
184
|
+
DISPATCH[klass.name]
|
185
185
|
end
|
186
186
|
|
187
187
|
private
|
188
188
|
|
189
|
-
DISPATCH = Hash.new do |hash,
|
190
|
-
class_name =
|
191
|
-
hash[
|
189
|
+
DISPATCH = Hash.new do |hash, klass_name|
|
190
|
+
class_name = klass_name.gsub('::', '_')
|
191
|
+
hash[klass_name] = module_eval <<-RUBY_EVAL
|
192
192
|
class #{class_name} < MetaSearch::Builder
|
193
193
|
def self.klass
|
194
|
-
::#{
|
194
|
+
::#{klass_name}
|
195
195
|
end
|
196
196
|
end
|
197
197
|
|
198
198
|
#{class_name}
|
199
199
|
RUBY_EVAL
|
200
200
|
end
|
201
|
+
|
201
202
|
end
|
202
203
|
end
|
data/meta_search.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{meta_search}
|
8
|
-
s.version = "1.0.
|
8
|
+
s.version = "1.0.5"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
-
s.authors = [
|
12
|
-
s.date = %q{2011-
|
11
|
+
s.authors = [%q{Ernie Miller}]
|
12
|
+
s.date = %q{2011-05-05}
|
13
13
|
s.description = %q{
|
14
14
|
Allows simple search forms to be created against an AR3 model
|
15
15
|
and its associations, has useful view helpers for sort links
|
@@ -70,20 +70,9 @@ you're feeling especially appreciative. It'd help me justify this
|
|
70
70
|
"open source" stuff to my lovely wife. :)
|
71
71
|
|
72
72
|
}
|
73
|
-
s.require_paths = [
|
74
|
-
s.rubygems_version = %q{1.
|
73
|
+
s.require_paths = [%q{lib}]
|
74
|
+
s.rubygems_version = %q{1.8.0}
|
75
75
|
s.summary = %q{Object-based searching (and more) for simply creating search forms.}
|
76
|
-
s.test_files = [
|
77
|
-
"test/fixtures/company.rb",
|
78
|
-
"test/fixtures/data_type.rb",
|
79
|
-
"test/fixtures/developer.rb",
|
80
|
-
"test/fixtures/note.rb",
|
81
|
-
"test/fixtures/project.rb",
|
82
|
-
"test/fixtures/schema.rb",
|
83
|
-
"test/helper.rb",
|
84
|
-
"test/test_search.rb",
|
85
|
-
"test/test_view_helpers.rb"
|
86
|
-
]
|
87
76
|
|
88
77
|
if s.respond_to? :specification_version then
|
89
78
|
s.specification_version = 3
|
data/test/test_search.rb
CHANGED
@@ -74,6 +74,52 @@ class TestSearch < Test::Unit::TestCase
|
|
74
74
|
end
|
75
75
|
end
|
76
76
|
|
77
|
+
context "A Developer search" do
|
78
|
+
setup do
|
79
|
+
@s = Developer.search({:name_equals=>"Forgetful Notetaker"})
|
80
|
+
end
|
81
|
+
|
82
|
+
context "without any opts" do
|
83
|
+
should "find a null entry when searching notes" do
|
84
|
+
assert_equal 1, @s.notes_note_is_null(true).all.size
|
85
|
+
end
|
86
|
+
|
87
|
+
should "find no non-null entry when searching notes" do
|
88
|
+
assert_equal 0, @s.notes_note_is_not_null(true).all.size
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
context "with outer join specified" do
|
93
|
+
setup do
|
94
|
+
@s = Developer.search({:name_equals=>"Forgetful Notetaker"}, :join_type=>:outer)
|
95
|
+
end
|
96
|
+
|
97
|
+
should "find a null entry when searching notes" do
|
98
|
+
assert_equal 1, @s.notes_note_is_null(true).all.size
|
99
|
+
end
|
100
|
+
|
101
|
+
should "find no non-null entry when searching notes" do
|
102
|
+
assert_equal 0, @s.notes_note_is_not_null(true).all.size
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
context "with inner join specified" do
|
107
|
+
setup do
|
108
|
+
@s = Developer.search({:name_equals=>"Forgetful Notetaker"}, :join_type=>:inner)
|
109
|
+
end
|
110
|
+
|
111
|
+
should "find no null entry when searching notes" do
|
112
|
+
assert_equal 0, @s.notes_note_is_null(true).all.size
|
113
|
+
end
|
114
|
+
|
115
|
+
should "find no non-null entry when searching notes" do
|
116
|
+
assert_equal 0, @s.notes_note_is_not_null(true).all.size
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
|
121
|
+
end
|
122
|
+
|
77
123
|
[{:name => 'Company', :object => Company},
|
78
124
|
{:name => 'Company as a Relation', :object => Company.scoped}].each do |object|
|
79
125
|
context_a_search_against object[:name], object[:object] do
|
@@ -477,8 +523,8 @@ class TestSearch < Test::Unit::TestCase
|
|
477
523
|
@s.name_ne = 'Ernie Miller'
|
478
524
|
end
|
479
525
|
|
480
|
-
should "return
|
481
|
-
assert_equal
|
526
|
+
should "return eight results" do
|
527
|
+
assert_equal 8, @s.all.size
|
482
528
|
end
|
483
529
|
|
484
530
|
should "not return a developer named Ernie Miller" do
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: meta_search
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 1.0.
|
5
|
+
version: 1.0.5
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Ernie Miller
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-
|
13
|
+
date: 2011-05-05 00:00:00 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: shoulda
|
@@ -144,17 +144,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
144
144
|
requirements: []
|
145
145
|
|
146
146
|
rubyforge_project:
|
147
|
-
rubygems_version: 1.
|
147
|
+
rubygems_version: 1.8.0
|
148
148
|
signing_key:
|
149
149
|
specification_version: 3
|
150
150
|
summary: Object-based searching (and more) for simply creating search forms.
|
151
|
-
test_files:
|
152
|
-
|
153
|
-
- test/fixtures/data_type.rb
|
154
|
-
- test/fixtures/developer.rb
|
155
|
-
- test/fixtures/note.rb
|
156
|
-
- test/fixtures/project.rb
|
157
|
-
- test/fixtures/schema.rb
|
158
|
-
- test/helper.rb
|
159
|
-
- test/test_search.rb
|
160
|
-
- test/test_view_helpers.rb
|
151
|
+
test_files: []
|
152
|
+
|