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