meta_where 0.9.3 → 0.9.4
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +4 -0
- data/Rakefile +10 -2
- data/VERSION +1 -1
- data/lib/meta_where/relation.rb +8 -4
- data/meta_where.gemspec +15 -3
- data/test/fixtures/fixed_bid_project.rb +2 -0
- data/test/fixtures/project.rb +3 -0
- data/test/fixtures/projects.yml +9 -4
- data/test/fixtures/schema.rb +6 -5
- data/test/fixtures/time_and_materials_project.rb +2 -0
- data/test/helper.rb +3 -2
- data/test/test_relations.rb +22 -2
- metadata +14 -5
data/CHANGELOG
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
Changes since 0.9.3 (2010-09-08):
|
2
|
+
* alias :& to :merge in singleton to work properly with Ruby 1.8.7.
|
3
|
+
* Fix merge to only use associations if not against the same base class. (STI)
|
4
|
+
|
1
5
|
Changes since 0.9.2 (2010-08-26):
|
2
6
|
* Updated gemspec to require Rails 3.0.0 final.
|
3
7
|
|
data/Rakefile
CHANGED
@@ -5,7 +5,7 @@ begin
|
|
5
5
|
require 'jeweler'
|
6
6
|
Jeweler::Tasks.new do |gem|
|
7
7
|
gem.name = "meta_where"
|
8
|
-
gem.summary = %Q{
|
8
|
+
gem.summary = %Q{ActiveRecord 3 query syntax on steroids.}
|
9
9
|
gem.description = %Q{
|
10
10
|
MetaWhere offers the ability to call any Arel predicate methods
|
11
11
|
(with a few convenient aliases) on your Model's attributes instead
|
@@ -22,7 +22,15 @@ begin
|
|
22
22
|
gem.add_dependency "activerecord", "~> 3.0.0"
|
23
23
|
gem.add_dependency "activesupport", "~> 3.0.0"
|
24
24
|
gem.add_dependency "arel", "~> 1.0.1"
|
25
|
-
|
25
|
+
gem.post_install_message = <<END
|
26
|
+
|
27
|
+
*** Thanks for installing MetaWhere! ***
|
28
|
+
Be sure to check out http://metautonomo.us/projects/metawhere/ for a
|
29
|
+
walkthrough of MetaWhere's features, and click the donate button if
|
30
|
+
you're feeling especially appreciative. It'd help me justify this
|
31
|
+
"open source" stuff to my lovely wife. :)
|
32
|
+
|
33
|
+
END
|
26
34
|
end
|
27
35
|
Jeweler::GemcutterTasks.new
|
28
36
|
rescue LoadError
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.9.
|
1
|
+
0.9.4
|
data/lib/meta_where/relation.rb
CHANGED
@@ -6,10 +6,15 @@ module MetaWhere
|
|
6
6
|
alias_method_chain :reset, :metawhere
|
7
7
|
alias_method_chain :scope_for_create, :metawhere
|
8
8
|
end
|
9
|
+
|
10
|
+
# We have to do this on the singleton to work with Ruby 1.8.7. Not sure why.
|
11
|
+
base.instance_eval do
|
12
|
+
alias_method :&, :merge
|
13
|
+
end
|
9
14
|
end
|
10
15
|
|
11
16
|
def merge(r, association_name = nil)
|
12
|
-
if (r && (association_name ||
|
17
|
+
if (r && (association_name || base_class != r.klass.base_class)) # Merging relations with different base.
|
13
18
|
association_name ||= (default_association = reflect_on_all_associations.detect {|a| a.klass.name == r.klass.name}) ?
|
14
19
|
default_association.name : r.table_name.to_sym
|
15
20
|
r = r.clone
|
@@ -17,11 +22,10 @@ module MetaWhere
|
|
17
22
|
r.joins_values.map! {|j| [Symbol, Hash].include?(j.class) ? {association_name => j} : j}
|
18
23
|
self.joins_values += [association_name]
|
19
24
|
end
|
25
|
+
|
20
26
|
super(r)
|
21
27
|
end
|
22
28
|
|
23
|
-
alias_method :&, :merge
|
24
|
-
|
25
29
|
def reset_with_metawhere
|
26
30
|
@mw_unique_joins = @mw_association_joins = @mw_non_association_joins =
|
27
31
|
@mw_stashed_association_joins = @mw_custom_joins = nil
|
@@ -42,7 +46,7 @@ module MetaWhere
|
|
42
46
|
|
43
47
|
def build_where(opts, other = [])
|
44
48
|
if opts.is_a?(String)
|
45
|
-
@klass.send(:sanitize_sql, other.empty? ? opts : ([opts] + other))
|
49
|
+
[@klass.send(:sanitize_sql, other.empty? ? opts : ([opts] + other))]
|
46
50
|
else
|
47
51
|
predicates = []
|
48
52
|
[opts, *other].each do |arg|
|
data/meta_where.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{meta_where}
|
8
|
-
s.version = "0.9.
|
8
|
+
s.version = "0.9.4"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Ernie Miller"]
|
12
|
-
s.date = %q{2010-09-
|
12
|
+
s.date = %q{2010-09-23}
|
13
13
|
s.description = %q{
|
14
14
|
MetaWhere offers the ability to call any Arel predicate methods
|
15
15
|
(with a few convenient aliases) on your Model's attributes instead
|
@@ -54,6 +54,7 @@ Gem::Specification.new do |s|
|
|
54
54
|
"test/fixtures/developer.rb",
|
55
55
|
"test/fixtures/developers.yml",
|
56
56
|
"test/fixtures/developers_projects.yml",
|
57
|
+
"test/fixtures/fixed_bid_project.rb",
|
57
58
|
"test/fixtures/invalid_company.rb",
|
58
59
|
"test/fixtures/invalid_developer.rb",
|
59
60
|
"test/fixtures/note.rb",
|
@@ -63,25 +64,36 @@ Gem::Specification.new do |s|
|
|
63
64
|
"test/fixtures/project.rb",
|
64
65
|
"test/fixtures/projects.yml",
|
65
66
|
"test/fixtures/schema.rb",
|
67
|
+
"test/fixtures/time_and_materials_project.rb",
|
66
68
|
"test/helper.rb",
|
67
69
|
"test/test_base.rb",
|
68
70
|
"test/test_relations.rb"
|
69
71
|
]
|
70
72
|
s.homepage = %q{http://metautonomo.us/projects/metawhere/}
|
73
|
+
s.post_install_message = %q{
|
74
|
+
*** Thanks for installing MetaWhere! ***
|
75
|
+
Be sure to check out http://metautonomo.us/projects/metawhere/ for a
|
76
|
+
walkthrough of MetaWhere's features, and click the donate button if
|
77
|
+
you're feeling especially appreciative. It'd help me justify this
|
78
|
+
"open source" stuff to my lovely wife. :)
|
79
|
+
|
80
|
+
}
|
71
81
|
s.rdoc_options = ["--charset=UTF-8"]
|
72
82
|
s.require_paths = ["lib"]
|
73
83
|
s.rubygems_version = %q{1.3.7}
|
74
|
-
s.summary = %q{
|
84
|
+
s.summary = %q{ActiveRecord 3 query syntax on steroids.}
|
75
85
|
s.test_files = [
|
76
86
|
"test/fixtures/company.rb",
|
77
87
|
"test/fixtures/data_type.rb",
|
78
88
|
"test/fixtures/developer.rb",
|
89
|
+
"test/fixtures/fixed_bid_project.rb",
|
79
90
|
"test/fixtures/invalid_company.rb",
|
80
91
|
"test/fixtures/invalid_developer.rb",
|
81
92
|
"test/fixtures/note.rb",
|
82
93
|
"test/fixtures/person.rb",
|
83
94
|
"test/fixtures/project.rb",
|
84
95
|
"test/fixtures/schema.rb",
|
96
|
+
"test/fixtures/time_and_materials_project.rb",
|
85
97
|
"test/helper.rb",
|
86
98
|
"test/test_base.rb",
|
87
99
|
"test/test_relations.rb"
|
data/test/fixtures/project.rb
CHANGED
data/test/fixtures/projects.yml
CHANGED
@@ -2,23 +2,28 @@ y2k:
|
|
2
2
|
estimated_hours: 1000
|
3
3
|
name : Y2K Software Updates
|
4
4
|
id : 1
|
5
|
+
type : FixedBidProject
|
5
6
|
|
6
7
|
virus:
|
7
8
|
estimated_hours: 80
|
8
9
|
name : Virus
|
9
10
|
id : 2
|
10
|
-
|
11
|
+
type : FixedBidProject
|
12
|
+
|
11
13
|
awesome:
|
12
14
|
estimated_hours: 100
|
13
15
|
name : Do something awesome
|
14
16
|
id : 3
|
15
|
-
|
17
|
+
type : FixedBidProject
|
18
|
+
|
16
19
|
metasearch:
|
17
20
|
estimated_hours: 100
|
18
21
|
name : MetaSearch Development
|
19
22
|
id : 4
|
20
|
-
|
23
|
+
type : TimeAndMaterialsProject
|
24
|
+
|
21
25
|
another:
|
22
26
|
estimated_hours: 120
|
23
27
|
name : Another Project
|
24
|
-
id : 5
|
28
|
+
id : 5
|
29
|
+
type : TimeAndMaterialsProject
|
data/test/fixtures/schema.rb
CHANGED
@@ -5,24 +5,25 @@ ActiveRecord::Schema.define do
|
|
5
5
|
t.datetime "created_at"
|
6
6
|
t.datetime "updated_at"
|
7
7
|
end
|
8
|
-
|
8
|
+
|
9
9
|
create_table "developers", :force => true do |t|
|
10
10
|
t.integer "company_id"
|
11
11
|
t.string "name"
|
12
12
|
t.integer "salary"
|
13
13
|
t.boolean "slacker"
|
14
14
|
end
|
15
|
-
|
15
|
+
|
16
16
|
create_table "projects", :force => true do |t|
|
17
17
|
t.string "name"
|
18
|
+
t.string "type"
|
18
19
|
t.float "estimated_hours"
|
19
20
|
end
|
20
|
-
|
21
|
+
|
21
22
|
create_table "developers_projects", :id => false, :force => true do |t|
|
22
23
|
t.integer "developer_id"
|
23
24
|
t.integer "project_id"
|
24
25
|
end
|
25
|
-
|
26
|
+
|
26
27
|
create_table "notes", :force => true do |t|
|
27
28
|
t.string "notable_type"
|
28
29
|
t.integer "notable_id"
|
@@ -43,7 +44,7 @@ ActiveRecord::Schema.define do
|
|
43
44
|
t.binary "bin"
|
44
45
|
t.boolean "bln"
|
45
46
|
end
|
46
|
-
|
47
|
+
|
47
48
|
create_table "people", :force => true do |t|
|
48
49
|
t.integer "parent_id"
|
49
50
|
t.string "name"
|
data/test/helper.rb
CHANGED
@@ -4,6 +4,9 @@ require 'shoulda'
|
|
4
4
|
require 'active_record'
|
5
5
|
require 'active_record/fixtures'
|
6
6
|
require 'active_support/time'
|
7
|
+
require 'meta_where'
|
8
|
+
|
9
|
+
MetaWhere.operator_overload!
|
7
10
|
|
8
11
|
FIXTURES_PATH = File.join(File.dirname(__FILE__), 'fixtures')
|
9
12
|
|
@@ -26,8 +29,6 @@ Fixtures.create_fixtures(FIXTURES_PATH, ActiveRecord::Base.connection.tables)
|
|
26
29
|
|
27
30
|
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
28
31
|
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
29
|
-
require 'meta_where'
|
30
|
-
MetaWhere.operator_overload!
|
31
32
|
|
32
33
|
class Test::Unit::TestCase
|
33
34
|
end
|
data/test/test_relations.rb
CHANGED
@@ -145,6 +145,26 @@ class TestRelations < Test::Unit::TestCase
|
|
145
145
|
end
|
146
146
|
end
|
147
147
|
|
148
|
+
context "A relation from an STI class" do
|
149
|
+
setup do
|
150
|
+
@r = TimeAndMaterialsProject.scoped
|
151
|
+
end
|
152
|
+
|
153
|
+
should "return results from the designated class only" do
|
154
|
+
assert_equal 2, @r.size
|
155
|
+
assert @r.all? {|r| r.is_a?(TimeAndMaterialsProject)}
|
156
|
+
end
|
157
|
+
|
158
|
+
should "inherit the default scope of the parent class" do
|
159
|
+
assert_match /IS NOT NULL/, @r.to_sql
|
160
|
+
end
|
161
|
+
|
162
|
+
should "allow use of scopes in the parent class" do
|
163
|
+
assert_equal 1, @r.hours_lte_100.size
|
164
|
+
assert_equal 'MetaSearch Development', @r.hours_lte_100.first.name
|
165
|
+
end
|
166
|
+
end
|
167
|
+
|
148
168
|
context "A merged relation" do
|
149
169
|
setup do
|
150
170
|
@r = Developer.where(:salary.gteq % 70000) & Company.where(:name.matches % 'Initech')
|
@@ -201,8 +221,8 @@ class TestRelations < Test::Unit::TestCase
|
|
201
221
|
|
202
222
|
context "with self-referencing joins on parent and children" do
|
203
223
|
setup do
|
204
|
-
@r = @r.where(:children => {:children => {:parent => {:parent => {:name => 'Abraham'}}}})
|
205
|
-
|
224
|
+
@r = @r.where(:children => {:children => {:parent => {:parent => {:name => 'Abraham'}}}}).
|
225
|
+
joins(:children => {:children => {:parent => :parent}})
|
206
226
|
end
|
207
227
|
|
208
228
|
should "join the table multiple times with aliases" do
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 9
|
8
|
-
-
|
9
|
-
version: 0.9.
|
8
|
+
- 4
|
9
|
+
version: 0.9.4
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Ernie Miller
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-09-
|
17
|
+
date: 2010-09-23 00:00:00 -04:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -114,6 +114,7 @@ files:
|
|
114
114
|
- test/fixtures/developer.rb
|
115
115
|
- test/fixtures/developers.yml
|
116
116
|
- test/fixtures/developers_projects.yml
|
117
|
+
- test/fixtures/fixed_bid_project.rb
|
117
118
|
- test/fixtures/invalid_company.rb
|
118
119
|
- test/fixtures/invalid_developer.rb
|
119
120
|
- test/fixtures/note.rb
|
@@ -123,6 +124,7 @@ files:
|
|
123
124
|
- test/fixtures/project.rb
|
124
125
|
- test/fixtures/projects.yml
|
125
126
|
- test/fixtures/schema.rb
|
127
|
+
- test/fixtures/time_and_materials_project.rb
|
126
128
|
- test/helper.rb
|
127
129
|
- test/test_base.rb
|
128
130
|
- test/test_relations.rb
|
@@ -130,7 +132,12 @@ has_rdoc: true
|
|
130
132
|
homepage: http://metautonomo.us/projects/metawhere/
|
131
133
|
licenses: []
|
132
134
|
|
133
|
-
post_install_message:
|
135
|
+
post_install_message: "\n\
|
136
|
+
*** Thanks for installing MetaWhere! ***\n\
|
137
|
+
Be sure to check out http://metautonomo.us/projects/metawhere/ for a\n\
|
138
|
+
walkthrough of MetaWhere's features, and click the donate button if\n\
|
139
|
+
you're feeling especially appreciative. It'd help me justify this\n\
|
140
|
+
\"open source\" stuff to my lovely wife. :)\n\n"
|
134
141
|
rdoc_options:
|
135
142
|
- --charset=UTF-8
|
136
143
|
require_paths:
|
@@ -157,17 +164,19 @@ rubyforge_project:
|
|
157
164
|
rubygems_version: 1.3.7
|
158
165
|
signing_key:
|
159
166
|
specification_version: 3
|
160
|
-
summary:
|
167
|
+
summary: ActiveRecord 3 query syntax on steroids.
|
161
168
|
test_files:
|
162
169
|
- test/fixtures/company.rb
|
163
170
|
- test/fixtures/data_type.rb
|
164
171
|
- test/fixtures/developer.rb
|
172
|
+
- test/fixtures/fixed_bid_project.rb
|
165
173
|
- test/fixtures/invalid_company.rb
|
166
174
|
- test/fixtures/invalid_developer.rb
|
167
175
|
- test/fixtures/note.rb
|
168
176
|
- test/fixtures/person.rb
|
169
177
|
- test/fixtures/project.rb
|
170
178
|
- test/fixtures/schema.rb
|
179
|
+
- test/fixtures/time_and_materials_project.rb
|
171
180
|
- test/helper.rb
|
172
181
|
- test/test_base.rb
|
173
182
|
- test/test_relations.rb
|