Module: Seabright::Collections
- Included in:
- RedisObject
- Defined in:
- lib/redis_object/collection.rb
Defined Under Namespace
Modules: ClassMethods
Class Method Summary collapse
Instance Method Summary collapse
- #<<(obj) ⇒ Object
- #backreferences(cls = nil) ⇒ Object
- #collect_type_by_key(col, *keys) ⇒ Object
- #collection_name ⇒ Object
- #collection_names ⇒ Object
- #collections ⇒ Object
- #delete_child(obj) ⇒ Object
- #dereference_from(obj) ⇒ Object
- #dereference_from_backreferences ⇒ Object
- #get(k) ⇒ Object
- #get_collection(name) ⇒ Object
- #has_collection?(name) ⇒ Boolean
- #hkey_col(ident = nil) ⇒ Object
- #load(o_id) ⇒ Object
- #mset(dat) ⇒ Object
- #push(obj) ⇒ Object
- #ref_key(ident = nil) ⇒ Object
- #reference(obj) ⇒ Object
- #referenced_by(obj) ⇒ Object
- #remove_collection!(name) ⇒ Object
- #set(k, v) ⇒ Object
Class Method Details
.included(base) ⇒ Object
196 197 198 |
# File 'lib/redis_object/collection.rb', line 196 def self.included(base) base.extend(ClassMethods) end |
Instance Method Details
#<<(obj) ⇒ Object
43 44 45 |
# File 'lib/redis_object/collection.rb', line 43 def <<(obj) reference obj end |
#backreferences(cls = nil) ⇒ Object
59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/redis_object/collection.rb', line 59 def backreferences(cls = nil) out = store.smembers(ref_key).map do |backreference_hkey| obj = RedisObject.find_by_key(backreference_hkey) if cls && !obj.is_a?(cls) nil else obj end end out.compact end |
#collect_type_by_key(col, *keys) ⇒ Object
130 131 132 133 134 135 |
# File 'lib/redis_object/collection.rb', line 130 def collect_type_by_key(col,*keys) collect = get_collection(col) keys.each do |k| collect << k end end |
#collection_name ⇒ Object
29 30 31 |
# File 'lib/redis_object/collection.rb', line 29 def collection_name self.class.collection_name end |
#collection_names ⇒ Object
116 117 118 |
# File 'lib/redis_object/collection.rb', line 116 def collection_names @collection_names ||= store.smembers(hkey_col) end |
#collections ⇒ Object
112 113 114 |
# File 'lib/redis_object/collection.rb', line 112 def collections @collections ||= {} end |
#delete_child(obj) ⇒ Object
23 24 25 26 27 |
# File 'lib/redis_object/collection.rb', line 23 def delete_child(obj) if col = get_collection(obj.collection_name) col.delete obj end end |
#dereference_from(obj) ⇒ Object
71 72 73 |
# File 'lib/redis_object/collection.rb', line 71 def dereference_from(obj) obj.get_collection(collection_name).delete(hkey) end |
#dereference_from_backreferences ⇒ Object
75 76 77 78 79 |
# File 'lib/redis_object/collection.rb', line 75 def dereference_from_backreferences backreferences.each do |backreference| dereference_from(backreference) end end |
#get(k) ⇒ Object
81 82 83 84 85 86 87 88 89 |
# File 'lib/redis_object/collection.rb', line 81 def get(k) if has_collection?(k) get_collection(k) elsif has_collection?(pk = k.to_s.pluralize) get_collection(pk).first else super(k) end end |
#get_collection(name) ⇒ Object
95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 |
# File 'lib/redis_object/collection.rb', line 95 def get_collection(name) if has_collection?(name) collections[name.to_s] ||= Collection.load(name,self) else store.sadd hkey_col, name @collection_names << name.to_s collections[name.to_s] ||= Collection.load(name,self) define_access(name.to_s.pluralize) do get_collection(name) end define_access(name.to_s.singularize) do get_collection(name).latest end end collections[name.to_s] end |
#has_collection?(name) ⇒ Boolean
91 92 93 |
# File 'lib/redis_object/collection.rb', line 91 def has_collection?(name) collection_names.include?(name.to_s) end |
#hkey_col(ident = nil) ⇒ Object
5 6 7 |
# File 'lib/redis_object/collection.rb', line 5 def hkey_col(ident = nil) "#{hkey}:collections" end |
#load(o_id) ⇒ Object
9 10 11 12 13 14 15 16 17 18 19 20 21 |
# File 'lib/redis_object/collection.rb', line 9 def load(o_id) super(o_id) store.smembers(hkey_col).each do |name| collections[name] = Seabright::Collection.load(name,self) define_access(name) do get_collection(name) end define_access(name.to_s.singularize) do get_collection(name).latest end end true end |
#mset(dat) ⇒ Object
120 121 122 123 |
# File 'lib/redis_object/collection.rb', line 120 def mset(dat) dat.select! {|k,v| !collections[k.to_s] } super(dat) end |
#push(obj) ⇒ Object
47 48 49 |
# File 'lib/redis_object/collection.rb', line 47 def push(obj) reference obj end |
#ref_key(ident = nil) ⇒ Object
33 34 35 |
# File 'lib/redis_object/collection.rb', line 33 def ref_key(ident = nil) "#{hkey}:backreferences" end |
#reference(obj) ⇒ Object
37 38 39 40 41 |
# File 'lib/redis_object/collection.rb', line 37 def reference(obj) raise "Not an object." unless obj.is_a?(RedisObject) get_collection(obj.collection_name) << obj.hkey obj.referenced_by self end |
#referenced_by(obj) ⇒ Object
55 56 57 |
# File 'lib/redis_object/collection.rb', line 55 def referenced_by(obj) store.sadd(ref_key,obj.hkey) end |
#remove_collection!(name) ⇒ Object
51 52 53 |
# File 'lib/redis_object/collection.rb', line 51 def remove_collection!(name) store.srem hkey_col, name end |
#set(k, v) ⇒ Object
125 126 127 128 |
# File 'lib/redis_object/collection.rb', line 125 def set(k,v) @data ? super(k,v) : has_collection?(k) ? get_collection(k.to_s).replace(v) : super(k,v) v end |