better_ar 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- data/HISTORY.txt +3 -0
- data/README.markdown +25 -4
- data/lib/better_ar.rb +8 -6
- data/lib/better_ar/version.rb +1 -1
- data/test/test_finder_methods.rb +1 -1
- metadata +2 -2
data/HISTORY.txt
CHANGED
data/README.markdown
CHANGED
@@ -1,10 +1,23 @@
|
|
1
1
|
# BetterAr
|
2
2
|
|
3
|
-
BetterAr
|
3
|
+
BetterAr replaces the .all, .first and .count methods for ActiveRecord.
|
4
|
+
|
5
|
+
|
6
|
+
## Install
|
7
|
+
|
8
|
+
Bundler:
|
9
|
+
|
10
|
+
gem 'better_ar'
|
11
|
+
|
12
|
+
Command line:
|
13
|
+
|
14
|
+
gem install better_ar
|
15
|
+
|
16
|
+
## Usage
|
4
17
|
|
5
18
|
Now a single hash can be passed to ActiveRecord::Base.all that contains not only the where values but also other scopes like 'limit' and 'order'
|
6
19
|
|
7
|
-
User.all(:age => 10, :limit => 5, :offset => 10, :order => :name)
|
20
|
+
User.all(:age => 10, :limit! => 5, :offset! => 10, :order! => :name)
|
8
21
|
|
9
22
|
is the same as
|
10
23
|
|
@@ -12,7 +25,15 @@ is the same as
|
|
12
25
|
|
13
26
|
While this may seem less concise the advantage is being able to dynamically construct the query with a single hash in code.
|
14
27
|
|
15
|
-
This library completely removes the old .all, .first and .count class methods
|
28
|
+
This library completely removes the old .all, .first and .count class methods from ActiveRecord::Base. As these methods were just delegated to ActiveRecord::Base.scoped they can still be called.
|
29
|
+
|
30
|
+
### Legacy
|
31
|
+
|
32
|
+
If the params contain :condition it will fall back to the legacy method.
|
33
|
+
|
34
|
+
## Other
|
35
|
+
|
36
|
+
Brian Cardarella (c) 2011
|
16
37
|
|
17
|
-
|
38
|
+
License: MIT (see MIT-LICENSE.txt)
|
18
39
|
|
data/lib/better_ar.rb
CHANGED
@@ -3,12 +3,14 @@ module BetterAr
|
|
3
3
|
|
4
4
|
# Breaks down the hash to do a ActiveRecord::Relation query
|
5
5
|
#
|
6
|
-
# example: User.all(:age => 10, :limit => 2, :offset => 3, :order => :name)
|
6
|
+
# example: User.all(:age => 10, :limit! => 2, :offset! => 3, :order! => :name)
|
7
7
|
#
|
8
8
|
# is the same as: User.where(:age => 10).limit(2).offset(3).order(:name)
|
9
9
|
#
|
10
10
|
# if the key :conditions is present it will fall back to legacy
|
11
11
|
#
|
12
|
+
# any key with the '!' at the end will be assumed to be a sql operator. The key should match either an ActiveRecord::Relation instance method or an ARel predicate.
|
13
|
+
#
|
12
14
|
# @param [Hash]
|
13
15
|
# Optional
|
14
16
|
# @return [ActiveRecord::Relation]
|
@@ -17,9 +19,9 @@ module BetterAr
|
|
17
19
|
|
18
20
|
unless opts.key?(:conditions)
|
19
21
|
unless opts.empty?
|
20
|
-
|
22
|
+
opts.keys.select { |key| key.to_s =~ /!$/ }.each do |predicate|
|
21
23
|
if value = opts.delete(predicate)
|
22
|
-
relation = relation.send(predicate, value)
|
24
|
+
relation = relation.send(predicate.to_s.sub('!',''), value)
|
23
25
|
end
|
24
26
|
end
|
25
27
|
relation.where(opts)
|
@@ -45,11 +47,11 @@ module BetterAr
|
|
45
47
|
# if the key :conditions is present it will fall back to legacy
|
46
48
|
#
|
47
49
|
# @param [Hash]
|
48
|
-
# Optional
|
50
|
+
# Optional follows same convention as .all
|
49
51
|
# @return [ActiveRecord::Base]
|
50
52
|
def first(opts = {})
|
51
53
|
unless opts.key?(:conditions)
|
52
|
-
all(opts.merge(:limit => 1)).first
|
54
|
+
all(opts.merge(:limit! => 1)).first
|
53
55
|
else
|
54
56
|
scoped.first(opts)
|
55
57
|
end
|
@@ -64,7 +66,7 @@ module BetterAr
|
|
64
66
|
# if the key :conditions is present it will fall back to legacy
|
65
67
|
#
|
66
68
|
# @param [Hash]
|
67
|
-
# Optional
|
69
|
+
# Optional follows same convention as .all
|
68
70
|
# @return [Integer]
|
69
71
|
def count(opts = {})
|
70
72
|
unless opts.key?(:conditions)
|
data/lib/better_ar/version.rb
CHANGED
data/test/test_finder_methods.rb
CHANGED
@@ -13,7 +13,7 @@ describe 'Enhanced Finder Methods' do
|
|
13
13
|
end
|
14
14
|
|
15
15
|
it 'extracts the non-where scopes and applies' do
|
16
|
-
test_sql = User.all(:limit => 1, :offset => 2, :order => :name, :age => 10).to_sql
|
16
|
+
test_sql = User.all(:limit! => 1, :offset! => 2, :order! => :name, :age => 10).to_sql
|
17
17
|
expected_sql = User.where(:age => 10).limit(1).offset(2).order(:name).to_sql
|
18
18
|
test_sql.must_be_like expected_sql
|
19
19
|
end
|