class Lolita::Adapter::Mongoid
Attributes
dbi[R]
klass[R]
Public Class Methods
new(dbi)
click to toggle source
# File lib/lolita/adapter/mongoid.rb, line 8 def initialize(dbi) @dbi=dbi @klass=dbi.klass end
Public Instance Methods
associations()
click to toggle source
Return all class associations
# File lib/lolita/adapter/mongoid.rb, line 53 def associations # is caching ok? unless @associations @associations = {} klass.relations.each{|name,association| @associations[name.to_s] = Association.new(association,self) } end @associations end
collection()
click to toggle source
# File lib/lolita/adapter/mongoid.rb, line 215 def collection self.klass.collection end
collection_name()
click to toggle source
# File lib/lolita/adapter/mongoid.rb, line 219 def collection_name self.klass.collection_name end
collection_name=(value)
click to toggle source
# File lib/lolita/adapter/mongoid.rb, line 223 def collection_name=(value) self.klass.collection_name = value end
collection_names()
click to toggle source
# File lib/lolita/adapter/mongoid.rb, line 231 def collection_names db.collection_names end
collections()
click to toggle source
# File lib/lolita/adapter/mongoid.rb, line 227 def collections db.collections end
db()
click to toggle source
# File lib/lolita/adapter/mongoid.rb, line 207 def db self.klass.db end
db_name()
click to toggle source
# File lib/lolita/adapter/mongoid.rb, line 211 def db_name self.klass.db.name end
field_by_association(name)
click to toggle source
# File lib/lolita/adapter/mongoid.rb, line 136 def field_by_association(name) possible_association = self.associations.detect{|assoc_name,association| name.to_s == assoc_name.to_s } if possible_association self.field_by_name(possible_association.last.key) end end
field_by_name(name)
click to toggle source
# File lib/lolita/adapter/mongoid.rb, line 130 def field_by_name(name) self.fields.detect{|field| field.name.to_s == name.to_s } end
fields()
click to toggle source
# File lib/lolita/adapter/mongoid.rb, line 123 def fields @fields||=self.klass.fields.collect{|name,field| Field.new(field,self) } @fields end
map_reduce_search(content_fields,query)
click to toggle source
FIXME
# File lib/lolita/adapter/mongoid.rb, line 170 def map_reduce_search(content_fields,query) keys = "[" + @dbi.fields.map{|f| f.primary? || f.name.to_s.match(/^_/) ? nil : "'#{f.name}'" }.compact.join(",").to_s + "]" content_keys = "[" + content_fields.map{|f| "'#{f.name}'"}.join(",").to_s + "]" result_obj = @dbi.fields.map{|f| f.name.to_s.match(/^_/) ? nil : "'#{f.name}': false" }.compact.join(",") result_obj = "{#{result_obj}}" map = %^ function(){ var doc = #{result_obj}; var do_emit = false; for(var k in #{content_keys}){ var c_val = this[k]; if(c_val && c_val.match(/#{Regexp.escape(query)}/i)){ do_emit = true; break; }; }; if(true){ #{keys}.forEach(function(k){ doc[k] = this.name; }) emit(this.id,doc); }; }; ^ reduce = %^ function(key,values){ return values[values.length-1]; }; ^ self.collection.map_reduce(map,reduce, {:out => "custom_mr", :query => {}}) end
nested_attributes_options()
click to toggle source
# File lib/lolita/adapter/mongoid.rb, line 235 def nested_attributes_options self.klass.relations end
order_method()
click to toggle source
# File lib/lolita/adapter/mongoid.rb, line 239 def order_method :order_by end
search(query, options = {})
click to toggle source
# File lib/lolita/adapter/mongoid.rb, line 145 def search(query, options = {}) unless query.blank? content_fields = @dbi.fields.map{|field| if field.type!="string" || field.name.match(/^_/) nil else field.name.to_sym end }.compact if options[:fields] && options[:fields].any? content_fields = content_fields & options[:fields] end content_fields = content_fields.slice(0..3) where_hash = {} content_fields.each do |field| where_hash[field] = /#{Regexp.escape(query.to_s)}/ end klass.where(where_hash) else klass.where(nil) end end