Skip to content

Commit

Permalink
Refactor error names (again)
Browse files Browse the repository at this point in the history
  • Loading branch information
emancu committed Feb 16, 2014
1 parent 665190e commit e02edb1
Show file tree
Hide file tree
Showing 5 changed files with 24 additions and 16 deletions.
4 changes: 3 additions & 1 deletion lib/ork/errors.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,10 @@ class Error < StandardError; end
class IndexNotFound < RuntimeError; end
class UniqueIndexViolation < RuntimeError; end

class NotOrkObject < StandardError; end

# Document
class NotOrkDocument < StandardError; end
class InvalidClass < RuntimeError; end

# Embedded
class NotEmbeddable < StandardError; end
Expand Down
11 changes: 11 additions & 0 deletions lib/ork/model.rb
Original file line number Diff line number Diff line change
Expand Up @@ -68,5 +68,16 @@ def new_embedded(model, attributes)

model.new attributes
end

def assert_valid_class(object, model)
raise Ork::NotOrkObject.new(object) unless object.class.include? Ork::Document
raise Ork::InvalidClass.new(object) if object.class.name != model.to_s
end

def assert_embeddable(object)
unless object.respond_to?(:embeddable?) && object.embeddable?
raise Ork::NotEmbeddable.new(object)
end
end
end
end
19 changes: 7 additions & 12 deletions lib/ork/model/associations.rb
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,8 @@ def reference(name, model)
end

define_method(:"#{name}=") do |object|
raise Ork::NotOrkDocument.new(object) if object.class.name != model.to_s
assert_valid_class object, model

send(writer, object ? object.id : nil)
@_memo[name] = object
end
Expand Down Expand Up @@ -145,14 +146,14 @@ def collection(name, model, reference = to_reference)
end

define_method(:"#{name}_add") do |object|
raise Ork::NotOrkDocument.new(object) if object.class.name != model.to_s
assert_valid_class object, model

@attributes[reader] = Array(@attributes[reader]) << object.id
@_memo[name] << object if @_memo[name]
end

define_method(:"#{name}_remove") do |object|
raise Ork::NotOrkDocument.new(object) if object.class.name != model.to_s
assert_valid_class object, model

@_memo[name].delete(object) if @_memo[name]
@attributes[reader].delete(object.id) and object if @attributes[reader]
Expand Down Expand Up @@ -197,9 +198,7 @@ def embed(name, model)
end

define_method(:"#{name}=") do |object|
unless object.respond_to?(:embeddable?) && object.embeddable?
raise Ork::NotEmbeddable.new(object)
end
assert_embeddable object

@embedding[name] = object.attributes
object.__parent = self
Expand Down Expand Up @@ -248,19 +247,15 @@ def embed_collection(name, model)
end

define_method(:"#{name}_add") do |object|
unless object.respond_to?(:embeddable?) && object.embeddable?
raise Ork::NotEmbeddable.new(object)
end
assert_embeddable object

object.__parent = self
@_memo[name] << object if @_memo[name]
@embedding[name] = Array(@embedding[name]) << object.attributes
end

define_method(:"#{name}_remove") do |object|
unless object.respond_to?(:embeddable?) && object.embeddable?
raise Ork::NotEmbeddable.new(object)
end
assert_embeddable object

object.__parent = nil
@_memo[name].delete(object) if @_memo[name]
Expand Down
4 changes: 2 additions & 2 deletions test/associations/collection_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ class Comment
end

test 'raise an exception assigning an object of the wrong type' do
assert_raise(Ork::NotOrkDocument) do
assert_raise(Ork::NotOrkObject) do
Post.new.comments_add 'Not a comment'
end
end
Expand Down Expand Up @@ -125,7 +125,7 @@ class Comment
end

test 'raise an exception removing an object of the wrong type' do
assert_raise(Ork::NotOrkDocument) do
assert_raise(Ork::NotOrkObject) do
Post.new.comments_remove 'Not a comment'
end
end
Expand Down
2 changes: 1 addition & 1 deletion test/associations/reference_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ class Comment
end

should 'raise an exception assigning an object of the wrong type' do
assert_raise(Ork::NotOrkDocument) do
assert_raise(Ork::NotOrkObject) do
Comment.new post: 'Not a post'
end
end
Expand Down

0 comments on commit e02edb1

Please sign in to comment.