Sha256: 13c8f4b0dedc5fd565e40db87132ba08a205c9ca48ff217cb6ae5e09395e0511

Contents?: true

Size: 1.17 KB

Versions: 2

Compression:

Stored size: 1.17 KB

Contents

# frozen_string_literal: true

module EasyDataTables
  # 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
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
easy_data_tables-0.3.0 app/models/easy_data_tables/column.rb
easy_data_tables-0.2.0 app/models/easy_data_tables/column.rb