lib/tabulatr/renderer/column.rb in tabulatr2-0.9.4 vs lib/tabulatr/renderer/column.rb in tabulatr2-0.9.6

- old
+ new

@@ -24,11 +24,12 @@ class Tabulatr::Renderer::Column include ActiveModel::Model attr_accessor *%i{name header width align valign wrap type th_html filter_html filter filter_width range_filter_symbol - sortable table_name block klass format map classes cell_style header_style} + sortable table_name block klass format map classes cell_style header_style + sort_sql filter_sql output} def self.from( name: nil, table_name: nil, header: nil, @@ -44,10 +45,13 @@ format: nil, map: true, klass: nil, cell_style: {}, header_style: {}, + sort_sql: nil, + filter_sql: nil, + output: nil, &block) b = block_given? ? block : nil self.new( name: name, table_name: table_name, @@ -64,14 +68,45 @@ format: format, map: map, klass: klass, block: b, cell_style: cell_style, - header_style: header_style + header_style: header_style, + sort_sql: sort_sql, + filter_sql: filter_sql, + output: output ).apply_styles! end + def update_options(hash = {}, &block) + self.header = hash[:header] || self.header + self.classes = hash[:classes] || self.classes + self.width = hash[:width] || self.width + self.align = hash[:align] || self.align + self.valign = hash[:valign] || self.valign + self.wrap = hash[:wrap] || self.wrap + self.th_html = hash[:th_html] || self.th_html + self.filter_html = hash[:filter_html] || self.filter_html + self.filter = hash[:filter] || self.filter + self.sortable = hash[:sortable] || self.sortable + self.format = hash[:format] || self.format + self.map = hash[:map] || self.map + self.th_html = hash[:th_html] || self.th_html + self.output = block if block_given? + self.filter_sql = hash[:filter_sql] || self.filter_sql + self.sort_sql = hash[:sort_sql] || self.sort_sql + if self.cell_style == '' + self.cell_style = {} + end + self.cell_style = hash[:cell_style] || self.cell_style + if self.header_style == '' + self.header_style = {} + end + self.header_style = hash[:header_style] || self.header_style + self.apply_styles! + end + def klassname() @_klassname ||= @klass.name.underscore end def human_name() header || klass.human_attribute_name(name) end def sort_param() "#{klassname}_sort" end def full_name() [table_name, name].compact.join(":") end def coltype() 'column' end @@ -81,15 +116,23 @@ def checkbox?() false end def action?() false end def apply_styles! # raise cell_style.inspect - self.cell_style = style_options.merge(self.cell_style).map{|e| e.join(':')}.join(';') - self.header_style = style_options.merge(self.header_style).map{|e| e.join(':')}.join(';') + self.cell_style = style_options.merge(self.cell_style) + self.header_style = style_options.merge(self.header_style) self end + def html_cell_style + cell_style.map{|e| e.join(':')}.join(';') + end + + def html_header_style + header_style.map{|e| e.join(':')}.join(';') + end + def style_options default_style_attributes = { :'text-align' => align, width: width, :'vertical-align' => valign, @@ -104,10 +147,9 @@ r = view.instance_exec(record, &block) r = r.join(' ').html_safe if r.is_a?(Array) return r end val = principal_value(record) or return '' - if format.present? && val.respond_to?(:to_ary) val.map do |v| case format when Symbol then view.send(format, v) when String then format % v