scope_chain 0.0.7 → 0.0.8

Sign up to get free protection for your applications and to get access to all the features.
@@ -16,32 +16,43 @@ module ScopeChain
16
16
  end
17
17
 
18
18
  class AssociationChain
19
- attr_accessor :instance, :association
19
+ class MissingAssociationError < StandardError; end
20
+ attr_accessor :instance, :association_name, :association
20
21
 
21
22
  def initialize(instance)
22
23
  self.instance = instance
23
24
  end
24
25
 
25
26
  def as(association_name)
26
- self.association = instance.class.reflect_on_association(association_name)
27
+ self.association_name = association_name
27
28
 
28
29
  chain
29
30
  end
30
31
 
31
32
  private
32
- def association_name(klass)
33
- klass.name.underscore.pluralize
34
- end
35
-
36
33
  def chain
34
+ raise MissingAssociationError.new("Can't find association #{association_name} on #{instance.class.name}") if association.nil?
35
+
37
36
  ScopeChain::Chain.new(association.klass).tap do |chain|
38
37
  instance.stubs(association.name => association.klass)
38
+
39
+ # This is a nasty hack
40
+ chain.define_singleton_method(:build) do |*arguments|
41
+ add_link :build, *arguments
42
+ end
43
+
44
+ association.klass.define_singleton_method(:build) {}
39
45
  end
40
46
  end
47
+
48
+ def association
49
+ # TODO See if we can just mock for the reflection
50
+ @association ||= instance.class.reflect_on_association(association_name)
51
+ end
41
52
  end
42
53
 
43
54
  class Chain
44
- LINKS = [:select, :where, :includes, :order, :find, :sum, :new, :create, :create!]
55
+ LINKS = [:select, :where, :includes, :order, :find, :sum, :new, :create, :create!, :limit, :joins]
45
56
  ALIASES = {}
46
57
 
47
58
  class ConflictedExistenceError < StandardError
@@ -1,3 +1,3 @@
1
1
  module ScopeChain
2
- VERSION = "0.0.7"
2
+ VERSION = "0.0.8"
3
3
  end
@@ -147,6 +147,10 @@ describe ScopeChain::Chain do
147
147
  end
148
148
 
149
149
  context "with associations" do
150
+ it "raises an error with a missing association" do
151
+ expect { ScopeChain.on(Owner.new).as(:missing_association)}.to raise_error(ScopeChain::AssociationChain::MissingAssociationError)
152
+ end
153
+
150
154
  describe "has_many" do
151
155
  it "properly sets stuff up" do
152
156
  source = Owner.new
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: scope_chain
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.7
5
+ version: 0.0.8
6
6
  platform: ruby
7
7
  authors:
8
8
  - Jon Moses