module ObjectidColumns::ActiveRecord::Relation

This module gets included into ActiveRecord::Relation; it is responsible for modifying the behavior of where. Note that when you call where directly on an ActiveRecord class, it (through various AR magic) ends up calling ActiveRecord::Relation#where, so this takes care of that, too.

Public Instance Methods

where(*args) click to toggle source

There is really only one case where we can transparently modify queries – where you’re using hash syntax:

model.where(:foo_oid => <objectID>)

If you’re using SQL string syntax:

model.where("foo_oid = ?", <objectID>)

…then there’s no way to reliably determine what should be converted as an ObjectId (and, critically, to what format – hex or binary – we should convert it). As such, we leave the responsibility for that case up to the user.

Calls superclass method
# File lib/objectid_columns/active_record/relation.rb, line 22
def where(*args)
  # Bail out if we don't have any ObjectId columns
  return super(*args) unless respond_to?(:has_objectid_columns?) && has_objectid_columns?
  # Bail out if we're not using the Hash form
  return super(*args) unless args.length == 1 && args[0].kind_of?(Hash)

  query = { }
  args[0].each do |key, value|
    # #translate_objectid_query_pair is a method defined on the ObjectidColumns::ObjectidColumnsManager, and is
    # called via the delegation defined in ObjectidColumns::HasObjectidColumns.
    (key, value) = translate_objectid_query_pair(key, value)
    query[key] = value
  end

  super(query)
end