Module: Seabright::ObjectBase::ClassMethods
- Defined in:
- lib/redis_object/base.rb
Constant Summary collapse
- NilPattern =
'nilpattern:'
Instance Method Summary collapse
- #_new_id_sym(cls = self.name) ⇒ Object
- #_old_id_sym(cls = self.name) ⇒ Object
- #all ⇒ Object
- #cname ⇒ Object
- #convert_old_id_syms! ⇒ Object
- #convert_regex_to_lua(reg) ⇒ Object
- #create(ident = {}) ⇒ Object
- #dbnum ⇒ Object
- #deep_const_get(const, base = nil) ⇒ Object
- #describe ⇒ Object
- #each ⇒ Object
- #exists?(k) ⇒ Boolean
- #find(ident) ⇒ Object
- #find_by_key(k) ⇒ Object
- #first ⇒ Object
- #generate_id ⇒ Object
- #grab(ident) ⇒ Object
- #id_sym(cls = nil) ⇒ Object
- #inject_key(key, list) ⇒ Object
- #match(pkt, use_or = false) ⇒ Object
- #new_id(complexity = 8) ⇒ Object
- #or_find(ident) ⇒ Object
- #or_grab(ident) ⇒ Object
- #plname ⇒ Object
- #recollect! ⇒ Object
- #reserve(k) ⇒ Object
- #save_all ⇒ Object
-
#use_dbnum(db = 0) ⇒ Object
def dump out = [] each do |obj| out << obj.dump end out.join(“n”) end.
Instance Method Details
#_new_id_sym(cls = self.name) ⇒ Object
560 561 562 |
# File 'lib/redis_object/base.rb', line 560 def _new_id_sym(cls=self.name) (cls || self.name).foreign_key.to_sym end |
#_old_id_sym(cls = self.name) ⇒ Object
575 576 577 |
# File 'lib/redis_object/base.rb', line 575 def _old_id_sym(cls=self.name) "#{(cls || self.name).split('::').last.downcase}_id".to_sym end |
#all ⇒ Object
247 248 249 250 251 252 253 254 255 256 257 258 259 |
# File 'lib/redis_object/base.rb', line 247 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 |
#cname ⇒ Object
239 240 241 |
# File 'lib/redis_object/base.rb', line 239 def cname name end |
#convert_old_id_syms! ⇒ Object
564 565 566 567 568 569 570 571 572 573 |
# File 'lib/redis_object/base.rb', line 564 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 |
#convert_regex_to_lua(reg) ⇒ Object
476 477 478 |
# File 'lib/redis_object/base.rb', line 476 def convert_regex_to_lua(reg) "#{reg.casefold? ? "i" : ""}pattern:#{reg.source.gsub("\\","")}" end |
#create(ident = {}) ⇒ Object
510 511 512 513 514 |
# File 'lib/redis_object/base.rb', line 510 def create(ident={}) obj = new(ident) obj.save obj end |
#dbnum ⇒ Object
528 529 530 |
# File 'lib/redis_object/base.rb', line 528 def dbnum @dbnum ||= 0 end |
#deep_const_get(const, base = nil) ⇒ Object
539 540 541 542 543 544 545 546 547 |
# File 'lib/redis_object/base.rb', line 539 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
579 580 581 582 583 584 585 |
# File 'lib/redis_object/base.rb', line 579 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
275 276 277 278 279 |
# File 'lib/redis_object/base.rb', line 275 def each all.each do |o| yield o end end |
#exists?(k) ⇒ Boolean
506 507 508 |
# File 'lib/redis_object/base.rb', line 506 def exists?(k) store.exists(self.hkey(k)) || store.exists(self.reserve_key(k)) end |
#find(ident) ⇒ Object
498 499 500 |
# File 'lib/redis_object/base.rb', line 498 def find(ident) grab(ident) end |
#find_by_key(k) ⇒ Object
532 533 534 535 536 537 |
# File 'lib/redis_object/base.rb', line 532 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
267 268 269 270 271 272 273 |
# File 'lib/redis_object/base.rb', line 267 def first if m = store.smembers(plname) self.grab(m.first) else nil end end |
#generate_id ⇒ Object
220 221 222 223 224 225 226 227 228 229 |
# File 'lib/redis_object/base.rb', line 220 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 |
#grab(ident) ⇒ Object
480 481 482 483 484 485 486 487 488 |
# File 'lib/redis_object/base.rb', line 480 def grab(ident) case ident when String, Symbol return store.exists(self.hkey(ident.to_s)) ? self.new(ident.to_s) : nil when Hash return match(ident) end nil end |
#id_sym(cls = nil) ⇒ Object
556 557 558 |
# File 'lib/redis_object/base.rb', line 556 def id_sym(cls=nil) _old_id_sym(cls) end |
#inject_key(key, list) ⇒ Object
463 464 465 466 467 468 469 470 471 472 473 474 |
# File 'lib/redis_object/base.rb', line 463 def inject_key(key,list) out = [] list.each do |i| if i == list.first out << i else out << key out << i end end out end |
#match(pkt, use_or = false) ⇒ Object
434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 |
# File 'lib/redis_object/base.rb', line 434 def match(pkt, use_or=false) if use_or mtchr = :OrMatcher else mtchr = pkt.keys.count > 1 ? :MultiMatcher : :Matcher end pkt = pkt.flatten.reduce([]) do |i,v| x = case v when Regexp convert_regex_to_lua(v) when Array raise ArgumentError.new("An array can only be used with the find_or method") unless use_or inject_key(i.last, v) when NilClass NilPattern else v.to_s end i << x i end kys = run_script(mtchr,[plname],pkt.flatten) ListEnumerator.new(kys) do |y| kys.each do |k| y << find(k) end end end |
#new_id(complexity = 8) ⇒ Object
235 236 237 |
# File 'lib/redis_object/base.rb', line 235 def new_id(complexity = 8) rand(36**complexity).to_s(36) end |
#or_find(ident) ⇒ Object
502 503 504 |
# File 'lib/redis_object/base.rb', line 502 def or_find(ident) or_grab(ident) end |
#or_grab(ident) ⇒ Object
490 491 492 493 494 495 496 |
# File 'lib/redis_object/base.rb', line 490 def or_grab(ident) case ident when Hash return match(ident, true) end nil end |
#plname ⇒ Object
243 244 245 |
# File 'lib/redis_object/base.rb', line 243 def plname cname.pluralize end |
#recollect! ⇒ Object
261 262 263 264 265 |
# File 'lib/redis_object/base.rb', line 261 def recollect! store.keys("#{name}:*_h").each do |ky| store.sadd(plname,ky.gsub(/_h$/,'')) end end |
#reserve(k) ⇒ Object
231 232 233 |
# File 'lib/redis_object/base.rb', line 231 def reserve(k) store.set(reserve_key(k),Time.now.to_s) end |
#save_all ⇒ Object
549 550 551 552 553 554 |
# File 'lib/redis_object/base.rb', line 549 def save_all all.each do |obj| obj.save end true end |
#use_dbnum(db = 0) ⇒ Object
def dump out = [] each do |obj| out << obj.dump end out.join(“n”) end
524 525 526 |
# File 'lib/redis_object/base.rb', line 524 def use_dbnum(db=0) @dbnum = db end |