Module: Seabright::ObjectBase::ClassMethods
- Defined in:
- lib/redis_object/base.rb
Instance Method Summary collapse
- #_new_id_sym(cls = self.name) ⇒ Object
- #_old_id_sym(cls = self.name) ⇒ Object
- #all ⇒ Object
- #clean_id(i) ⇒ Object
- #cname ⇒ Object
- #convert_old_id_syms! ⇒ Object
- #create(ident = {}) ⇒ Object
- #dbnum ⇒ Object
- #deep_const_get(const, base = nil) ⇒ Object
- #describe ⇒ Object
- #each ⇒ Object
- #exists?(k) ⇒ Boolean
- #find_by_key(k) ⇒ Object
- #first ⇒ Object
- #generate_id ⇒ Object
- #id_sym(cls = nil) ⇒ Object
- #new_id(complexity = 8) ⇒ Object
- #plname ⇒ Object
- #recollect! ⇒ Object
- #reserve(k) ⇒ Object
- #save_all ⇒ Object
- #use_dbnum(db = 0) ⇒ Object
Instance Method Details
#_new_id_sym(cls = self.name) ⇒ Object
330 331 332 |
# File 'lib/redis_object/base.rb', line 330 def _new_id_sym(cls=self.name) (cls || self.name).foreign_key.to_sym end |
#_old_id_sym(cls = self.name) ⇒ Object
345 346 347 |
# File 'lib/redis_object/base.rb', line 345 def _old_id_sym(cls=self.name) "#{(cls || self.name).split('::').last.downcase}_id".to_sym end |
#all ⇒ Object
250 251 252 253 254 255 256 257 258 259 260 261 262 |
# File 'lib/redis_object/base.rb', line 250 def all kys = store.smembers(plname) ListEnumerator.new(kys) do |y| kys.each do |member| if a = find_by_key(hkey(member)) y << a else Log.debug "[#{name}] Object listed but not found: #{member}" store.srem(plname,member) end end end end |
#clean_id(i) ⇒ Object
219 220 221 |
# File 'lib/redis_object/base.rb', line 219 def clean_id(i) i.to_s.gsub(/.*:/,'').gsub(/_h$/,'') end |
#cname ⇒ Object
242 243 244 |
# File 'lib/redis_object/base.rb', line 242 def cname name end |
#convert_old_id_syms! ⇒ Object
334 335 336 337 338 339 340 341 342 343 |
# File 'lib/redis_object/base.rb', line 334 def convert_old_id_syms! ol = _old_id_sym nw = id_sym each do |obj| if obj.is_set?(ol) obj.set(nw,get(ol)) obj.unset(ol) end end end |
#create(ident = {}) ⇒ Object
288 289 290 291 292 |
# File 'lib/redis_object/base.rb', line 288 def create(ident={}) obj = new(ident) obj.save obj end |
#dbnum ⇒ Object
298 299 300 |
# File 'lib/redis_object/base.rb', line 298 def dbnum @dbnum ||= 0 end |
#deep_const_get(const, base = nil) ⇒ Object
309 310 311 312 313 314 315 316 317 |
# File 'lib/redis_object/base.rb', line 309 def deep_const_get(const,base=nil) if Symbol === const const = const.to_s else const = const.to_str.dup end base ||= const.sub!(/^::/, '') ? Object : self const.split(/::/).inject(base) { |mod, name| mod.const_get(name) } end |
#describe ⇒ Object
349 350 351 352 353 354 355 |
# File 'lib/redis_object/base.rb', line 349 def describe all_keys.inject({}) do |acc,(k,v)| acc[k.to_sym] ||= [:string, 0] acc[k.to_sym][1] += 1 acc end end |
#each ⇒ Object
278 279 280 281 282 |
# File 'lib/redis_object/base.rb', line 278 def each all.each do |o| yield o end end |
#exists?(k) ⇒ Boolean
284 285 286 |
# File 'lib/redis_object/base.rb', line 284 def exists?(k) store.exists(self.hkey(k)) || store.exists(self.reserve_key(k)) end |
#find_by_key(k) ⇒ Object
302 303 304 305 306 307 |
# File 'lib/redis_object/base.rb', line 302 def find_by_key(k) if store.exists(k) && (cls = store.hget(k,:class)) return deep_const_get(cls.to_sym,Object).new(store.hget(k,id_sym(cls))) end nil end |
#first ⇒ Object
270 271 272 273 274 275 276 |
# File 'lib/redis_object/base.rb', line 270 def first if m = store.smembers(plname) self.grab(m.first) else nil end end |
#generate_id ⇒ Object
223 224 225 226 227 228 229 230 231 232 |
# File 'lib/redis_object/base.rb', line 223 def generate_id v = new_id while exists?(v) do Log.verbose "[RedisObject] Collision at id: #{v}" v = new_id end Log.verbose "[RedisObject] Reserving key: #{v}" reserve(v) v end |
#id_sym(cls = nil) ⇒ Object
326 327 328 |
# File 'lib/redis_object/base.rb', line 326 def id_sym(cls=nil) _old_id_sym(cls) end |
#new_id(complexity = 8) ⇒ Object
238 239 240 |
# File 'lib/redis_object/base.rb', line 238 def new_id(complexity = 8) rand(36**complexity).to_s(36) end |
#plname ⇒ Object
246 247 248 |
# File 'lib/redis_object/base.rb', line 246 def plname cname.pluralize end |
#recollect! ⇒ Object
264 265 266 267 268 |
# File 'lib/redis_object/base.rb', line 264 def recollect! store.keys("#{name}:*_h").each do |ky| store.sadd(plname, clean_id(ky)) end end |
#reserve(k) ⇒ Object
234 235 236 |
# File 'lib/redis_object/base.rb', line 234 def reserve(k) store.set(reserve_key(k),Time.now.to_s) end |
#save_all ⇒ Object
319 320 321 322 323 324 |
# File 'lib/redis_object/base.rb', line 319 def save_all all.each do |obj| obj.save end true end |
#use_dbnum(db = 0) ⇒ Object
294 295 296 |
# File 'lib/redis_object/base.rb', line 294 def use_dbnum(db=0) @dbnum = db end |