Module: Seabright::ObjectBase::ClassMethods

Defined in:
lib/redis_object/base.rb

Constant Summary collapse

NilPattern =
'nilpattern:'

Instance Method Summary collapse

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

#allObject



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

#cnameObject



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

#dbnumObject



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

#describeObject



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

#eachObject



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

Returns:

  • (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

#firstObject



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_idObject



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

#plnameObject



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_allObject



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