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)