From e52cdf4b935f0beabe559a2920dd7fcb768707be Mon Sep 17 00:00:00 2001 From: Tony Pitale Date: Tue, 24 May 2016 01:25:09 -0500 Subject: [PATCH 1/2] Raise error in Repository#read if query is not valid; resolve #16 --- lib/dm-core/query.rb | 2 ++ lib/dm-core/repository.rb | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/dm-core/query.rb b/lib/dm-core/query.rb index b47fd3e7d..c41cfed87 100644 --- a/lib/dm-core/query.rb +++ b/lib/dm-core/query.rb @@ -29,6 +29,8 @@ class Query include DataMapper::Assertions extend Equalizer + InvalidConditionsError = Class.new(StandardError) + OPTIONS = [ :fields, :links, :conditions, :offset, :limit, :order, :unique, :add_reversed, :reload ].to_set.freeze equalize :repository, :model, :sorted_fields, :links, :conditions, :order, :offset, :limit, :reload?, :unique?, :add_reversed? diff --git a/lib/dm-core/repository.rb b/lib/dm-core/repository.rb index 66324ec4b..7de061d77 100644 --- a/lib/dm-core/repository.rb +++ b/lib/dm-core/repository.rb @@ -158,7 +158,7 @@ def create(resources) # # @api semipublic def read(query) - return [] unless query.valid? + raise InvalidConditionsError unless query.valid? query.model.load(adapter.read(query), query) end From a6afe3e8e9879ebacebc68c05f0f32b16b4ee4cb Mon Sep 17 00:00:00 2001 From: Tony Pitale Date: Thu, 26 May 2016 15:36:53 -0500 Subject: [PATCH 2/2] Rescue invalid query in collection and model to maintain outward functionality; may be a bad idea --- lib/dm-core/collection.rb | 6 +++++- lib/dm-core/model.rb | 12 ++++++++++-- lib/dm-core/repository.rb | 2 +- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/lib/dm-core/collection.rb b/lib/dm-core/collection.rb index ad3886221..50870d781 100644 --- a/lib/dm-core/collection.rb +++ b/lib/dm-core/collection.rb @@ -1116,7 +1116,11 @@ def lazy_load tail = self.tail query = self.query - resources = repository.read(query) + resources = begin + repository.read(query) + rescue Query::InvalidConditionsError + [] + end # remove already known results resources -= head if head.any? diff --git a/lib/dm-core/model.rb b/lib/dm-core/model.rb index f206873dc..01a06f8df 100644 --- a/lib/dm-core/model.rb +++ b/lib/dm-core/model.rb @@ -380,7 +380,11 @@ def first(*args) if limit_specified all(query) else - query.repository.read(query).first + begin + query.repository.read(query).first + rescue Query::InvalidConditionsError + nil + end end end @@ -416,7 +420,11 @@ def last(*args) if limit_specified all(query) else - query.repository.read(query).last + begin + query.repository.read(query).last + rescue Query::InvalidConditionsError + nil + end end end diff --git a/lib/dm-core/repository.rb b/lib/dm-core/repository.rb index 7de061d77..83b5446bb 100644 --- a/lib/dm-core/repository.rb +++ b/lib/dm-core/repository.rb @@ -158,7 +158,7 @@ def create(resources) # # @api semipublic def read(query) - raise InvalidConditionsError unless query.valid? + raise Query::InvalidConditionsError unless query.valid? query.model.load(adapter.read(query), query) end