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
- #action_filters ⇒ 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
- #filter_gets(&block) ⇒ Object
- #filter_msets(&block) ⇒ Object
- #filter_sets(&block) ⇒ Object
- #find_by_key(k) ⇒ Object
- #first ⇒ Object
- #generate_id ⇒ Object
- #get_filters ⇒ Object
- #id_sym(cls = nil) ⇒ Object
- #mset_filters ⇒ Object
- #new_id(complexity = 8) ⇒ Object
- #plname ⇒ Object
- #recollect! ⇒ Object
- #reserve(k) ⇒ Object
- #save_all ⇒ Object
- #set_filters ⇒ Object
- #use_dbnum(db = 0) ⇒ Object
Instance Method Details
#_new_id_sym(cls = self.name) ⇒ Object
373 374 375 |
# File 'lib/redis_object/base.rb', line 373 def _new_id_sym(cls=self.name) (cls || self.name).foreign_key.to_sym end |
#_old_id_sym(cls = self.name) ⇒ Object
388 389 390 |
# File 'lib/redis_object/base.rb', line 388 def _old_id_sym(cls=self.name) "#{(cls || self.name).split('::').last.downcase}_id".to_sym end |
#action_filters ⇒ Object
234 235 236 |
# File 'lib/redis_object/base.rb', line 234 def action_filters @@action_filters ||= {} end |
#all ⇒ Object
293 294 295 296 297 298 299 300 301 302 303 304 305 |
# File 'lib/redis_object/base.rb', line 293 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
262 263 264 |
# File 'lib/redis_object/base.rb', line 262 def clean_id(i) i.to_s.gsub(/.*:/,'').gsub(/_h$/,'') end |
#cname ⇒ Object
285 286 287 |
# File 'lib/redis_object/base.rb', line 285 def cname name end |
#convert_old_id_syms! ⇒ Object
377 378 379 380 381 382 383 384 385 386 |
# File 'lib/redis_object/base.rb', line 377 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
331 332 333 334 335 |
# File 'lib/redis_object/base.rb', line 331 def create(ident={}) obj = new(ident) obj.save obj end |
#dbnum ⇒ Object
341 342 343 |
# File 'lib/redis_object/base.rb', line 341 def dbnum @dbnum ||= 0 end |
#deep_const_get(const, base = nil) ⇒ Object
352 353 354 355 356 357 358 359 360 |
# File 'lib/redis_object/base.rb', line 352 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
392 393 394 395 396 397 398 |
# File 'lib/redis_object/base.rb', line 392 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
321 322 323 324 325 |
# File 'lib/redis_object/base.rb', line 321 def each all.each do |o| yield o end end |
#exists?(k) ⇒ Boolean
327 328 329 |
# File 'lib/redis_object/base.rb', line 327 def exists?(k) store.exists(self.hkey(k)) || store.exists(self.reserve_key(k)) end |
#filter_gets(&block) ⇒ Object
258 259 260 |
# File 'lib/redis_object/base.rb', line 258 def filter_gets(&block) get_filters << block end |
#filter_msets(&block) ⇒ Object
250 251 252 |
# File 'lib/redis_object/base.rb', line 250 def filter_msets(&block) mset_filters << block end |
#filter_sets(&block) ⇒ Object
242 243 244 |
# File 'lib/redis_object/base.rb', line 242 def filter_sets(&block) set_filters << block end |
#find_by_key(k) ⇒ Object
345 346 347 348 349 350 |
# File 'lib/redis_object/base.rb', line 345 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
313 314 315 316 317 318 319 |
# File 'lib/redis_object/base.rb', line 313 def first if m = store.smembers(plname) self.grab(m.first) else nil end end |
#generate_id ⇒ Object
266 267 268 269 270 271 272 273 274 275 |
# File 'lib/redis_object/base.rb', line 266 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 |
#get_filters ⇒ Object
254 255 256 |
# File 'lib/redis_object/base.rb', line 254 def get_filters action_filters[:get] ||= [] end |
#id_sym(cls = nil) ⇒ Object
369 370 371 |
# File 'lib/redis_object/base.rb', line 369 def id_sym(cls=nil) _old_id_sym(cls) end |
#mset_filters ⇒ Object
246 247 248 |
# File 'lib/redis_object/base.rb', line 246 def mset_filters action_filters[:mset] ||= [] end |
#new_id(complexity = 8) ⇒ Object
281 282 283 |
# File 'lib/redis_object/base.rb', line 281 def new_id(complexity = 8) rand(36**complexity).to_s(36) end |
#plname ⇒ Object
289 290 291 |
# File 'lib/redis_object/base.rb', line 289 def plname cname.pluralize end |
#recollect! ⇒ Object
307 308 309 310 311 |
# File 'lib/redis_object/base.rb', line 307 def recollect! store.keys("#{name}:*_h").each do |ky| store.sadd(plname, clean_id(ky)) end end |
#reserve(k) ⇒ Object
277 278 279 |
# File 'lib/redis_object/base.rb', line 277 def reserve(k) store.set(reserve_key(k),Time.now.to_s) end |
#save_all ⇒ Object
362 363 364 365 366 367 |
# File 'lib/redis_object/base.rb', line 362 def save_all all.each do |obj| obj.save end true end |
#set_filters ⇒ Object
238 239 240 |
# File 'lib/redis_object/base.rb', line 238 def set_filters action_filters[:set] ||= [] end |
#use_dbnum(db = 0) ⇒ Object
337 338 339 |
# File 'lib/redis_object/base.rb', line 337 def use_dbnum(db=0) @dbnum = db end |