class Mongoid::Contextual::Mongo

Public Instance Methods

pluck_all(*fields) click to toggle source
# File lib/pluck_all/models/mongoid_extension.rb, line 39
def pluck_all(*fields)
  normalized_select = get_normalized_select(fields)
  get_query_data(normalized_select).reduce([]) do |plucked, doc|
    values = normalized_select.keys.map(&plucked_value_mapper(:all, doc))
    plucked << values.to_h
  end
end
pluck_array(*fields) click to toggle source
# File lib/pluck_all/models/mongoid_extension.rb, line 31
def pluck_array(*fields)
  normalized_select = get_normalized_select(fields)
  get_query_data(normalized_select).reduce([]) do |plucked, doc|
    values = normalized_select.keys.map(&plucked_value_mapper(:array, doc))
    plucked << (values.size == 1 ? values.first : values)
  end
end

Private Instance Methods

get_normalized_select(fields) click to toggle source
# File lib/pluck_all/models/mongoid_extension.rb, line 63
def get_normalized_select(fields)
  fields.each_with_object({}) do |f, hash|
    hash[klass.database_field_name(f)] = 1
  end
end
get_query_data(normalized_select) click to toggle source
# File lib/pluck_all/models/mongoid_extension.rb, line 59
def get_query_data(normalized_select)
  return (@view ? @view.projection(normalized_select) : query.dup.select(normalized_select))
end
plucked_value_mapper(type, doc) click to toggle source
# File lib/pluck_all/models/mongoid_extension.rb, line 49
def plucked_value_mapper(type, doc)
  proc do |n|
    values = [n, n =~ /\./ ? doc[n.partition('.')[0]] : doc[n]]
    case type
    when :array then values[1]
    when :all   then values
    end
  end
end