activerecord_finder 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -3,7 +3,7 @@ module ActiveRecordFinder
3
3
  def restrict(finder = nil, &block)
4
4
  raise ArgumentError, 'wrong number of arguments (0 for 1)' if block.nil? && finder.nil?
5
5
  if block
6
- where(new_finder(&block).arel)
6
+ where(create_finder(&block).arel)
7
7
  else
8
8
  where(finder.arel)
9
9
  end
@@ -11,6 +11,13 @@ module ActiveRecordFinder
11
11
  alias :condition :restrict
12
12
 
13
13
  def new_finder(&block)
14
+ finder = create_finder(&block)
15
+ scoped_where = scoped.arel.where_clauses.map { |w| Arel.sql(w) }
16
+ arel = Arel::Nodes::And.new([*scoped_where, finder.arel])
17
+ ActiveRecordFinder::Finder.new(arel_table, arel)
18
+ end
19
+
20
+ def create_finder(&block)
14
21
  activerecord_finder = ActiveRecordFinder::Finder.new(arel_table)
15
22
  if block.arity == 1
16
23
  block.call(activerecord_finder)
@@ -18,5 +25,6 @@ module ActiveRecordFinder
18
25
  activerecord_finder.instance_eval(&block)
19
26
  end
20
27
  end
28
+ private :create_finder
21
29
  end
22
30
  end
@@ -26,13 +26,11 @@ describe ActiveRecordFinder::Where do
26
26
  result.should == [seventeen]
27
27
  end
28
28
 
29
- it 'concatenates arel conditions' do
30
- pending
31
- finder1 = Person.where(name: "Foo").arel
32
- finder2 = Person.new_finder { age == 17 }
33
- result = Person.where((finder2 & finder1).arel)
34
- result.should == [seventeen]
35
- result = Person.where((finder1 & finder2).arel)
36
- result.should == [seventeen]
29
+ it 'concatenates scoped conditions' do
30
+ boo = Person.create!(name: "Boo", age: 17)
31
+ person = Person.where(age: 17).where('name LIKE ?', 'B%')
32
+ new_finder = person.new_finder { name == 'Boo' }
33
+ result = Person.restrict(new_finder)
34
+ result.should == [boo]
37
35
  end
38
36
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activerecord_finder
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-07-02 00:00:00.000000000 Z
12
+ date: 2013-07-03 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activerecord