Class: Greentable::Table

Inherits:
Object
  • Object
show all
Defined in:
lib/greentable/greentable_table.rb

Direct Known Subclasses

TableGroup

Defined Under Namespace

Classes: TableGroup

Instance Method Summary collapse

Constructor Details

#initialize(parent, records, opts) ⇒ Table

Returns a new instance of Table.



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/greentable/greentable_table.rb', line 7

def initialize(parent, records, opts)
  @parent = parent
  @records = records
  @row_counter = Counter.new(@records.size)

  defaults = Greentable.configuration.defaults.dup rescue {}
  @defaults_tr = deep_merge(defaults.delete(:tr), opts.delete(:tr))
  @defaults_th = deep_merge(defaults.delete(:th), opts.delete(:th))
  @defaults_td = deep_merge(defaults.delete(:td), opts.delete(:td))
  @opts = deep_merge(defaults, opts)

  #rows
  @tr_attributes = []

  #cols
  @th_attributes = []
  @th_html = []
  @td_attributes = []
  @td_html = []

  @tfoot = ""
end

Instance Method Details

#col(th = nil, opts = {}, &block) ⇒ Object



34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/greentable/greentable_table.rb', line 34

def col(th = nil, opts = {}, &block)
  @th_html[@current_col] = th
  th_opts = opts.delete(:th) || {}
  td_opts = opts.delete(:td) || {}
  @th_attributes[@current_col] = deep_merge(opts, th_opts)
  @td_attributes[@current_col] = deep_merge(opts, td_opts)

  @td_html[@row_counter.i] ||= []
  @td_html[@row_counter.i][@current_col] = @parent.capture(&block)

  @current_col += 1
  return nil
end

#counterObject



30
31
32
# File 'lib/greentable/greentable_table.rb', line 30

def counter
  @row_counter
end


48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/greentable/greentable_table.rb', line 48

def footer(*args, &block)
  return unless @tfoot.empty?
  if args.size == 1
    rows = [nil]
    opts = args[0]
  elsif args.size == 2
    rows = args[0]
    opts = args[1]
  else
    raise 'greentable footer: number of arguments must be either 1 or two'
  end

  @tfoot << '<tfoot>'
  tr_opts = deep_merge(@defaults_tr, opts.delete(:tr))
  td_opts = deep_merge(opts, opts.delete(:td))
  td_opts = deep_merge(@defaults_td, td_opts)
  TableGroup.new(@parent, rows, {td: td_opts, tr: tr_opts}).process(&block).send(:to_s_tbody_content, @tfoot)
  @tfoot << '</tfoot>'
end

#process(&block) ⇒ Object



68
69
70
71
72
73
74
75
# File 'lib/greentable/greentable_table.rb', line 68

def process(&block)
  @records.each do |record|
    @current_col = 0
    block.call(self, record)
    @row_counter.inc
  end
  self
end

#to_sObject



77
78
79
80
81
82
83
84
85
86
87
88
# File 'lib/greentable/greentable_table.rb', line 77

def to_s
  ret = String.new
  return ret if @td_html.empty?
  ret << "<table#{do_attributes(nil,@opts)}>"
  to_s_thead_content(ret)
  ret << "<tbody>"
  to_s_tbody_content(ret)
  ret << "</tbody>"
  ret << @tfoot
  ret << "</table>"
  ret.html_safe
end