Class: Groupy::Entity
- Inherits:
-
Object
- Object
- Groupy::Entity
- Defined in:
- lib/rugroupy/entity.rb
Instance Method Summary collapse
- #apply_tag(tag, value, add = true) ⇒ Object
- #clear_tags ⇒ Object
- #delete ⇒ Object
- #get ⇒ Object
- #has_tag(tag, value) ⇒ Object
-
#initialize(database, name, entity_id, create = true) ⇒ Entity
constructor
A new instance of Entity.
- #similiar(tag = nil, skip = nil, limit = nil, reverse = false) ⇒ Object
- #tag(tag, value) ⇒ Object
- #untag(tag, value) ⇒ Object
Constructor Details
#initialize(database, name, entity_id, create = true) ⇒ Entity
Returns a new instance of Entity.
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
# File 'lib/rugroupy/entity.rb', line 7 def initialize(database, name, entity_id, create=true) @database, @name, @entity_id = database, name, entity_id @database.create_collection(@name) if not @database.collection_names.member?(@name) @database["#{@name}_count"].ensure_index([['_id.e', Mongo::DESCENDING], ['_id.tag', Mongo::DESCENDING], ['value.count', Mongo::DESCENDING]], :background => false) if create begin doc = Hash["_id"=>@entity_id, "tags"=>Hash.new] @database[@name].insert(doc, :safe=>true) rescue Mongo::MongoDBError => e end end end |
Instance Method Details
#apply_tag(tag, value, add = true) ⇒ Object
55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
# File 'lib/rugroupy/entity.rb', line 55 def apply_tag(tag, value, add=true) op = add ? "$addToSet" : "$pull" doc = Hash.new field = "tags.#{tag}" if value.is_a?(String) doc[op] = { field => value } else op = "$pullAll" unless add doc[op] = add ? {field => {"$each" => value}} : {field => value} end spec = Hash["_id" => @entity_id] @database[@name].update(spec, doc, :safe=>true) nil end |
#clear_tags ⇒ Object
33 34 35 36 37 38 |
# File 'lib/rugroupy/entity.rb', line 33 def spec = {"_id" => @entity_id } doc = {"$set" => { "tags" => Hash.new } } @database[@name].update(spec, doc, :safe=>true) nil end |
#delete ⇒ Object
28 29 30 31 |
# File 'lib/rugroupy/entity.rb', line 28 def delete @database[@name].remove({"_id" => @entity_id}, :safe => true) nil end |
#get ⇒ Object
24 25 26 |
# File 'lib/rugroupy/entity.rb', line 24 def get @database[@name].find_one({ "_id" => @entity_id }) end |
#has_tag(tag, value) ⇒ Object
40 41 42 43 |
# File 'lib/rugroupy/entity.rb', line 40 def has_tag(tag, value) e = self.get() e['tags'].member?(tag) and e['tags'][tag].member?(value) end |
#similiar(tag = nil, skip = nil, limit = nil, reverse = false) ⇒ Object
70 71 72 73 74 75 76 77 78 79 80 81 82 |
# File 'lib/rugroupy/entity.rb', line 70 def similiar(tag=nil, skip=nil, limit=nil, reverse=false) q = BSON::OrderedHash.new q["_id.e"] = @entity_id q["_id.tag"] = tag ? tag : {"$exists" => false} cursor = @database["#{@name}_count"].find(q, :fields => {"_id.e" => 1}) cursor.skip(skip) if skip cursor.limit(limit) if limit cursor.sort("value.count", reverse ? Mongo::ASCENDING : Mongo::DESCENDING) cursor.collect do |r| pair = r["_id"]["e"] pair[0] == @entity_id ? pair[1] : pair[0] end end |
#tag(tag, value) ⇒ Object
45 46 47 48 |
# File 'lib/rugroupy/entity.rb', line 45 def tag(tag, value) self.apply_tag(tag, value) nil end |
#untag(tag, value) ⇒ Object
50 51 52 53 |
# File 'lib/rugroupy/entity.rb', line 50 def untag(tag, value) self.apply_tag(tag, value, add=false) nil end |