Sha256: 51610010590633d33be1738370bf9826de5819366abeb2c77ddee710ceb8395e

Contents?: true

Size: 1.07 KB

Versions: 1

Compression:

Stored size: 1.07 KB

Contents

# frozen_string_literal: true

# Column class, we can access the formated data and the data of a particular cell
class Column
  attr_reader :label

  # values = {}, label = '', type = 'Integer')
  def initialize(args = {})
    @label = args[:label] || ''
    @type = args[:type] || 'Integer'
    @default = args[:default] || 0
    @collection = args[:collection]
    @grouping = args[:grouping]
    @agregate_function = args[:agregate_function]
    @values = construct_values
  end

  def formated_data_at(row)
    case @type
    when 'Integer'
      helpers.number_with_delimiter(data_at(row))
    when 'Percentage'
      helpers.number_to_percentage(data_at(row), precision: 2)
    when 'Currency'
      helpers.number_to_currency(data_at(row))
    else
      data_at(row)
    end
  end

  def data_at(row)
    @values[row]
  end

  private

  def construct_values
    Hash.new(@default)
        .merge(@collection.send(*@grouping).send(*@agregate_function))
        .merge({ 'TOTAL' => @collection.send(*@agregate_function) })
  end

  def helpers
    ActionController::Base.helpers
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
easy_data_tables-0.1.1 app/models/column.rb