Sha256: d0013054678b59e72984a10059919161805d255bcafb9d777f3c03d2236fa530

Contents?: true

Size: 876 Bytes

Versions: 3

Compression:

Stored size: 876 Bytes

Contents

module Terrestrial
  class Dataset
    include Enumerable

    def initialize(records)
      @records = records
    end

    attr_reader :records
    private     :records

    def each(&block)
      records.each(&block)
      self
    end

    def where(criteria)
      new(
        records.find_all { |row|
          criteria.all? { |k, v|
            if v.respond_to?(:include?)
              test_inclusion_in_value(row, k, v)
            else
              test_equality(row, k, v)
            end
          }
        }
      )
    end

    def select(field)
      map { |data| data.fetch(field) }
    end

    private

    def new(records)
      self.class.new(records)
    end

    def test_inclusion_in_value(row, field, values)
      values.include?(row.fetch(field))
    end

    def test_equality(row, field, value)
      value == row.fetch(field)
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
terrestrial-0.5.0 lib/terrestrial/dataset.rb
terrestrial-0.3.0 lib/terrestrial/dataset.rb
terrestrial-0.1.1 lib/terrestrial/dataset.rb