Sha256: 04c9b12532e8175059bacebbd560b88d6e4e057b65ab64a610e3ce96c27cf5f6

Contents?: true

Size: 1.9 KB

Versions: 9

Compression:

Stored size: 1.9 KB

Contents

module ForestLiana
  class ValueStatGetter
    attr_accessor :record

    def initialize(resource, params)
      @resource = resource
      @params = params
    end

    def perform
      return if @params[:aggregate].blank?
      valueCurrent = @resource
      valuePrevious = @resource

      @params[:filters].try(:each) do |filter|
        operator, filter_value = OperatorValueParser.parse(filter[:value])
        valueCurrent = OperatorValueParser.add_where(valueCurrent,
          filter[:field], operator, filter_value, @resource)
      end

      filter_date_interval = false
      @params[:filters].try(:each) do |filter|
        operator, filter_value = OperatorValueParser.parse(filter[:value])
        operator_date_interval_parser = OperatorDateIntervalParser.new(filter_value)
        if operator_date_interval_parser.is_interval_date_value()
          field_name = OperatorValueParser.get_field_name(filter[:field], @resource)
          filter = operator_date_interval_parser
            .get_interval_date_filter_for_previous_interval()
          valuePrevious = valuePrevious.where("#{field_name} #{filter}")
          filter_date_interval = true
        else
          valuePrevious = OperatorValueParser.add_where(valuePrevious,
            filter[:field], operator, filter_value, @resource)
        end
      end

      @record = Model::Stat.new(value: {
        countCurrent: count(valueCurrent),
        countPrevious: filter_date_interval ? count(valuePrevious) : nil
      })
    end

    private

    def count(value)
      uniq = @params[:aggregate].downcase == 'count'

      if Rails::VERSION::MAJOR == 4
        value = value.uniq if uniq
        value.send(@params[:aggregate].downcase, aggregate_field)
      else
        value.send(@params[:aggregate].downcase, aggregate_field,
                   distinct: uniq)
      end
    end

    def aggregate_field
      @params[:aggregate_field] || :id
    end

  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
forest_liana-1.3.22 app/services/forest_liana/value_stat_getter.rb
forest_liana-1.3.21 app/services/forest_liana/value_stat_getter.rb
forest_liana-1.3.20 app/services/forest_liana/value_stat_getter.rb
forest_liana-1.3.19 app/services/forest_liana/value_stat_getter.rb
forest_liana-1.3.18 app/services/forest_liana/value_stat_getter.rb
forest_liana-1.3.17 app/services/forest_liana/value_stat_getter.rb
forest_liana-1.3.16 app/services/forest_liana/value_stat_getter.rb
forest_liana-1.3.15 app/services/forest_liana/value_stat_getter.rb
forest_liana-1.3.14 app/services/forest_liana/value_stat_getter.rb