meta_where 0.9.3 → 0.9.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/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
|