class Moneta::Adapters::MongoBase

@api private

Constants

DEFAULT_PORT

Attributes

backend[R]

Public Class Methods

new(options = {}) click to toggle source
# File lib/moneta/adapters/mongo/base.rb, line 13
def initialize(options = {})
  self.default_expires = options.delete(:expires)
  @expires_field = options.delete(:expires_field) || 'expiresAt'
  @value_field = options.delete(:value_field) || 'value'
  @type_field = options.delete(:type_field) || 'type'
end

Protected Instance Methods

doc_to_value(doc) click to toggle source
# File lib/moneta/adapters/mongo/base.rb, line 22
def doc_to_value(doc)
  case doc[@type_field]
  when 'Hash'
    doc = doc.dup
    doc.delete('_id')
    doc.delete(@type_field)
    doc.delete(@expires_field)
    doc
  when 'Number'
    doc[@value_field]
  else
    doc[@value_field].to_s
  end
end
value_to_doc(key, value, options) click to toggle source
# File lib/moneta/adapters/mongo/base.rb, line 37
def value_to_doc(key, value, options)
  case value
  when Hash
    value.merge('_id' => key,
                @type_field => 'Hash',
                # @expires_field must be a Time object (BSON date datatype)
                @expires_field => expires_at(options) || nil)
  when Float, Fixnum
    { '_id' => key,
      @type_field => 'Number',
      @value_field => value,
      # @expires_field must be a Time object (BSON date datatype)
      @expires_field => expires_at(options) || nil }
  when String
    intvalue = value.to_i
    { '_id' => key,
      @type_field => 'String',
      @value_field => intvalue.to_s == value ? intvalue : to_binary(value),
      # @expires_field must be a Time object (BSON date datatype)
      @expires_field => expires_at(options) || nil }
  else
    raise ArgumentError, "Invalid value type: #{value.class}"
  end
end