Class: RedisModel
- Inherits:
-
Object
- Object
- RedisModel
- Includes:
- ActiveModel::Callbacks, ActiveModel::Validations
- Defined in:
- lib/redis_model.rb
Direct Known Subclasses
Class Method Summary collapse
- .all ⇒ Object
- .delete_all ⇒ Object
- .find(id) ⇒ Object
- .find_by(args = {}) ⇒ Object
- .find_by_email(email) ⇒ Object
- .find_by_id(id) ⇒ Object
- .first ⇒ Object
- .table ⇒ Object
Instance Method Summary collapse
- #delete ⇒ Object
-
#initialize(attributes = {}) ⇒ RedisModel
constructor
A new instance of RedisModel.
- #read_attribute_for_validation(key) ⇒ Object
- #save(*args) ⇒ Object
- #save! ⇒ Object
- #table ⇒ Object
- #update ⇒ Object
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
.all ⇒ Object
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_all ⇒ Object
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 |
.first ⇒ Object
19 20 21 |
# File 'lib/redis_model.rb', line 19 def self.first all.first end |
.table ⇒ Object
87 88 89 |
# File 'lib/redis_model.rb', line 87 def self.table self.class.to_s.downcase.pluralize end |
Instance Method Details
#delete ⇒ Object
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 |
#table ⇒ Object
91 92 93 |
# File 'lib/redis_model.rb', line 91 def table self.class.table end |
#update ⇒ Object
43 44 45 |
# File 'lib/redis_model.rb', line 43 def update raise NotImplementedError.new end |