lib/dm-tokyo-adapter/query.rb in shanna-dm-tokyo-adapter-0.3.1 vs lib/dm-tokyo-adapter/query.rb in shanna-dm-tokyo-adapter-0.3.2
- old
+ new
@@ -1,7 +1,7 @@
require 'dm-core'
-require 'rufus-tokyo'
+require 'rufus/tokyo'
module DataMapper
module Adapters
module Tokyo
@@ -75,11 +75,25 @@
else fail_native("Operation '#{operation.slug}'.")
end
end
def comparison_statement(statements, comparison, affirmative = true)
- value = comparison.value
- primitive = comparison.subject.primitive
+ subject = comparison.subject
+ primitive = subject.primitive
+ value = comparison.value.kind_of?(DataMapper::Resource) ?
+ comparison.value[comparison.value.class.serial.name] :
+ comparison.value
+
+ if subject.is_a?(DataMapper::Associations::ManyToOne::Relationship)
+ statements.add(subject.child_key.first.name, :numeq, quote_value(value), affirmative)
+ return
+ end
+
+ if subject.is_a?(DataMapper::Associations::OneToMany::Relationship)
+ value = comparison.value[subject.child_key.first.name]
+ statements.add(subject.target_key.first.name, :numeq, quote_value(value), affirmative)
+ return
+ end
if value.kind_of?(Range) && value.exclude_end?
operation = BooleanOperation.new(:and,
Comparison.new(:gte, comparison.property, value.first),
Comparison.new(:lt, comparison.property, value.last)