better_ar 0.0.7 → 0.0.8

Sign up to get free protection for your applications and to get access to all the features.
data/HISTORY.txt CHANGED
@@ -1,3 +1,6 @@
1
+ ## 0.0.8
2
+ Don't extract joins for values of ActiveRecord::Base
3
+
1
4
  ## 0.0.7
2
5
  Added support for association collections
3
6
  Moved ActiveRecord::Relation included methods into proper modules
data/TODO ADDED
@@ -0,0 +1 @@
1
+ * Nested joins
@@ -29,30 +29,9 @@ module BetterAr
29
29
  super(opts)
30
30
  else
31
31
  relation = clone
32
-
33
- unless opts.key?(:conditions)
34
- unless opts.empty?
35
- opts.keys.select { |key| key.to_s =~ /!$/ }.each do |predicate|
36
- if value = opts.delete(predicate)
37
- relation = relation.send(predicate.to_s.sub('!',''), value)
38
- end
39
- end
40
-
41
- reflect_on_all_associations.map(&:name).each do |name|
42
- if opts.key?(name)
43
- relation = relation.joins(name)
44
- end
45
- end
46
-
47
- relation.where(opts)
48
- end
49
-
50
- if opts.empty?
51
- relation
52
- else
53
- relation.where(opts)
54
- end
55
- end
32
+ relation = better_ar_apply_sql_clauses(relation, opts)
33
+ relation = better_ar_apply_associations(relation, opts)
34
+ relation.where(opts)
56
35
  end
57
36
  end
58
37
 
@@ -78,6 +57,31 @@ module BetterAr
78
57
  all(opts.merge(:limit! => 1)).first
79
58
  end
80
59
  end
60
+
61
+ private
62
+
63
+ def better_ar_apply_sql_clauses(relation, opts = {})
64
+ opts.keys.select { |key| key.to_s =~ /!$/ }.each do |clause|
65
+ if value = opts.delete(clause)
66
+ relation = relation.send(clause.to_s.sub('!',''), value)
67
+ end
68
+ end
69
+
70
+ relation
71
+ end
72
+
73
+ def better_ar_apply_associations(relation, opts = {})
74
+ (reflect_on_all_associations.map(&:name) & better_ar_join_keys(opts)).each do |name|
75
+ relation = relation.joins(name)
76
+ end
77
+
78
+ relation
79
+ end
80
+
81
+ def better_ar_join_keys(opts = {})
82
+ opts.keys.select { |key| !opts[key].kind_of?(ActiveRecord::Base) }
83
+ end
84
+
81
85
  end
82
86
  end
83
87
 
@@ -1,3 +1,3 @@
1
1
  module BetterAr
2
- VERSION = "0.0.7"
2
+ VERSION = "0.0.8"
3
3
  end
@@ -17,6 +17,13 @@ describe 'ActiveRecord::Relation Finder Methods' do
17
17
  expected_sql = User.joins(:records).where(:records => { :name => 'test' }).to_sql
18
18
  test_sql.must_be_like expected_sql
19
19
  end
20
+
21
+ it 'will ignore implicit joins if value is an instance of ActiveRecord::Base' do
22
+ user = User.create
23
+ test_sql = Record.all(:user => user).to_sql
24
+ expected_sql = Record.where(:user => user).to_sql
25
+ test_sql.must_be_like expected_sql
26
+ end
20
27
  end
21
28
 
22
29
  describe '.first' do
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 0
8
- - 7
9
- version: 0.0.7
8
+ - 8
9
+ version: 0.0.8
10
10
  platform: ruby
11
11
  authors:
12
12
  - Brian Cardarella
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2011-02-11 00:00:00 -05:00
17
+ date: 2011-02-15 00:00:00 -05:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -49,6 +49,7 @@ files:
49
49
  - MIT-LICENSE.txt
50
50
  - README.markdown
51
51
  - Rakefile
52
+ - TODO
52
53
  - better_ar.gemspec
53
54
  - lib/better_ar.rb
54
55
  - lib/better_ar/association_collection.rb