meta_where 0.9.0 → 0.9.2
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/.gitmodules +3 -3
- data/CHANGELOG +14 -0
- data/VERSION +1 -1
- data/lib/meta_where.rb +2 -0
- data/lib/meta_where/association_reflection.rb +51 -0
- data/lib/meta_where/column.rb +2 -8
- data/meta_where.gemspec +9 -2
- data/test/fixtures/invalid_company.rb +4 -0
- data/test/fixtures/invalid_developer.rb +4 -0
- data/test/test_base.rb +21 -0
- metadata +10 -3
data/.gitmodules
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
[submodule "vendor/rails"]
|
2
|
-
path = vendor/rails
|
3
|
-
url = git://github.com/rails/rails.git
|
4
1
|
[submodule "vendor/arel"]
|
5
2
|
path = vendor/arel
|
6
3
|
url = git://github.com/rails/arel.git
|
4
|
+
[submodule "vendor/rails"]
|
5
|
+
path = vendor/rails
|
6
|
+
url = git://github.com/rails/rails.git
|
data/CHANGELOG
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
Changes since 0.9.1 (2010-08-25):
|
2
|
+
* Fix missing .any? on method chain in check for mw in association macros.
|
3
|
+
|
4
|
+
Changes since 0.9.0 (2010-08-24):
|
5
|
+
* Check for use of MetaWhere in association macros. This won't work as expected
|
6
|
+
so it's better to raise a helpful error than create a potentially confusing
|
7
|
+
behavior.
|
8
|
+
|
1
9
|
Changes since 0.5.2 (2010-07-09):
|
2
10
|
* Removed autojoin. Inner joins have side-effects. Newbies are the ones who aremost
|
3
11
|
likely to use autojoin, and they're also the ones least likely to understand why
|
@@ -10,6 +18,12 @@ Changes since 0.5.2 (2010-07-09):
|
|
10
18
|
* Improved merge functonality. It shouldn't have ever required someone to do an
|
11
19
|
autojoin to begin with. Now it just works. If you're merging two relations, you
|
12
20
|
should expect to only get results that have a match on both sides.
|
21
|
+
* Attempt to gracefully degrade in the case where a MetaWhere::Column is expected
|
22
|
+
to be a normal symbol. Return the column name in #to_s.
|
23
|
+
* Fix order clauses when constructing a limited_ids_condition for postgresql.
|
24
|
+
* Fix problems with cache_classes == false on certain server configurations. Also
|
25
|
+
handle self-join with a merge of two identical classes and a second param.
|
26
|
+
* Drop ActiveSupport::Concern and only use alias_method_chain when needed.
|
13
27
|
|
14
28
|
Changes since 0.5.1 (2010-06-22):
|
15
29
|
* Added debug_sql method to Relations. Lets you see the actual SQL that
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.9.
|
1
|
+
0.9.2
|
data/lib/meta_where.rb
CHANGED
@@ -21,7 +21,9 @@ require 'meta_where/compound'
|
|
21
21
|
require 'core_ext/symbol'
|
22
22
|
require 'core_ext/hash'
|
23
23
|
require 'meta_where/builder'
|
24
|
+
require 'meta_where/association_reflection'
|
24
25
|
require 'meta_where/relation'
|
25
26
|
require 'meta_where/join_dependency'
|
26
27
|
ActiveRecord::Relation.send(:include, MetaWhere::Relation)
|
28
|
+
ActiveRecord::Reflection::AssociationReflection.send(:include, MetaWhere::AssociationReflection)
|
27
29
|
ActiveRecord::Associations::ClassMethods::JoinDependency.send(:include, MetaWhere::JoinDependency)
|
@@ -0,0 +1,51 @@
|
|
1
|
+
module MetaWhere
|
2
|
+
class MetaWhereInAssociationError < StandardError; end
|
3
|
+
|
4
|
+
module AssociationReflection
|
5
|
+
|
6
|
+
def initialize(macro, name, options, active_record)
|
7
|
+
super
|
8
|
+
|
9
|
+
if options.has_key?(:conditions)
|
10
|
+
ensure_no_metawhere_in_conditions(options[:conditions])
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
|
16
|
+
def ensure_no_metawhere_in_conditions(obj)
|
17
|
+
case obj
|
18
|
+
when Hash
|
19
|
+
if obj.keys.grep(MetaWhere::Column).any?
|
20
|
+
raise MetaWhereInAssociationError, <<END
|
21
|
+
The :#{name} association has a MetaWhere::Column in its :conditions. \
|
22
|
+
If you actually needed to access conditions other than equality, then you most \
|
23
|
+
likely meant to set up a scope or method, instead. Associations only work with \
|
24
|
+
standard equality conditions, since they can be used to create records as well.
|
25
|
+
END
|
26
|
+
end
|
27
|
+
|
28
|
+
obj.values.each do |v|
|
29
|
+
case v
|
30
|
+
when MetaWhere::Condition, Array, Hash
|
31
|
+
ensure_no_metawhere_in_conditions(v)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
when Array
|
35
|
+
obj.each do |v|
|
36
|
+
case v
|
37
|
+
when MetaWhere::Condition, Array, Hash
|
38
|
+
ensure_no_metawhere_in_conditions(v)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
when MetaWhere::Condition
|
42
|
+
raise MetaWhereInAssociationError, <<END
|
43
|
+
The :#{name} association has a MetaWhere::Condition in its :conditions. \
|
44
|
+
If you actually needed to access conditions other than equality, then you most \
|
45
|
+
likely meant to set up a scope or method, instead. Associations only work with \
|
46
|
+
standard equality conditions, since they can be used to create records as well.
|
47
|
+
END
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
data/lib/meta_where/column.rb
CHANGED
@@ -39,15 +39,9 @@ module MetaWhere
|
|
39
39
|
[column, method].hash
|
40
40
|
end
|
41
41
|
|
42
|
-
# Play
|
42
|
+
# Play nicely with expand_hash_conditions_for_aggregates
|
43
43
|
def to_sym
|
44
|
-
|
44
|
+
"#{column}.#{method}".to_sym
|
45
45
|
end
|
46
|
-
|
47
|
-
# Let's degrade hracefully if someone expects us to be a symbol or something
|
48
|
-
def to_s
|
49
|
-
@column
|
50
|
-
end
|
51
|
-
|
52
46
|
end
|
53
47
|
end
|
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.2"
|
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-08-
|
12
|
+
s.date = %q{2010-08-26}
|
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
|
@@ -38,6 +38,7 @@ Gem::Specification.new do |s|
|
|
38
38
|
"lib/core_ext/symbol.rb",
|
39
39
|
"lib/core_ext/symbol_operators.rb",
|
40
40
|
"lib/meta_where.rb",
|
41
|
+
"lib/meta_where/association_reflection.rb",
|
41
42
|
"lib/meta_where/builder.rb",
|
42
43
|
"lib/meta_where/column.rb",
|
43
44
|
"lib/meta_where/compound.rb",
|
@@ -53,6 +54,8 @@ Gem::Specification.new do |s|
|
|
53
54
|
"test/fixtures/developer.rb",
|
54
55
|
"test/fixtures/developers.yml",
|
55
56
|
"test/fixtures/developers_projects.yml",
|
57
|
+
"test/fixtures/invalid_company.rb",
|
58
|
+
"test/fixtures/invalid_developer.rb",
|
56
59
|
"test/fixtures/note.rb",
|
57
60
|
"test/fixtures/notes.yml",
|
58
61
|
"test/fixtures/people.yml",
|
@@ -61,6 +64,7 @@ Gem::Specification.new do |s|
|
|
61
64
|
"test/fixtures/projects.yml",
|
62
65
|
"test/fixtures/schema.rb",
|
63
66
|
"test/helper.rb",
|
67
|
+
"test/test_base.rb",
|
64
68
|
"test/test_relations.rb"
|
65
69
|
]
|
66
70
|
s.homepage = %q{http://metautonomo.us/projects/metawhere/}
|
@@ -72,11 +76,14 @@ Gem::Specification.new do |s|
|
|
72
76
|
"test/fixtures/company.rb",
|
73
77
|
"test/fixtures/data_type.rb",
|
74
78
|
"test/fixtures/developer.rb",
|
79
|
+
"test/fixtures/invalid_company.rb",
|
80
|
+
"test/fixtures/invalid_developer.rb",
|
75
81
|
"test/fixtures/note.rb",
|
76
82
|
"test/fixtures/person.rb",
|
77
83
|
"test/fixtures/project.rb",
|
78
84
|
"test/fixtures/schema.rb",
|
79
85
|
"test/helper.rb",
|
86
|
+
"test/test_base.rb",
|
80
87
|
"test/test_relations.rb"
|
81
88
|
]
|
82
89
|
|
data/test/test_base.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
class TestBase < Test::Unit::TestCase
|
4
|
+
should "raise nothing when an association's conditions hash doesn't use MetaWhere" do
|
5
|
+
assert_nothing_raised do
|
6
|
+
Company.all
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
should "raise an exception when MetaWhere::Columns are in :conditions of an association" do
|
11
|
+
assert_raises MetaWhere::MetaWhereInAssociationError do
|
12
|
+
InvalidCompany.all
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
should "raise an exception when MetaWhere::Conditions are in :conditions of an association" do
|
17
|
+
assert_raises MetaWhere::MetaWhereInAssociationError do
|
18
|
+
InvalidDeveloper.all
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
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
|
+
- 2
|
9
|
+
version: 0.9.2
|
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-08-
|
17
|
+
date: 2010-08-26 00:00:00 -04:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -101,6 +101,7 @@ files:
|
|
101
101
|
- lib/core_ext/symbol.rb
|
102
102
|
- lib/core_ext/symbol_operators.rb
|
103
103
|
- lib/meta_where.rb
|
104
|
+
- lib/meta_where/association_reflection.rb
|
104
105
|
- lib/meta_where/builder.rb
|
105
106
|
- lib/meta_where/column.rb
|
106
107
|
- lib/meta_where/compound.rb
|
@@ -116,6 +117,8 @@ files:
|
|
116
117
|
- test/fixtures/developer.rb
|
117
118
|
- test/fixtures/developers.yml
|
118
119
|
- test/fixtures/developers_projects.yml
|
120
|
+
- test/fixtures/invalid_company.rb
|
121
|
+
- test/fixtures/invalid_developer.rb
|
119
122
|
- test/fixtures/note.rb
|
120
123
|
- test/fixtures/notes.yml
|
121
124
|
- test/fixtures/people.yml
|
@@ -124,6 +127,7 @@ files:
|
|
124
127
|
- test/fixtures/projects.yml
|
125
128
|
- test/fixtures/schema.rb
|
126
129
|
- test/helper.rb
|
130
|
+
- test/test_base.rb
|
127
131
|
- test/test_relations.rb
|
128
132
|
has_rdoc: true
|
129
133
|
homepage: http://metautonomo.us/projects/metawhere/
|
@@ -161,9 +165,12 @@ test_files:
|
|
161
165
|
- test/fixtures/company.rb
|
162
166
|
- test/fixtures/data_type.rb
|
163
167
|
- test/fixtures/developer.rb
|
168
|
+
- test/fixtures/invalid_company.rb
|
169
|
+
- test/fixtures/invalid_developer.rb
|
164
170
|
- test/fixtures/note.rb
|
165
171
|
- test/fixtures/person.rb
|
166
172
|
- test/fixtures/project.rb
|
167
173
|
- test/fixtures/schema.rb
|
168
174
|
- test/helper.rb
|
175
|
+
- test/test_base.rb
|
169
176
|
- test/test_relations.rb
|