Module: Seabright::ObjectBase::ClassMethods

Defined in:
lib/redis_object/base.rb

Instance Method Summary collapse

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_filtersObject



234
235
236
# File 'lib/redis_object/base.rb', line 234

def action_filters
	@@action_filters ||= {}
end

#allObject



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

#cnameObject



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

#dbnumObject



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

#describeObject



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

#eachObject



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

Returns:

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

#firstObject



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_idObject



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_filtersObject



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_filtersObject



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

#plnameObject



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_allObject



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_filtersObject



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