Sha256: 7311053747a06bc02042fbfaf3737d5f5a3fc92feab130c89a75ebb2a56f864c

Contents?: true

Size: 1.26 KB

Versions: 94

Compression:

Stored size: 1.26 KB

Contents

module ForestLiana
  class LeaderboardStatGetter < StatGetter
    def initialize(resource, params)
      @resource = resource
      @params = params
      @model_relationship =  @resource.reflect_on_association(@params[:relationship_field]).klass
      compute_includes()
      @label_field = @params[:label_field]
      @aggregate = @params[:aggregate].downcase
      @aggregate_field = @params[:aggregate_field]
      @limit = @params[:limit]
      @groub_by = "#{@resource.table_name}.#{@label_field}"
    end

    def perform
      result = @model_relationship
        .joins(@includes)
        .group(@groub_by)
        .order(order)
        .limit(@limit)
        .send(@aggregate, @aggregate_field)
        .map { |key, value| { key: key, value: value } }

      @record = Model::Stat.new(value: result)
    end

    def compute_includes
      @includes = ForestLiana::QueryHelper.get_one_association_names_symbol(@model_relationship)
    end

    def order
      order = 'DESC'

      # NOTICE: The generated alias for a count is "count_all", for a sum the
      #         alias looks like "sum_#{aggregate_field}"
      if @aggregate == 'sum'
        field = @aggregate_field.downcase
      else
        field = 'all'
      end
      "#{@aggregate}_#{field} #{order}"
    end
  end
end

Version data entries

94 entries across 94 versions & 1 rubygems

Version Path
forest_liana-6.6.3 app/services/forest_liana/leaderboard_stat_getter.rb
forest_liana-7.0.0.beta.4 app/services/forest_liana/leaderboard_stat_getter.rb
forest_liana-7.0.0.beta.3 app/services/forest_liana/leaderboard_stat_getter.rb
forest_liana-6.6.2 app/services/forest_liana/leaderboard_stat_getter.rb
forest_liana-6.6.1 app/services/forest_liana/leaderboard_stat_getter.rb
forest_liana-6.6.0 app/services/forest_liana/leaderboard_stat_getter.rb
forest_liana-6.5.1 app/services/forest_liana/leaderboard_stat_getter.rb
forest_liana-7.0.0.beta.2 app/services/forest_liana/leaderboard_stat_getter.rb
forest_liana-6.5.0 app/services/forest_liana/leaderboard_stat_getter.rb
forest_liana-6.4.1 app/services/forest_liana/leaderboard_stat_getter.rb
forest_liana-7.0.0.beta.1 app/services/forest_liana/leaderboard_stat_getter.rb
forest_liana-6.4.0 app/services/forest_liana/leaderboard_stat_getter.rb
forest_liana-6.3.8 app/services/forest_liana/leaderboard_stat_getter.rb
forest_liana-6.3.7 app/services/forest_liana/leaderboard_stat_getter.rb
forest_liana-6.3.6 app/services/forest_liana/leaderboard_stat_getter.rb
forest_liana-6.3.5 app/services/forest_liana/leaderboard_stat_getter.rb
forest_liana-6.3.4 app/services/forest_liana/leaderboard_stat_getter.rb
forest_liana-6.3.3 app/services/forest_liana/leaderboard_stat_getter.rb
forest_liana-6.3.2 app/services/forest_liana/leaderboard_stat_getter.rb
forest_liana-6.3.1 app/services/forest_liana/leaderboard_stat_getter.rb