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