better_ar 0.0.3 → 0.0.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/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
|