Module: Mongo::JavaImpl::Utils

Included in:
Collection, Connection, Cursor, DB
Defined in:
lib/jmongo/mongo/utils.rb

Constant Summary collapse

SortingHash =
Hash.new(0).merge!(
  "ascending" => 1, "asc" => 1, "1" => 1,
  "descending" => -1, "desc" => -1, "-1" => -1
)

Instance Method Summary collapse

Instance Method Details

#from_dbobject(obj) ⇒ Object



63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# File 'lib/jmongo/mongo/utils.rb', line 63

def from_dbobject obj
  # for better upstream compatibility make the objects into ruby hash or array

  case obj
  when Java::ComMongodb::BasicDBObject, Java::ComMongodb::CommandResult
    h = obj.hashify
    Hash[h.keys.zip(h.values.map{|v| from_dbobject(v)})]
  when Java::ComMongodb::BasicDBList
    obj.arrayify.map{|v| from_dbobject(v)}
  when Java::JavaUtil::ArrayList
    obj.map{|v| from_dbobject(v)}
  when Java::JavaUtil::Date
    Time.at(obj.get_time/1000.0)
  when Java::OrgBsonTypes::Symbol
    obj.toString.to_sym
  else
    obj
  end
end

#prep_fields(fields) ⇒ Object



25
26
27
28
29
30
31
32
33
34
35
# File 'lib/jmongo/mongo/utils.rb', line 25

def prep_fields(fields)
  case fields
  when String, Symbol
    {fields => 1}
  when Array
    fields << "_id" if fields.empty?
    Hash[fields.zip( [1]*fields.size )]
  when Hash
    fields
  end
end

#prep_sort(key_or_list = nil, direction = nil) ⇒ Object



37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/jmongo/mongo/utils.rb', line 37

def prep_sort(key_or_list=nil, direction=nil)
  return if key_or_list.nil?
  if !direction.nil?
    order = [[key_or_list, direction]]
  elsif key_or_list.is_a?(String) || key_or_list.is_a?(Symbol)
    order = [[key_or_list.to_s, 1]]
  else
    order = [key_or_list]
  end
  hord = {}
  order.flatten.each_slice(2){|k,v| hord[k] = sort_value(k,v)}
  to_dbobject(hord)
end

#raise_not_implementedObject

Raises:

  • (NoMethodError)


13
14
15
# File 'lib/jmongo/mongo/utils.rb', line 13

def raise_not_implemented
  raise NoMethodError, "This method hasn't been implemented yet."
end

#sort_value(key, value) ⇒ Object



83
84
85
86
87
88
89
90
91
92
# File 'lib/jmongo/mongo/utils.rb', line 83

def sort_value(key, value)
  val = value.to_s.downcase
  return val if val == '2d'
  direction = SortingHash[val]
  return direction if direction != 0
  raise InvalidSortValueError.new(
    "for key: #{key}, #{value} was supplied as a sort direction when acceptable values are: " +
    "Mongo::ASCENDING, 'ascending', 'asc', :ascending, :asc, 1, Mongo::DESCENDING, " +
    "'descending', 'desc', :descending, :desc, -1.")
end

#to_dbobject(obj) ⇒ Object



51
52
53
54
55
56
57
58
59
60
61
# File 'lib/jmongo/mongo/utils.rb', line 51

def to_dbobject obj
  if obj.respond_to?('to_bson')
    obj.to_bson
  elsif obj.respond_to?(:merge)
    hash_to_dbobject(obj)
  elsif obj.respond_to?(:compact)
    array_to_dblist(obj)
  else
    obj
  end
end

#trap_raise(ex_class, msg = nil) ⇒ Object



17
18
19
20
21
22
23
# File 'lib/jmongo/mongo/utils.rb', line 17

def trap_raise(ex_class, msg=nil)
  begin
    yield
  rescue => ex
    raise ex_class, msg ? "#{msg} - #{ex.message}" : ex.message
  end
end