lib/datasets/table.rb in red-datasets-0.0.4 vs lib/datasets/table.rb in red-datasets-0.0.5
- old
+ new
@@ -1,18 +1,59 @@
module Datasets
class Table
+ include Enumerable
+
def initialize(dataset)
@dataset = dataset
end
+ def each(&block)
+ columner_data.each(&block)
+ end
+
+ def [](name)
+ columner_data[name.to_sym]
+ end
+
+ def fetch_values(*keys)
+ data = columner_data
+ keys.collect do |key|
+ if data.key?(key)
+ data[key]
+ else
+ raise build_key_error(key) unless block_given?
+ yield(key)
+ end
+ end
+ end
+
def to_h
columns = {}
@dataset.each do |record|
record.to_h.each do |name, value|
values = (columns[name] ||= [])
values << value
end
end
columns
+ end
+
+ private
+ begin
+ KeyError.new("message", receiver: self, key: :key)
+ rescue ArgumentError
+ def build_key_error(key)
+ KeyError.new("key not found: #{key.inspect}")
+ end
+ else
+ def build_key_error(key)
+ KeyError.new("key not found: #{key.inspect}",
+ receiver: self,
+ key: key)
+ end
+ end
+
+ def columner_data
+ @columns ||= to_h
end
end
end