Class: Greentable::Table
- Inherits:
-
Object
- Object
- Greentable::Table
- Defined in:
- lib/greentable/greentable_table.rb
Direct Known Subclasses
Defined Under Namespace
Classes: TableGroup
Instance Method Summary collapse
- #col(th = nil, opts = {}, &block) ⇒ Object
- #counter ⇒ Object
- #footer(*args, &block) ⇒ Object
-
#initialize(parent, records, opts) ⇒ Table
constructor
A new instance of Table.
- #process(&block) ⇒ Object
- #to_s ⇒ Object
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 |
#counter ⇒ Object
30 31 32 |
# File 'lib/greentable/greentable_table.rb', line 30 def counter @row_counter end |
#footer(*args, &block) ⇒ Object
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 (*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_s ⇒ Object
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 |