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
- #match(pkt) ⇒ Object
- #new_id(complexity = 8) ⇒ 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
449 450 451 |
# File 'lib/redis_object/base.rb', line 449 def _new_id_sym(cls=self.name) (cls || self.name).foreign_key.to_sym end |
#_old_id_sym(cls = self.name) ⇒ Object
464 465 466 |
# File 'lib/redis_object/base.rb', line 464 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
453 454 455 456 457 458 459 460 461 462 |
# File 'lib/redis_object/base.rb', line 453 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
377 378 379 |
# File 'lib/redis_object/base.rb', line 377 def convert_regex_to_lua(reg) "pattern:#{reg.source.gsub("\\","")}" end |
#create(ident = {}) ⇒ Object
399 400 401 402 403 |
# File 'lib/redis_object/base.rb', line 399 def create(ident={}) obj = new(ident) obj.save obj end |
#dbnum ⇒ Object
417 418 419 |
# File 'lib/redis_object/base.rb', line 417 def dbnum @dbnum ||= 0 end |
#deep_const_get(const, base = nil) ⇒ Object
428 429 430 431 432 433 434 435 436 |
# File 'lib/redis_object/base.rb', line 428 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
468 469 470 471 472 473 474 |
# File 'lib/redis_object/base.rb', line 468 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
395 396 397 |
# File 'lib/redis_object/base.rb', line 395 def exists?(k) store.exists(self.hkey(k)) || store.exists(self.reserve_key(k)) end |
#find(ident) ⇒ Object
391 392 393 |
# File 'lib/redis_object/base.rb', line 391 def find(ident) grab(ident) end |
#find_by_key(k) ⇒ Object
421 422 423 424 425 426 |
# File 'lib/redis_object/base.rb', line 421 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
381 382 383 384 385 386 387 388 389 |
# File 'lib/redis_object/base.rb', line 381 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
445 446 447 |
# File 'lib/redis_object/base.rb', line 445 def id_sym(cls=nil) _old_id_sym(cls) end |
#match(pkt) ⇒ Object
357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 |
# File 'lib/redis_object/base.rb', line 357 def match(pkt) mtchr = pkt.keys.count > 1 ? :MultiMatcher : :Matcher pkt = pkt.flatten.map do |i| case i when Regexp convert_regex_to_lua(i) when NilClass NilPattern else i.to_s end end kys = run_script(mtchr,[plname],pkt) 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 |
#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
438 439 440 441 442 443 |
# File 'lib/redis_object/base.rb', line 438 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
413 414 415 |
# File 'lib/redis_object/base.rb', line 413 def use_dbnum(db=0) @dbnum = db end |