class DashOverlord::UseCases::V1::ChartConfigs::CacheAnswerValues::BuildCache

Public Instance Methods

perform() click to toggle source
# File lib/dash_overlord/use_cases/v1/chart_configs/cache_answer_values/build_cache.rb, line 10
def perform
  chart_config.cached_answer_values =
    unique_answer_values.map { |key, value|
      { label: key, value: value }
    }

  chart_config.cached_answer_updated_at = cached_answer_updated_at
end

Protected Instance Methods

cached_answer_updated_at() click to toggle source
# File lib/dash_overlord/use_cases/v1/chart_configs/cache_answer_values/build_cache.rb, line 34
def cached_answer_updated_at
  return nil if chart_config.cached_answer_values.blank?

  # fucking Ebert, made me do this... fucker
  last_answer = chart_config.last_answer

  return DT.now if !last_answer || !last_answer.updated_at

  last_answer.updated_at
end
calculate_values_occurences() click to toggle source
# File lib/dash_overlord/use_cases/v1/chart_configs/cache_answer_values/build_cache.rb, line 45
def calculate_values_occurences
  raw_responses.each_with_object({}) do |raw_response, hash|
    hash[raw_response] = hash[raw_response] ? (hash[raw_response] + 1) : 1
  end
end
calculate_values_percentage() click to toggle source
# File lib/dash_overlord/use_cases/v1/chart_configs/cache_answer_values/build_cache.rb, line 51
def calculate_values_percentage
  hash = calculate_values_occurences

  total = hash.values.reduce(:+)

  hash.each do |key, occurences|
    hash[key] = (occurences * 100).to_f / total
  end

  hash
end
raw_responses() click to toggle source
# File lib/dash_overlord/use_cases/v1/chart_configs/cache_answer_values/build_cache.rb, line 63
def raw_responses
  @raw_responses ||= chart_config.answers.map { |answer|
    Entities::Answer.new(answer.attributes).parsed_response
  }
end
unique_answer_values() click to toggle source
# File lib/dash_overlord/use_cases/v1/chart_configs/cache_answer_values/build_cache.rb, line 21
def unique_answer_values
  case chart_config.function
  when 'count'
    calculate_values_occurences
  when 'percentage'
    calculate_values_percentage
  else
    raw_responses.each_with_object({}) do |raw_response, hash|
      hash[raw_response.to_sym] = '-'
    end
  end
end