Sha256: a9b5e01d0ec106e909e7164ef52756918dd25e67f94be0693ab772d4e44c1bd9
Contents?: true
Size: 1.03 KB
Versions: 2
Compression:
Stored size: 1.03 KB
Contents
module Modis module Finders def self.included(base) base.extend ClassMethods end module ClassMethods def find(id) record = attributes_for(id) model_class(record).new(record, new_record: false) end def all ids = Modis.redis.smembers(key_for(:all)) records = Modis.redis.pipelined do ids.map { |id| Modis.redis.hgetall(key_for(id)) } end records.map do |record| klass = model_class(record) klass.new(record, new_record: false) end end def attributes_for(id) if id.nil? raise RecordNotFound, "Couldn't find #{name} without an ID" end values = Modis.redis.hgetall(key_for(id)) unless values['id'].present? raise RecordNotFound, "Couldn't find #{name} with id=#{id}" end values end private def model_class(record) return self if record["type"].blank? return record["type"].constantize end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
modis-1.0.0 | lib/modis/finders.rb |
modis-0.0.1 | lib/modis/finders.rb |