Class: Rubypivot::SpreadTable
- Inherits:
-
Object
- Object
- Rubypivot::SpreadTable
- Defined in:
- lib/rubypivot/spread_table.rb
Instance Attribute Summary collapse
-
#data_height ⇒ Object
readonly
Returns the value of attribute data_height.
-
#data_width ⇒ Object
readonly
Returns the value of attribute data_width.
-
#options ⇒ Object
Returns the value of attribute options.
-
#rows ⇒ Object
Returns the value of attribute rows.
-
#total_width ⇒ Object
readonly
Returns the value of attribute total_width.
Instance Method Summary collapse
- #add_line(line_type = :data, line = [], line_options = {}) ⇒ Object
- #calc_data_size ⇒ Object
- #each ⇒ Object
- #each_data_line ⇒ Object
- #each_header_line ⇒ Object
- #each_non_header_line ⇒ Object
- #get_row(position) ⇒ Object (also: #line)
-
#initialize(data_source, options = {}) ⇒ SpreadTable
constructor
A new instance of SpreadTable.
- #set_cell_callback(callback) ⇒ Object
- #set_cell_class(callback) ⇒ Object
- #set_line_class(klass) ⇒ Object
- #set_line_type(line_type, position = nil, recalc = true) ⇒ Object
-
#to_grid(framework = :bootstrap, widths = [], options = {}) ⇒ Object
Bootstrap grid.
- #to_html(options = {}) ⇒ Object
- #to_s ⇒ Object
- #total_height ⇒ Object
Constructor Details
#initialize(data_source, options = {}) ⇒ SpreadTable
175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 |
# File 'lib/rubypivot/spread_table.rb', line 175 def initialize(data_source, = {}) @rows = [] @options = {} @options_for_line = {} .each do |k, v| if [:title, :data_line_class, :header_line_class, :data_title_class, :header_title_class, :data_format].include?(k) @options_for_line[k] = v else @options[k] = v end end @attribs = [] if data_source.is_a? Array data_source.each do |line| @rows << SpreadTableLine.new(:data, line, @options_for_line) end elsif data_source.is_a? Hash data_source.each do |title, values| @rows << SpreadTableLine.new(:data, values, title: title) end else @rows << SpreadTableLine.new(:data, line, ) end set_line_type(:header, @options[:header], false) set_line_type(:total, @options[:total], false) calc_data_size end |
Instance Attribute Details
#data_height ⇒ Object (readonly)
Returns the value of attribute data_height.
173 174 175 |
# File 'lib/rubypivot/spread_table.rb', line 173 def data_height @data_height end |
#data_width ⇒ Object (readonly)
Returns the value of attribute data_width.
173 174 175 |
# File 'lib/rubypivot/spread_table.rb', line 173 def data_width @data_width end |
#options ⇒ Object
Returns the value of attribute options.
174 175 176 |
# File 'lib/rubypivot/spread_table.rb', line 174 def @options end |
#rows ⇒ Object
Returns the value of attribute rows.
174 175 176 |
# File 'lib/rubypivot/spread_table.rb', line 174 def rows @rows end |
#total_width ⇒ Object (readonly)
Returns the value of attribute total_width.
173 174 175 |
# File 'lib/rubypivot/spread_table.rb', line 173 def total_width @total_width end |
Instance Method Details
#add_line(line_type = :data, line = [], line_options = {}) ⇒ Object
221 222 223 224 |
# File 'lib/rubypivot/spread_table.rb', line 221 def add_line(line_type = :data, line = [], = {}) @rows << SpreadTableLine.new(line_type, line, ) calc_data_size end |
#calc_data_size ⇒ Object
244 245 246 247 248 249 250 251 252 253 254 255 256 257 |
# File 'lib/rubypivot/spread_table.rb', line 244 def calc_data_size @total_width = 0 @data_width = 0 @data_height = 0 @rows.each do |row| w = row.data_width @total_width = w if @total_width < w next if row.line_type != :data @data_width = w if @data_width < w @data_height += 1 end @total_width += 1 # Including title column self end |
#each ⇒ Object
280 281 282 283 284 |
# File 'lib/rubypivot/spread_table.rb', line 280 def each @rows.each do |row| yield row end end |
#each_data_line ⇒ Object
286 287 288 289 290 291 |
# File 'lib/rubypivot/spread_table.rb', line 286 def each_data_line @rows.each do |row| next if row.line_type != :data yield row end end |
#each_header_line ⇒ Object
293 294 295 296 297 298 |
# File 'lib/rubypivot/spread_table.rb', line 293 def each_header_line @rows.each do |row| next if row.line_type == :data yield row end end |
#each_non_header_line ⇒ Object
300 301 302 303 304 305 |
# File 'lib/rubypivot/spread_table.rb', line 300 def each_non_header_line @rows.each do |row| next if row.line_type == :header yield row end end |
#get_row(position) ⇒ Object Also known as: line
226 227 228 229 230 231 232 233 234 235 236 237 |
# File 'lib/rubypivot/spread_table.rb', line 226 def get_row(position) if position.is_a?(Symbol) if position == :last @rows.last else @rows.first end else pos = position.to_i @rows[pos] if pos >= 0 && pos < @rows.size - 1 end end |
#set_cell_callback(callback) ⇒ Object
273 274 275 276 277 278 |
# File 'lib/rubypivot/spread_table.rb', line 273 def set_cell_callback(callback) return if callback.nil? || !callback.is_a?(Method) each_non_header_line do |line| line.set_cell_callback(callback) end end |
#set_cell_class(callback) ⇒ Object
259 260 261 262 263 264 |
# File 'lib/rubypivot/spread_table.rb', line 259 def set_cell_class(callback) return unless callback each_data_line do |line| line.set_cell_class(callback) end end |
#set_line_class(klass) ⇒ Object
266 267 268 269 270 271 |
# File 'lib/rubypivot/spread_table.rb', line 266 def set_line_class(klass) return unless klass each do |line| line.set_line_class(klass) end end |
#set_line_type(line_type, position = nil, recalc = true) ⇒ Object
204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 |
# File 'lib/rubypivot/spread_table.rb', line 204 def set_line_type(line_type, position = nil, recalc = true) return if line_type.nil? || position.nil? return unless SpreadTableLine::LINE_TYPES[line_type] case position when :first, :top @rows.first.set_line_type(line_type, @options_for_line) when :last, :bottom @rows.last.set_line_type(line_type, @options_for_line) else row = get_row(position) if row @rows[pos].set_line_type(line_type, @options_for_line) end end calc_data_size if recalc end |
#to_grid(framework = :bootstrap, widths = [], options = {}) ⇒ Object
Bootstrap grid
324 325 326 327 328 329 330 |
# File 'lib/rubypivot/spread_table.rb', line 324 def to_grid(framework = :bootstrap, widths = [], = {}) res = "" @rows.each do |row| res << row.to_grid(framework, widths) end res end |
#to_html(options = {}) ⇒ Object
313 314 315 316 317 318 319 320 321 322 |
# File 'lib/rubypivot/spread_table.rb', line 313 def to_html( = {}) line_end = .delete(:line_end) res = HtmlTag.new('table', ).open res << "\n" if line_end == :cr @rows.each do |row| res << row.to_html(line_end: line_end) end res << "</table>\n" res end |
#to_s ⇒ Object
307 308 309 310 311 |
# File 'lib/rubypivot/spread_table.rb', line 307 def to_s @rows.each do |row| puts row.to_s end end |
#total_height ⇒ Object
240 241 242 |
# File 'lib/rubypivot/spread_table.rb', line 240 def total_height @rows.size end |