Sha256: c0fbd5aeae1e36fcdc6a51db7461963552795cf380b8ef31355374eca4186b7a
Contents?: true
Size: 1.47 KB
Versions: 2
Compression:
Stored size: 1.47 KB
Contents
class ObjectTable module Stacking def stack(*others) __table_cls__.stack(self, *others) end module InPlace def stack!(*others) @columns.replace( __table_cls__.stack(self, *others).columns ) self end end module ClassMethods def stack(*grids); _stack(grids); end def _stack(grids) keys = nil grids = grids.map do |grid| grid = Stacking.process_stackable_grid(grid, keys) keys ||= grid.keys if grid grid end.compact return __table_cls__.new if grids.empty? result = keys.map do |k| segments = grids.map{|grid| grid[k]} [k, Stacking.stack_segments(segments)] end __table_cls__.new(BasicGrid[result]) end end def self.stack_segments(segments) if segments.all?{|seg| seg.is_a? Array} column = NArray.to_na(segments.flatten(1)) else segments.map!{|seg| NArray.to_na seg} column = Column._stack(segments) end end def self.process_stackable_grid(grid, keys) case grid when TableMethods grid = grid.columns when BasicGrid grid._ensure_uniform_columns! end raise "Don't know how to join a #{grid.class}" unless grid.is_a?(BasicGrid) return if grid.empty? raise 'Mismatch in column names' unless !keys or ( (keys - grid.keys).empty? and (grid.keys - keys).empty? ) return grid end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
object_table-0.4.1 | lib/object_table/stacking.rb |
object_table-0.4.0 | lib/object_table/stacking.rb |