Sha256: 504868ca480c743340101f740272f1618e412b751c3fde17bd06e6bd5f04462b
Contents?: true
Size: 1.46 KB
Versions: 2
Compression:
Stored size: 1.46 KB
Contents
class MemoryModel::Collection class InvalidTypeError < StandardError; end class << self attr_accessor :all end self.all = [] def initialize(model=Class.new) @model = model @records = [] self.class.all << self end def all unique.reject(&:deleted?) end def deleted unique.select(&:deleted?) end def find(id, options={ }) version = options[:version] || 0 return_deleted = !!options[:deleted] record = sorted.select { |r| r.id == id }[version] return nil unless record if !record.deleted? || (return_deleted && record.deleted?) record else raise MemoryModel::RecordNotFoundError end end def insert(record) raise InvalidTypeError unless record.is_a? @model record = record.dup record.freeze unless record.frozen? @records << record self end alias :<< :insert def inspect self.all.inspect end def records(dup = true) if dup @records.map do |record| record.deleted? ? record : record.dup end else @records end end private def method_missing(m, *args, &block) all.respond_to?(m) ? all.send(m, *args, &block) : super end def respond_to_missing?(m, include_private=false) all.respond_to?(m, include_private) end def sorted(records=self.records) records.sort { |b, a| a.timestamp <=> b.timestamp } end def unique(records=self.records) sorted(records).uniq(&:id) end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
memory_model-0.0.2 | lib/memory_model/collection.rb |
memory_model-0.0.1 | lib/memory_model/collection.rb |