class Deep::Hash::Struct::Dashboard::Table
Attributes
bodies[RW]
body[RW]
header[RW]
headers[RW]
opt[RW]
rows[RW]
side[RW]
sides[RW]
Public Class Methods
new(options = {})
click to toggle source
# File lib/deep/hash/struct/dashboard/table.rb, line 20 def initialize(options = {}) self.opt = default_options.merge(options) self.header = Wrapper.new self.side = Wrapper.new self.body = [] self.bodies = [] self.rows = [] header.side_header = opt[:side_header] if matrix? end
Public Instance Methods
add_body() { |b = wrapper| ... }
click to toggle source
# File lib/deep/hash/struct/dashboard/table.rb, line 42 def add_body yield b = Wrapper.new body << b end
add_header() { |header| ... }
click to toggle source
# File lib/deep/hash/struct/dashboard/table.rb, line 34 def add_header yield header end
add_side() { |side| ... }
click to toggle source
# File lib/deep/hash/struct/dashboard/table.rb, line 38 def add_side yield side end
each() { |r| ... }
click to toggle source
# File lib/deep/hash/struct/dashboard/table.rb, line 90 def each if block_given? rows.each do |r| yield r end else rows.each end end
map() { |r| ... }
click to toggle source
# File lib/deep/hash/struct/dashboard/table.rb, line 100 def map if block_given? rows.map do |r| yield r end else rows.map end end
Also aliased as: collect
matrix?()
click to toggle source
# File lib/deep/hash/struct/dashboard/table.rb, line 30 def matrix? opt[:matrix] end
parse!()
click to toggle source
# File lib/deep/hash/struct/dashboard/table.rb, line 47 def parse! raise_check! self.headers = header.map.each_with_index do |(k, v), i| Row.new(header: true, side: matrix? && i.zero?, name: v, value: k) end self.sides = side.map do |k, v| Row.new(side: true, name: v, value: k) end self.bodies = if matrix? bs = Wrapper.new body.size.times do bs.deep_merge! body.shift end sides.map do |s| rs = [] rs << s rs += headers.map do |h| next if h.side_header? v = bs.to_h.dig(h.value, s.value) v = v.nil? ? opt[:default] : v Row.new(value: v) end.compact rs end else body.map do |r| headers.map do |h| v = r.to_h.dig(h.value) v = v.nil? ? opt[:default] : v Row.new(value: v) end.compact end end self.rows << headers self.rows += bodies end
tr(options = {}) { |tr| ... }
click to toggle source
# File lib/deep/hash/struct/dashboard/table.rb, line 111 def tr(options = {}) b = Wrapper.new opt[:side] = options[:side] || false opt[:matrix] = matrix? opt[:b_index] = body.size yield Tr.new(header, b, side, opt) body << b unless b.count.zero? self end
Private Instance Methods
default_options()
click to toggle source
# File lib/deep/hash/struct/dashboard/table.rb, line 124 def default_options { matrix: false } end
raise_check!()
click to toggle source
# File lib/deep/hash/struct/dashboard/table.rb, line 130 def raise_check! raise Error::UndefinedHeader if header.blank? raise Error::UndefinedSide if matrix? && side.blank? raise Error::InvalidHeader if header.max_stages >= 2 raise Error::InvalidSide if matrix? && side.max_stages >= 2 raise Error::UnnecessarySide if !matrix? && side.present? if matrix? body.each do |row| row.keys.each do |r| next if header.keys[1..-1].include?(r) && row[r].keys.map { |c| side.include?(c) }.all? raise Error::HeaderRelated end end else body.each do |row| row.keys.each do |r| next if header.include?(r) raise Error::HeaderRelated end end end end