class RedisRecord::Base
Attributes
hash_of_properties[RW]
Public Class Methods
belongs_to(*elems)
click to toggle source
# File lib/redis_record/relation.rb, line 3 def self.belongs_to(*elems) elems.each do |elem| name= elem.to_s make_belongs_to_relation(name) end end
create(opts)
click to toggle source
TODO: returns entitiy or nil if failed
# File lib/redis_record/base.rb, line 72 def self.create(opts) @hash_of_properties= opts @hash_of_properties["Key"]= generate_key if (@hash_of_properties["Key"].nil? || @hash_of_properties["Key"].empty?) name= self.name key= @hash_of_properties["Key"] value= @hash_of_properties RedisRecord::Connection.connect unless RedisRecord::Connection.isConnected? result= RedisRecord::Connection.connection.hset(name,key,value.to_json) #TODO: type of result result end
find(key)
click to toggle source
# File lib/redis_record/base.rb, line 11 def self.find(key) name= self.name RedisRecord::Connection.connect unless RedisRecord::Connection.isConnected? result= RedisRecord::Connection.connection.hget(name,key) if result model = self.new model.hash_of_properties= JSON.parse(result) else return nil end model end
find_all(*args)
click to toggle source
# File lib/redis_record/base.rb, line 24 def self.find_all(*args) models = Array.new name= self.name RedisRecord::Connection.connect unless RedisRecord::Connection.isConnected? results= RedisRecord::Connection.connection.hgetall(name) if results results.each do |result| model = self.new begin model.hash_of_properties= JSON.parse(result[1]) models << model rescue JSON::ParserError end end else return nil end if args.size > 0 models = redis_sort(models,args.first[:sort]) if args.first[:sort] end models end
generate_key()
click to toggle source
# File lib/redis_record/base.rb, line 143 def self.generate_key name= self.name key= (rand(899999999999)+100000000000).to_s if self.find(key) self.generate_key else key end end
has_many(*elems)
click to toggle source
# File lib/redis_record/relation.rb, line 18 def self.has_many(*elems) elems.each do |elem| name= elem.to_s make_has_many_relation(name) end end
has_one(*elems)
click to toggle source
# File lib/redis_record/relation.rb, line 33 def self.has_one(*elems) elems.each do |elem| name= elem.to_s make_has_one_relation(name) end end
make_accessor(name)
click to toggle source
# File lib/redis_record/base.rb, line 104 def self.make_accessor(name) class_eval <<-EOD def #{name}=(value) @hash_of_properties['#{name}']=value end def #{name} @hash_of_properties['#{name}'] end EOD end
make_all_selectors(name)
click to toggle source
# File lib/redis_record/base.rb, line 127 def self.make_all_selectors(name) class_eval <<-EOD def self.find_all_by_#{name}(value,*args) models= Array.new results= self.find_all results.each do |result| models << result if result.#{name}==value end if args.size > 0 models = redis_sort(models,args.first[:sort]) if args.first[:sort] end models end EOD end
make_belongs_to_relation(name)
click to toggle source
# File lib/redis_record/relation.rb, line 10 def self.make_belongs_to_relation(name) class_eval <<-EOD def #{name} #{name}.find(self.#{name}Key) end EOD end
make_has_many_relation(name)
click to toggle source
# File lib/redis_record/relation.rb, line 25 def self.make_has_many_relation(name) class_eval <<-EOD def #{name} #{name}.find_all_by_#{self.name}Key(self.Key.to_s) end EOD end
make_has_one_relation(name)
click to toggle source
# File lib/redis_record/relation.rb, line 40 def self.make_has_one_relation(name) class_eval <<-EOD def #{name} #{name}.find_by_#{self.name}Key(self.Key.to_s) end EOD end
make_single_selectors(name)
click to toggle source
# File lib/redis_record/base.rb, line 115 def self.make_single_selectors(name) class_eval <<-EOD def self.find_by_#{name}(value) results= self.find_all results.each do |result| return result if result.#{name}==value end return nil end EOD end
new()
click to toggle source
# File lib/redis_record/base.rb, line 7 def initialize @hash_of_properties= Hash.new end
properties(*elems)
click to toggle source
# File lib/redis_record/base.rb, line 95 def self.properties(*elems) elems.each do |elem| name= elem.to_s make_accessor(name) make_single_selectors(name) make_all_selectors(name) end end
redis_sort(elements,order)
click to toggle source
# File lib/redis_record/base.rb, line 47 def self.redis_sort(elements,order) attribute= order.split(" ").first direction= order.split(" ").last result = Array.new if direction=="dsc" result= elements.sort {|a,b| b.send(attribute) <=> a.send(attribute)} else result= elements.sort {|a,b| a.send(attribute) <=> b.send(attribute)} end result end
Public Instance Methods
[](key)
click to toggle source
# File lib/redis_record/base.rb, line 153 def [](key) @hash_of_properties[key] end
[]=(key,value)
click to toggle source
# File lib/redis_record/base.rb, line 157 def []=(key,value) @hash_of_properties[key]=value end
delete()
click to toggle source
# File lib/redis_record/base.rb, line 87 def delete name= self.class key= @hash_of_properties["Key"] RedisRecord::Connection.connect unless RedisRecord::Connection.isConnected? result= RedisRecord::Connection.connection.hdel(name,key) result end
update(attributes)
click to toggle source
# File lib/redis_record/base.rb, line 59 def update(attributes) @hash_of_properties.merge!(attributes) name= self.class key= @hash_of_properties["Key"] value= @hash_of_properties RedisRecord::Connection.connect unless RedisRecord::Connection.isConnected? result= RedisRecord::Connection.connection.hset(name,key,value.to_json) !result end