meta_search 1.1.0 → 1.1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +1 -1
- data/Rakefile +1 -0
- data/VERSION +1 -1
- data/lib/meta_search.rb +0 -2
- data/lib/meta_search/builder.rb +2 -1
- data/meta_search.gemspec +14 -23
- data/test/test_search.rb +2 -2
- metadata +22 -12
- data/lib/meta_search/join_dependency.rb +0 -94
data/README.rdoc
CHANGED
@@ -4,7 +4,7 @@ MetaSearch is extensible searching for your form_for enjoyment. It “wraps” o
|
|
4
4
|
|
5
5
|
== NOTE
|
6
6
|
|
7
|
-
The successor to MetaSearch is {Ransack}[http://github.com/ernie/ransack]
|
7
|
+
The successor to MetaSearch is {Ransack}[http://github.com/ernie/ransack]. It's got features
|
8
8
|
that MetaSearch doesn't, along with some API changes. I haven't had the time to dedicate to
|
9
9
|
making it bulletproof yet, so I'm releasing a 1.1.x branch of MetaSearch to help with migrations
|
10
10
|
to Rails 3.1.
|
data/Rakefile
CHANGED
@@ -17,6 +17,7 @@ begin
|
|
17
17
|
gem.add_development_dependency "shoulda"
|
18
18
|
gem.add_dependency "activerecord", "~> 3.1.0"
|
19
19
|
gem.add_dependency "activesupport", "~> 3.1.0"
|
20
|
+
gem.add_dependency "polyamorous", "~> 0.5.0"
|
20
21
|
gem.add_dependency "actionpack", "~> 3.1.0"
|
21
22
|
gem.post_install_message = <<END
|
22
23
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.1.
|
1
|
+
1.1.1
|
data/lib/meta_search.rb
CHANGED
@@ -47,13 +47,11 @@ require 'active_record'
|
|
47
47
|
require 'active_support'
|
48
48
|
require 'action_view'
|
49
49
|
require 'action_controller'
|
50
|
-
require 'meta_search/join_dependency'
|
51
50
|
require 'meta_search/searches/active_record'
|
52
51
|
require 'meta_search/helpers'
|
53
52
|
|
54
53
|
I18n.load_path += Dir[File.join(File.dirname(__FILE__), 'meta_search', 'locale', '*.yml')]
|
55
54
|
|
56
|
-
ActiveRecord::Associations::JoinDependency.send(:include, MetaSearch::JoinDependency)
|
57
55
|
ActiveRecord::Base.send(:include, MetaSearch::Searches::ActiveRecord)
|
58
56
|
ActionView::Helpers::FormBuilder.send(:include, MetaSearch::Helpers::FormBuilder)
|
59
57
|
ActionController::Base.helper(MetaSearch::Helpers::UrlHelper)
|
data/lib/meta_search/builder.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'polyamorous'
|
1
2
|
require 'meta_search/model_compatibility'
|
2
3
|
require 'meta_search/exceptions'
|
3
4
|
require 'meta_search/where'
|
@@ -254,7 +255,7 @@ module MetaSearch
|
|
254
255
|
(!klass || assoc.reflection.klass == klass)
|
255
256
|
end
|
256
257
|
unless found_association
|
257
|
-
@join_dependency.send(:
|
258
|
+
@join_dependency.send(:build, Polyamorous::Join.new(name, @join_type, klass), parent)
|
258
259
|
found_association = @join_dependency.join_associations.last
|
259
260
|
# Leverage the stashed association functionality in AR
|
260
261
|
@relation = @relation.joins(found_association)
|
data/meta_search.gemspec
CHANGED
@@ -4,18 +4,14 @@
|
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
|
-
s.name =
|
8
|
-
s.version = "1.1.
|
7
|
+
s.name = "meta_search"
|
8
|
+
s.version = "1.1.1"
|
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 =
|
13
|
-
s.description =
|
14
|
-
|
15
|
-
and its associations, has useful view helpers for sort links
|
16
|
-
and multiparameter fields as well.
|
17
|
-
}
|
18
|
-
s.email = %q{ernie@metautonomo.us}
|
11
|
+
s.authors = ["Ernie Miller"]
|
12
|
+
s.date = "2011-09-03"
|
13
|
+
s.description = "\n Allows simple search forms to be created against an AR3 model\n and its associations, has useful view helpers for sort links\n and multiparameter fields as well.\n "
|
14
|
+
s.email = "ernie@metautonomo.us"
|
19
15
|
s.extra_rdoc_files = [
|
20
16
|
"LICENSE",
|
21
17
|
"README.rdoc"
|
@@ -35,7 +31,6 @@ Gem::Specification.new do |s|
|
|
35
31
|
"lib/meta_search/helpers/form_builder.rb",
|
36
32
|
"lib/meta_search/helpers/form_helper.rb",
|
37
33
|
"lib/meta_search/helpers/url_helper.rb",
|
38
|
-
"lib/meta_search/join_dependency.rb",
|
39
34
|
"lib/meta_search/locale/en.yml",
|
40
35
|
"lib/meta_search/method.rb",
|
41
36
|
"lib/meta_search/model_compatibility.rb",
|
@@ -61,18 +56,11 @@ Gem::Specification.new do |s|
|
|
61
56
|
"test/test_search.rb",
|
62
57
|
"test/test_view_helpers.rb"
|
63
58
|
]
|
64
|
-
s.homepage =
|
65
|
-
s.post_install_message =
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
you're feeling especially appreciative. It'd help me justify this
|
70
|
-
"open source" stuff to my lovely wife. :)
|
71
|
-
|
72
|
-
}
|
73
|
-
s.require_paths = [%q{lib}]
|
74
|
-
s.rubygems_version = %q{1.8.6}
|
75
|
-
s.summary = %q{Object-based searching (and more) for simply creating search forms.}
|
59
|
+
s.homepage = "http://metautonomo.us/projects/metasearch/"
|
60
|
+
s.post_install_message = "\n*** Thanks for installing MetaSearch! ***\nBe sure to check out http://metautonomo.us/projects/metasearch/ for a\nwalkthrough of MetaSearch's features, and click the donate button if\nyou're feeling especially appreciative. It'd help me justify this\n\"open source\" stuff to my lovely wife. :)\n\n"
|
61
|
+
s.require_paths = ["lib"]
|
62
|
+
s.rubygems_version = "1.8.10"
|
63
|
+
s.summary = "Object-based searching (and more) for simply creating search forms."
|
76
64
|
|
77
65
|
if s.respond_to? :specification_version then
|
78
66
|
s.specification_version = 3
|
@@ -81,17 +69,20 @@ you're feeling especially appreciative. It'd help me justify this
|
|
81
69
|
s.add_development_dependency(%q<shoulda>, [">= 0"])
|
82
70
|
s.add_runtime_dependency(%q<activerecord>, ["~> 3.1.0"])
|
83
71
|
s.add_runtime_dependency(%q<activesupport>, ["~> 3.1.0"])
|
72
|
+
s.add_runtime_dependency(%q<polyamorous>, ["~> 0.5.0"])
|
84
73
|
s.add_runtime_dependency(%q<actionpack>, ["~> 3.1.0"])
|
85
74
|
else
|
86
75
|
s.add_dependency(%q<shoulda>, [">= 0"])
|
87
76
|
s.add_dependency(%q<activerecord>, ["~> 3.1.0"])
|
88
77
|
s.add_dependency(%q<activesupport>, ["~> 3.1.0"])
|
78
|
+
s.add_dependency(%q<polyamorous>, ["~> 0.5.0"])
|
89
79
|
s.add_dependency(%q<actionpack>, ["~> 3.1.0"])
|
90
80
|
end
|
91
81
|
else
|
92
82
|
s.add_dependency(%q<shoulda>, [">= 0"])
|
93
83
|
s.add_dependency(%q<activerecord>, ["~> 3.1.0"])
|
94
84
|
s.add_dependency(%q<activesupport>, ["~> 3.1.0"])
|
85
|
+
s.add_dependency(%q<polyamorous>, ["~> 0.5.0"])
|
95
86
|
s.add_dependency(%q<actionpack>, ["~> 3.1.0"])
|
96
87
|
end
|
97
88
|
end
|
data/test/test_search.rb
CHANGED
@@ -91,7 +91,7 @@ class TestSearch < Test::Unit::TestCase
|
|
91
91
|
|
92
92
|
context "with outer join specified" do
|
93
93
|
setup do
|
94
|
-
@s = Developer.search({:name_equals=>"Forgetful Notetaker"}, :join_type
|
94
|
+
@s = Developer.search({:name_equals => "Forgetful Notetaker"}, :join_type => :outer)
|
95
95
|
end
|
96
96
|
|
97
97
|
should "find a null entry when searching notes" do
|
@@ -105,7 +105,7 @@ class TestSearch < Test::Unit::TestCase
|
|
105
105
|
|
106
106
|
context "with inner join specified" do
|
107
107
|
setup do
|
108
|
-
@s = Developer.search({:name_equals=>"Forgetful Notetaker"}, :join_type
|
108
|
+
@s = Developer.search({:name_equals=>"Forgetful Notetaker"}, :join_type => :inner)
|
109
109
|
end
|
110
110
|
|
111
111
|
should "find no null entry when searching notes" do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: meta_search
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-
|
12
|
+
date: 2011-09-03 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: shoulda
|
16
|
-
requirement: &
|
16
|
+
requirement: &70309382367880 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70309382367880
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: activerecord
|
27
|
-
requirement: &
|
27
|
+
requirement: &70309382364060 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: 3.1.0
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70309382364060
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: activesupport
|
38
|
-
requirement: &
|
38
|
+
requirement: &70309382359180 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ~>
|
@@ -43,10 +43,21 @@ dependencies:
|
|
43
43
|
version: 3.1.0
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70309382359180
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: polyamorous
|
49
|
+
requirement: &70309382354200 !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ~>
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 0.5.0
|
55
|
+
type: :runtime
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: *70309382354200
|
47
58
|
- !ruby/object:Gem::Dependency
|
48
59
|
name: actionpack
|
49
|
-
requirement: &
|
60
|
+
requirement: &70309382347400 !ruby/object:Gem::Requirement
|
50
61
|
none: false
|
51
62
|
requirements:
|
52
63
|
- - ~>
|
@@ -54,7 +65,7 @@ dependencies:
|
|
54
65
|
version: 3.1.0
|
55
66
|
type: :runtime
|
56
67
|
prerelease: false
|
57
|
-
version_requirements: *
|
68
|
+
version_requirements: *70309382347400
|
58
69
|
description: ! "\n Allows simple search forms to be created against an AR3 model\n
|
59
70
|
\ and its associations, has useful view helpers for sort links\n and multiparameter
|
60
71
|
fields as well.\n "
|
@@ -79,7 +90,6 @@ files:
|
|
79
90
|
- lib/meta_search/helpers/form_builder.rb
|
80
91
|
- lib/meta_search/helpers/form_helper.rb
|
81
92
|
- lib/meta_search/helpers/url_helper.rb
|
82
|
-
- lib/meta_search/join_dependency.rb
|
83
93
|
- lib/meta_search/locale/en.yml
|
84
94
|
- lib/meta_search/method.rb
|
85
95
|
- lib/meta_search/model_compatibility.rb
|
@@ -137,7 +147,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
137
147
|
version: '0'
|
138
148
|
requirements: []
|
139
149
|
rubyforge_project:
|
140
|
-
rubygems_version: 1.8.
|
150
|
+
rubygems_version: 1.8.10
|
141
151
|
signing_key:
|
142
152
|
specification_version: 3
|
143
153
|
summary: Object-based searching (and more) for simply creating search forms.
|
@@ -1,94 +0,0 @@
|
|
1
|
-
module MetaSearch
|
2
|
-
|
3
|
-
module JoinDependency
|
4
|
-
|
5
|
-
class JoinAssociation < ::ActiveRecord::Associations::JoinDependency::JoinAssociation
|
6
|
-
|
7
|
-
def initialize(reflection, join_dependency, parent = nil, polymorphic_class = nil)
|
8
|
-
if polymorphic_class && ::ActiveRecord::Base > polymorphic_class
|
9
|
-
swapping_reflection_klass(reflection, polymorphic_class) do |reflection|
|
10
|
-
super(reflection, join_dependency, parent)
|
11
|
-
end
|
12
|
-
else
|
13
|
-
super(reflection, join_dependency, parent)
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
def swapping_reflection_klass(reflection, klass)
|
18
|
-
reflection = reflection.clone
|
19
|
-
original_polymorphic = reflection.options.delete(:polymorphic)
|
20
|
-
reflection.instance_variable_set(:@klass, klass)
|
21
|
-
yield reflection
|
22
|
-
ensure
|
23
|
-
reflection.options[:polymorphic] = original_polymorphic
|
24
|
-
end
|
25
|
-
|
26
|
-
def ==(other)
|
27
|
-
super && active_record == other.active_record
|
28
|
-
end
|
29
|
-
|
30
|
-
def build_constraint(reflection, table, key, foreign_table, foreign_key)
|
31
|
-
if reflection.options[:polymorphic]
|
32
|
-
super.and(
|
33
|
-
foreign_table[reflection.foreign_type].eq(reflection.klass.name)
|
34
|
-
)
|
35
|
-
else
|
36
|
-
super
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
end
|
41
|
-
|
42
|
-
# Yes, I'm using alias_method_chain here. No, I don't feel too
|
43
|
-
# bad about it. JoinDependency, or, to call it by its full proper
|
44
|
-
# name, ::ActiveRecord::Associations::JoinDependency, is one of the
|
45
|
-
# most "for internal use only" chunks of ActiveRecord.
|
46
|
-
def self.included(base)
|
47
|
-
base.class_eval do
|
48
|
-
alias_method_chain :graft, :meta_search
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
def graft_with_meta_search(*associations)
|
53
|
-
associations.each do |association|
|
54
|
-
join_associations.detect {|a| association == a} ||
|
55
|
-
build_polymorphic(association.reflection.name, association.find_parent_in(self) || join_base, association.join_type, association.reflection.klass)
|
56
|
-
end
|
57
|
-
self
|
58
|
-
end
|
59
|
-
|
60
|
-
# Should only be called by MetaSearch, and only with a single association name
|
61
|
-
def build_polymorphic(association, parent = nil, join_type = Arel::OuterJoin, klass = nil)
|
62
|
-
parent ||= join_parts.last
|
63
|
-
reflection = parent.reflections[association] or
|
64
|
-
raise ::ActiveRecord::ConfigurationError, "Association named '#{ association }' was not found; perhaps you misspelled it?"
|
65
|
-
unless join_association = find_join_association_respecting_polymorphism(reflection, parent, klass)
|
66
|
-
@reflections << reflection
|
67
|
-
join_association = build_join_association_respecting_polymorphism(reflection, parent, klass)
|
68
|
-
join_association.join_type = join_type
|
69
|
-
@join_parts << join_association
|
70
|
-
cache_joined_association(join_association)
|
71
|
-
end
|
72
|
-
|
73
|
-
join_association
|
74
|
-
end
|
75
|
-
|
76
|
-
def find_join_association_respecting_polymorphism(reflection, parent, klass)
|
77
|
-
if association = find_join_association(reflection, parent)
|
78
|
-
unless reflection.options[:polymorphic]
|
79
|
-
association
|
80
|
-
else
|
81
|
-
association if association.active_record == klass
|
82
|
-
end
|
83
|
-
end
|
84
|
-
end
|
85
|
-
|
86
|
-
def build_join_association_respecting_polymorphism(reflection, parent, klass = nil)
|
87
|
-
if reflection.options[:polymorphic] && klass
|
88
|
-
JoinAssociation.new(reflection, self, parent, klass)
|
89
|
-
else
|
90
|
-
JoinAssociation.new(reflection, self, parent)
|
91
|
-
end
|
92
|
-
end
|
93
|
-
end
|
94
|
-
end
|