Class: RedisModel

Inherits:
Object
  • Object
show all
Includes:
ActiveModel::Callbacks, ActiveModel::Validations
Defined in:
lib/redis_model.rb

Direct Known Subclasses

User

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(attributes = {}) ⇒ RedisModel

Returns a new instance of RedisModel.



8
9
10
11
12
13
# File 'lib/redis_model.rb', line 8

def initialize(attributes = {})
  @attributes = attributes
  attributes.each do |key,val|
    send "#{key}=", val
  end
end

Class Method Details

.allObject



80
81
82
83
84
85
# File 'lib/redis_model.rb', line 80

def self.all
  redis.scan_each(match: "distribot.#{table}.by.id:*").map do |key|
    id = key.gsub(/^distribot\.#{table}\.by\.id\:/,'')
    find_by_id(id)
  end
end

.delete_allObject



95
96
97
# File 'lib/redis_model.rb', line 95

def self.delete_all
  self.all.map(&:delete)
end

.find(id) ⇒ Object



47
48
49
# File 'lib/redis_model.rb', line 47

def self.find(id)
  find_by_id(id)
end

.find_by(args = {}) ⇒ Object



68
69
70
# File 'lib/redis_model.rb', line 68

def self.find_by(args={})
  send("find_by_#{args.keys.first}", args.values.first)
end

.find_by_email(email) ⇒ Object



60
61
62
63
64
65
66
# File 'lib/redis_model.rb', line 60

def self.find_by_email(email)
  if id = redis.get("distribot.#{table}.by.email:#{email}")
    return self.find_by_id(id)
  else
    return nil
  end
end

.find_by_id(id) ⇒ Object



51
52
53
54
55
56
57
58
# File 'lib/redis_model.rb', line 51

def self.find_by_id(id)
  raw_json = redis.get("distribot.#{table}.by.id:#{id}")
  if raw_json
    self.new JSON.parse(raw_json).merge(id: id)
  else
    return nil
  end
end

.firstObject



19
20
21
# File 'lib/redis_model.rb', line 19

def self.first
  all.first
end

.tableObject



87
88
89
# File 'lib/redis_model.rb', line 87

def self.table
  self.class.to_s.downcase.pluralize
end

Instance Method Details

#deleteObject



72
73
74
75
76
77
78
# File 'lib/redis_model.rb', line 72

def delete
  # Delete the email->id and the id->data values:
  redis.multi do
    redis.del("distribot.#{table}.by.id:#{self.id}")
    redis.del("distribot.#{table}.by.email:#{self.email}")
  end
end

#read_attribute_for_validation(key) ⇒ Object



15
16
17
# File 'lib/redis_model.rb', line 15

def read_attribute_for_validation(key)
  @attributes[key]
end

#save(*args) ⇒ Object



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/redis_model.rb', line 27

def save(*args)
  unless self.valid?
    return false
  end

  if self.id
    run_callbacks :update do
      self.update
    end
  else
    run_callbacks :create do
      self.create
    end
  end
end

#save!Object



23
24
25
# File 'lib/redis_model.rb', line 23

def save!
  false unless self.save
end

#tableObject



91
92
93
# File 'lib/redis_model.rb', line 91

def table
  self.class.table
end

#updateObject

Raises:

  • (NotImplementedError)


43
44
45
# File 'lib/redis_model.rb', line 43

def update
  raise NotImplementedError.new
end