aub-record_filter 0.9.0 → 0.9.1
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/README.rdoc +13 -7
- data/Rakefile +3 -3
- data/VERSION.yml +1 -1
- data/lib/record_filter/dsl/dsl.rb +4 -2
- data/lib/record_filter/group_by.rb +4 -4
- data/spec/exception_spec.rb +2 -2
- data/spec/limits_and_ordering_spec.rb +7 -0
- data/spec/test.db +0 -0
- metadata +4 -4
data/README.rdoc
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
= record_filter
|
2
2
|
|
3
|
-
record_filter is a DSL for specifying
|
3
|
+
record_filter is a DSL for specifying ActiveRecord queries in pure Ruby.
|
4
4
|
It has support for filters created on the fly and for named filters that are associated with object types.
|
5
5
|
record_filter has the following top-level features:
|
6
6
|
|
@@ -10,9 +10,14 @@ record_filter has the following top-level features:
|
|
10
10
|
* Allows chaining of filters with each other and with named scopes to create complex queries.
|
11
11
|
* Takes advantage of the associations in your ActiveRecord objects for a clean implicit join API.
|
12
12
|
|
13
|
+
== Documentation
|
14
|
+
|
15
|
+
The complete RDoc documentation is available at http://aub.github.com/record_filter/rdoc/. This page is
|
16
|
+
intended to be a getting started guide that should cover the most common uses.
|
17
|
+
|
13
18
|
== Installation
|
14
19
|
|
15
|
-
gem install
|
20
|
+
gem install aub-record_filter --source=http://gems.github.com
|
16
21
|
|
17
22
|
== Using Filters
|
18
23
|
|
@@ -31,7 +36,7 @@ This could be expressed in ActiveRecord as:
|
|
31
36
|
:joins => :posts,
|
32
37
|
:conditions => ['posts.permalink IS NULL AND blogs.created_at > ?', 'blog-post', 1.day.ago)
|
33
38
|
|
34
|
-
and it returns the same result, a list of Blog objects that are
|
39
|
+
and it returns the same result, a list of Blog objects that are the result of the query. This
|
35
40
|
type of filter is designed to be created on the fly, but if you have a filter that you would like
|
36
41
|
to use in more than one place, it can be added to a class as a named filter. The following example
|
37
42
|
creates the same filter as above and executes it:
|
@@ -51,7 +56,7 @@ complex query:
|
|
51
56
|
|
52
57
|
class Post < ActiveRecord::Base
|
53
58
|
named_filter(:title_is_monkeys) { with(:title, 'monkeys') }
|
54
|
-
named_filter(:permalink_is_donkeys) { with(:
|
59
|
+
named_filter(:permalink_is_donkeys) { with(:permalink, 'donkeys') }
|
55
60
|
end
|
56
61
|
|
57
62
|
Post.title_is_monkeys.permalink_is_donkeys
|
@@ -89,7 +94,7 @@ model even if called from a join.
|
|
89
94
|
|
90
95
|
== Specifying Filters
|
91
96
|
|
92
|
-
record_filter supports all of SQL query abstractions provided by ActiveRecord, specifically:
|
97
|
+
record_filter supports all of the SQL query abstractions provided by ActiveRecord, specifically:
|
93
98
|
|
94
99
|
* Conditions
|
95
100
|
* Boolean operations
|
@@ -141,7 +146,7 @@ The following condition types are supported through the Restriction API:
|
|
141
146
|
|
142
147
|
Conditions can be combined with boolean operators using the methods all_of, any_of, none_of
|
143
148
|
and not_all_of. These methods take a block where any conditions they contain will be combined
|
144
|
-
using AND, OR and NOT to create the correct
|
149
|
+
using AND, OR and NOT to create the correct clause. The block can also contain any number of
|
145
150
|
joins or other boolean operations. The default operator is all_of.
|
146
151
|
|
147
152
|
Post.filter do
|
@@ -198,6 +203,7 @@ added. Explicit joins also allow conditions to be set on columns of the table be
|
|
198
203
|
join(Comment, :inner) do
|
199
204
|
on(:id => :commentable_id)
|
200
205
|
on(:commentable_type).equal_to('Post')
|
206
|
+
with(:created_at).less_than(1.year.ago)
|
201
207
|
end
|
202
208
|
|
203
209
|
With implicit joins, it is also possible to use a hash as the association name, in which case
|
@@ -249,7 +255,7 @@ order in which they were given.
|
|
249
255
|
|
250
256
|
(The MIT License)
|
251
257
|
|
252
|
-
Copyright (c) 2008
|
258
|
+
Copyright (c) 2008 Aubrey Holland, Mat Brown
|
253
259
|
|
254
260
|
Permission is hereby granted, free of charge, to any person obtaining
|
255
261
|
a copy of this software and associated documentation files (the
|
data/Rakefile
CHANGED
@@ -13,10 +13,10 @@ begin
|
|
13
13
|
Jeweler::Tasks.new do |gemspec|
|
14
14
|
gemspec.name = 'record_filter'
|
15
15
|
gemspec.summary = 'Pure-ruby criteria API for building complex queries in ActiveRecord'
|
16
|
-
gemspec.email = '
|
17
|
-
gemspec.homepage = 'http://github.com/
|
16
|
+
gemspec.email = 'aubreyholland@gmail.com'
|
17
|
+
gemspec.homepage = 'http://github.com/aub/record_filter/tree/master'
|
18
18
|
gemspec.description = 'Pure-ruby criteria API for building complex queries in ActiveRecord'
|
19
|
-
gemspec.authors = ['
|
19
|
+
gemspec.authors = ['Aubrey Holland', 'Mat Brown']
|
20
20
|
end
|
21
21
|
rescue LoadError
|
22
22
|
puts "Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
|
data/VERSION.yml
CHANGED
@@ -94,13 +94,15 @@ module RecordFilter
|
|
94
94
|
# column<Symbol, Hash>::
|
95
95
|
# If a symbol is specified, it is taken to represent the name of a column on the
|
96
96
|
# class being filtered. If a hash is given, it should represent a path through the
|
97
|
-
# joins to a column in one of the joined tables.
|
97
|
+
# joins to a column in one of the joined tables. If a string is given, it is used
|
98
|
+
# without modification as the grouping parameter.
|
98
99
|
#
|
99
100
|
# ==== Returns
|
100
101
|
# nil
|
101
102
|
#
|
102
103
|
# ==== Alternatives
|
103
|
-
# As described above, it is possible to pass either a symbol
|
104
|
+
# As described above, it is possible to pass either a symbol, a hash, or a string
|
105
|
+
# as the argument.
|
104
106
|
#
|
105
107
|
# @public
|
106
108
|
def group_by(column)
|
@@ -13,11 +13,11 @@ module RecordFilter
|
|
13
13
|
column = column.values[0]
|
14
14
|
end
|
15
15
|
|
16
|
-
if (
|
17
|
-
|
16
|
+
if (table.has_column(column))
|
17
|
+
"#{table.table_alias}.#{column}"
|
18
|
+
else
|
19
|
+
column
|
18
20
|
end
|
19
|
-
|
20
|
-
"#{table.table_alias}.#{column}"
|
21
21
|
end
|
22
22
|
end
|
23
23
|
end
|
data/spec/exception_spec.rb
CHANGED
@@ -42,12 +42,12 @@ describe 'raising exceptions' do
|
|
42
42
|
}.should raise_error(RecordFilter::ColumnNotFoundException)
|
43
43
|
end
|
44
44
|
|
45
|
-
it 'should get ColumnNotFoundException for group_by' do
|
45
|
+
it 'should not get ColumnNotFoundException for group_by' do
|
46
46
|
lambda {
|
47
47
|
Post.filter do
|
48
48
|
group_by(:this_is_not_there)
|
49
49
|
end.inspect
|
50
|
-
}.
|
50
|
+
}.should_not raise_error(RecordFilter::ColumnNotFoundException)
|
51
51
|
end
|
52
52
|
|
53
53
|
it 'should get AssociationNotFoundException for orders on bad associations' do
|
@@ -145,5 +145,12 @@ describe 'filter qualifiers' do
|
|
145
145
|
end.inspect
|
146
146
|
Post.last_find[:group].should == %q("posts".created_at, posts__photo.format)
|
147
147
|
end
|
148
|
+
|
149
|
+
it 'should accept random strings as the column name' do
|
150
|
+
Post.filter do
|
151
|
+
group_by("abcdef")
|
152
|
+
end.find(:all, :select => 'posts.id as abcdef').inspect
|
153
|
+
Post.last_find[:group].should == 'abcdef'
|
154
|
+
end
|
148
155
|
end
|
149
156
|
end
|
data/spec/test.db
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: aub-record_filter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
- Mat Brown
|
8
7
|
- Aubrey Holland
|
8
|
+
- Mat Brown
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
@@ -15,7 +15,7 @@ default_executable:
|
|
15
15
|
dependencies: []
|
16
16
|
|
17
17
|
description: Pure-ruby criteria API for building complex queries in ActiveRecord
|
18
|
-
email:
|
18
|
+
email: aubreyholland@gmail.com
|
19
19
|
executables: []
|
20
20
|
|
21
21
|
extensions: []
|
@@ -65,7 +65,7 @@ files:
|
|
65
65
|
- test/performance_test.rb
|
66
66
|
- test/test.db
|
67
67
|
has_rdoc: true
|
68
|
-
homepage: http://github.com/
|
68
|
+
homepage: http://github.com/aub/record_filter/tree/master
|
69
69
|
post_install_message:
|
70
70
|
rdoc_options:
|
71
71
|
- --charset=UTF-8
|