Sha256: 25372db851c44c352baa539a5a313f2946613473ee6a1d590180a2c07be79933
Contents?: true
Size: 1.49 KB
Versions: 1
Compression:
Stored size: 1.49 KB
Contents
module ROM class Adapter class Memory < Adapter class Dataset include Charlatan.new(:data) attr_reader :header def initialize(data, header) super @header = header end def to_ary data.dup end alias_method :to_a, :to_ary def each(&block) return to_enum unless block data.each(&block) end def join(*args) left, right = args.size > 1 ? args : [self, args.first] join_map = left.to_a.each_with_object({}) { |tuple, h| others = right.to_a.find_all { |t| (tuple.to_a & t.to_a).any? } (h[tuple] ||= []).concat(others) } tuples = left.map { |tuple| join_map[tuple].map { |other| tuple.merge(other) } }.flatten self.class.new(tuples, left.header + right.header) end def restrict(criteria = nil) if criteria find_all { |tuple| criteria.all? { |k, v| tuple[k].eql?(v) } } else find_all { |tuple| yield(tuple) } end end def project(*names) map { |tuple| tuple.reject { |key| !names.include?(key) } } end def order(*names) sort_by { |tuple| tuple.values_at(*names) } end def insert(tuple) data << tuple self end def delete(tuple) data.delete(tuple) self end end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
rom-0.5.0 | lib/rom/adapter/memory/dataset.rb |