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



330
331
332
# File 'lib/redis_object/base.rb', line 330

def _new_id_sym(cls=self.name)
	(cls || self.name).foreign_key.to_sym
end

#_old_id_sym(cls = self.name) ⇒ Object



345
346
347
# File 'lib/redis_object/base.rb', line 345

def _old_id_sym(cls=self.name)
	"#{(cls || self.name).split('::').last.downcase}_id".to_sym
end

#allObject



250
251
252
253
254
255
256
257
258
259
260
261
262
# File 'lib/redis_object/base.rb', line 250

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



219
220
221
# File 'lib/redis_object/base.rb', line 219

def clean_id(i)
	i.to_s.gsub(/.*:/,'').gsub(/_h$/,'')
end

#cnameObject



242
243
244
# File 'lib/redis_object/base.rb', line 242

def cname
	name
end

#convert_old_id_syms!Object



334
335
336
337
338
339
340
341
342
343
# File 'lib/redis_object/base.rb', line 334

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



288
289
290
291
292
# File 'lib/redis_object/base.rb', line 288

def create(ident={})
	obj = new(ident)
	obj.save
	obj
end

#dbnumObject



298
299
300
# File 'lib/redis_object/base.rb', line 298

def dbnum
	@dbnum ||= 0
end

#deep_const_get(const, base = nil) ⇒ Object



309
310
311
312
313
314
315
316
317
# File 'lib/redis_object/base.rb', line 309

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



349
350
351
352
353
354
355
# File 'lib/redis_object/base.rb', line 349

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



278
279
280
281
282
# File 'lib/redis_object/base.rb', line 278

def each
	all.each do |o|
		yield o
	end
end

#exists?(k) ⇒ Boolean

Returns:

  • (Boolean)


284
285
286
# File 'lib/redis_object/base.rb', line 284

def exists?(k)
	store.exists(self.hkey(k)) || store.exists(self.reserve_key(k))
end

#find_by_key(k) ⇒ Object



302
303
304
305
306
307
# File 'lib/redis_object/base.rb', line 302

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



270
271
272
273
274
275
276
# File 'lib/redis_object/base.rb', line 270

def first
	if m = store.smembers(plname)
	 self.grab(m.first)
	else
		nil
	end
end

#generate_idObject



223
224
225
226
227
228
229
230
231
232
# File 'lib/redis_object/base.rb', line 223

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

#id_sym(cls = nil) ⇒ Object



326
327
328
# File 'lib/redis_object/base.rb', line 326

def id_sym(cls=nil)
	_old_id_sym(cls)
end

#new_id(complexity = 8) ⇒ Object



238
239
240
# File 'lib/redis_object/base.rb', line 238

def new_id(complexity = 8)
	rand(36**complexity).to_s(36)
end

#plnameObject



246
247
248
# File 'lib/redis_object/base.rb', line 246

def plname
	cname.pluralize
end

#recollect!Object



264
265
266
267
268
# File 'lib/redis_object/base.rb', line 264

def recollect!
	store.keys("#{name}:*_h").each do |ky|
		store.sadd(plname, clean_id(ky))
	end
end

#reserve(k) ⇒ Object



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

def reserve(k)
	store.set(reserve_key(k),Time.now.to_s)
end

#save_allObject



319
320
321
322
323
324
# File 'lib/redis_object/base.rb', line 319

def save_all
	all.each do |obj|
		obj.save
	end
	true
end

#use_dbnum(db = 0) ⇒ Object



294
295
296
# File 'lib/redis_object/base.rb', line 294

def use_dbnum(db=0)
	@dbnum = db
end