class Mongoid::Contextual::Mongo

Public Instance Methods

sort_with_collation(values = nil, &block) click to toggle source
# File lib/mongoid_collation.rb, line 6
def sort_with_collation(values = nil, &block)
  if klass.respond_to?(:collation_aliases)
    values = replace_collation_aliases(values)
  end

  sort_without_collation(values, &block)
end

Private Instance Methods

collated_alias(key) click to toggle source
# File lib/mongoid_collation.rb, line 49
def collated_alias(key)
  klass.collation_aliases[key.to_s]
end
is_collated?(key) click to toggle source
# File lib/mongoid_collation.rb, line 45
def is_collated?(key)
  klass.collation_aliases.has_key?(key.to_s)
end
rebuild_origin_key(key, name) click to toggle source
# File lib/mongoid_collation.rb, line 53
def rebuild_origin_key(key, name)
  ::Origin::Key.new(name, key.strategy, key.operator, key.expanded,
                    &key.block)
end
replace_collation_aliases(values) click to toggle source
# File lib/mongoid_collation.rb, line 18
def replace_collation_aliases(values)
  case values
    when Hash
      values.dup.tap do |values_copy|
        values_copy.keys.each do |key|
          if is_collated?(key)
            values_copy[collated_alias(key)] = values[key]
            values_copy.delete(key)
          end
        end
      end
    else
      Array(values).dup.tap do |values_copy|
        values_copy.each do |key|
          if key.is_a?(Origin::Key)
            if is_collated?(key.name)
              values_copy.delete(key)

              values_copy <<
                rebuild_origin_key(key, collated_alias(key.name))
            end
          end
        end
      end
  end
end