class Datagrid::Drivers::Mongoid

@!visibility private

Public Class Methods

match?(scope) click to toggle source
# File lib/datagrid/drivers/mongoid.rb, line 6
def self.match?(scope)
  return false unless defined?(::Mongoid)
  if scope.is_a?(Class)
    scope.ancestors.include?(::Mongoid::Document)
  else
    scope.is_a?(::Mongoid::Criteria)
  end
end

Public Instance Methods

asc(scope, order) click to toggle source
# File lib/datagrid/drivers/mongoid.rb, line 30
def asc(scope, order)
  scope.asc(order)
end
batch_each(scope, batch_size) { |item| ... } click to toggle source
# File lib/datagrid/drivers/mongoid.rb, line 82
def batch_each(scope, batch_size, &block)
  current_page = 0
  loop do
    batch = scope.skip(current_page * batch_size).limit(batch_size).to_a
    return if batch.empty?
    scope.skip(current_page * batch_size).limit(batch_size).each do |item|
      yield(item)
    end
    current_page+=1
  end
end
can_preload?(scope, association) click to toggle source
# File lib/datagrid/drivers/mongoid.rb, line 102
def can_preload?(scope, association)
  !! scope.klass.reflect_on_association(association)
end
column_names(scope) click to toggle source
# File lib/datagrid/drivers/mongoid.rb, line 58
def column_names(scope)
  to_scope(scope).klass.fields.keys
end
contains(scope, field, value) click to toggle source
# File lib/datagrid/drivers/mongoid.rb, line 54
def contains(scope, field, value)
  scope.where(field => Regexp.compile(Regexp.escape(value)))
end
default_cache_key(asset) click to toggle source
# File lib/datagrid/drivers/mongoid.rb, line 94
def default_cache_key(asset)
  asset.id || raise(NotImplementedError)
end
default_order(scope, column_name) click to toggle source
# File lib/datagrid/drivers/mongoid.rb, line 38
def default_order(scope, column_name)
  has_column?(scope, column_name) ? column_name : nil
end
default_preload(scope, value) click to toggle source
# File lib/datagrid/drivers/mongoid.rb, line 98
def default_preload(scope, value)
  scope.includes(value)
end
desc(scope, order) click to toggle source
# File lib/datagrid/drivers/mongoid.rb, line 34
def desc(scope, order)
  scope.desc(order)
end
greater_equal(scope, field, value) click to toggle source
# File lib/datagrid/drivers/mongoid.rb, line 42
def greater_equal(scope, field, value)
  scope.where(field => {"$gte" => value})
end
has_column?(scope, column_name) click to toggle source
# File lib/datagrid/drivers/mongoid.rb, line 50
def has_column?(scope, column_name)
  column_names(scope).include?(column_name.to_s)
end
less_equal(scope, field, value) click to toggle source
# File lib/datagrid/drivers/mongoid.rb, line 46
def less_equal(scope, field, value)
  scope.where(field => {"$lte" => value})
end
normalized_column_type(scope, field) click to toggle source
# File lib/datagrid/drivers/mongoid.rb, line 62
def normalized_column_type(scope, field)
  type = to_scope(scope).klass.fields[field.to_s]&.type
  return nil unless type
  {
    [BigDecimal , String, Symbol, Range, Array, Hash, ] => :string,
    [::Mongoid::Boolean] => :boolean,

    [Date] => :date,

    TIMESTAMP_CLASSES => :timestamp,

    [Float] => :float,

    [Integer] => :integer,
  }.each do |keys, value|
    return value if keys.include?(type)
  end
  return :string
end
to_scope(scope) click to toggle source
# File lib/datagrid/drivers/mongoid.rb, line 15
def to_scope(scope)
  if scope.respond_to?(:all)
    scope.all
  else
    scope.where(nil)
  end
end
where(scope, attribute, value) click to toggle source
# File lib/datagrid/drivers/mongoid.rb, line 23
def where(scope, attribute, value)
  if value.is_a?(Range)
    value = {"$gte" => value.first, "$lte" => value.last}
  end
  scope.where(attribute => value)
end