class Terminal::Table::Style


Terminal::Table::Style.defaults = {:width => 80}
To set a default style for all tables created afterwards use Style.defaults=
@table.style = {:padding_left => 2, :width => 40}
# by method
@table.style.width = 40
@table.style.padding_left = 2
# by object
@table = Table.new(:style => {:padding_left => 2, :width => 40})
# by constructor
All these examples have the same effect:
option :style, the Table#style object or the Table#style= method
To create a table with a certain style, use either the constructor
A Style object holds all the formatting information for a Table object

def apply options

def apply options
  options.each do |m, v|
    __send__ "#{m}=", v
  end
end

def border=(val)

def border=(val)
  if val.is_a? Symbol
    # convert symbol name like :foo_bar to get class FooBarBorder
    klass_str = val.to_s.split('_').collect(&:capitalize).join + "Border"
    begin
      klass = Terminal::Table::const_get(klass_str)
      @border = klass.new
    rescue NameError
      raise "Cannot lookup class Terminal::Table::#{klass_str} from symbol #{val.inspect}"
    end
  else
    @border = val
  end
end

def border_bottom ; @border.bottom ; end

def border_bottom ; @border.bottom ; end

def border_bottom=(val) ; @border.bottom = val ; end

def border_bottom=(val) ; @border.bottom = val ; end

def border_i=(val) ; @border[:i] = val ; end

def border_i=(val) ; @border[:i] = val ; end

def border_left ; @border.left ; end

def border_left ; @border.left ; end

def border_left=(val) ; @border.left = val ; end

def border_left=(val) ; @border.left = val ; end

def border_right ; @border.right ; end

def border_right ; @border.right ; end

def border_right=(val) ; @border.right = val ; end

def border_right=(val) ; @border.right = val ; end

def border_top ; @border.top ; end

def border_top ; @border.top ; end

def border_top=(val) ; @border.top = val ; end

def border_top=(val) ; @border.top = val ; end

def border_x=(val) ; @border[:x] = val ; end

# settors/gettor for legacy ascii borders
def border_x=(val) ; @border[:x] = val ; end

def border_y ; @border[:y] ; end

def border_y ; @border[:y] ; end

def border_y=(val) ; @border[:y] = val ; end

def border_y=(val) ; @border[:y] = val ; end

def border_y_width ; Util::ansi_escape(@border[:y]).length ; end

def border_y_width ; Util::ansi_escape(@border[:y]).length ; end

def defaults

def defaults
  klass_defaults = @@defaults.dup
  # border is an object that needs to be duplicated on instantiation,
  # otherwise everything will be referencing the same object-id.
  klass_defaults[:border] = klass_defaults[:border].dup
  klass_defaults
end

def defaults= options

def defaults= options
  @@defaults = defaults.merge(options)
end

def initialize options = {}

def initialize options = {}
  apply self.class.defaults.merge(options)
end

def on_change attr

def on_change attr
  method_name = :"#{attr}="
  old_method = method method_name
  define_singleton_method(method_name) do |value|
    old_method.call value
    yield attr.to_sym, value
  end
end