Module: Workarea::Reports::Report

Instance Method Summary collapse

Instance Method Details

#cache_keyObject



71
72
73
74
75
76
77
78
79
80
# File 'app/queries/workarea/reports/report.rb', line 71

def cache_key
  cache_params = params.reject { |k, v| k.blank? || v.blank? }.sort

  [
    :reports,
    slug,
    Time.current.strftime('%Y%m%d'),
    Digest::SHA1.hexdigest(cache_params.to_s)
  ].join('/')
end

#countObject



57
58
59
# File 'app/queries/workarea/reports/report.rb', line 57

def count
  results.length
end

#ends_atObject



29
30
31
32
33
34
# File 'app/queries/workarea/reports/report.rb', line 29

def ends_at
  @ends_at ||= begin
    value = Time.zone.parse(params[:ends_at].to_s) || Time.current rescue Time.current
    value.end_of_day
  end
end

#initialize(params = {}) ⇒ Object



13
14
15
# File 'app/queries/workarea/reports/report.rb', line 13

def initialize(params = {})
  @params = params.to_h.with_indifferent_access
end

#limitObject



40
41
42
# File 'app/queries/workarea/reports/report.rb', line 40

def limit
  { '$limit' => Workarea.config.reports_max_results }
end

#more_results?Boolean

Returns:

  • (Boolean)


61
62
63
# File 'app/queries/workarea/reports/report.rb', line 61

def more_results?
  count >= Workarea.config.reports_max_results
end

#resultsObject



65
66
67
68
69
# File 'app/queries/workarea/reports/report.rb', line 65

def results
  @results ||= Rails.cache.fetch(cache_key, expires_in: Workarea.config.cache_expirations.reports) do
    reporting_class.collection.aggregate(aggregation + [sort, limit]).to_a
  end
end

#slugObject



17
18
19
# File 'app/queries/workarea/reports/report.rb', line 17

def slug
  self.class.name.demodulize.underscore
end

#sortObject



36
37
38
# File 'app/queries/workarea/reports/report.rb', line 36

def sort
  { '$sort' => sort_value }
end

#sort_byObject



44
45
46
# File 'app/queries/workarea/reports/report.rb', line 44

def sort_by
  @sort_by ||= params[:sort_by].presence_in(sort_fields) || sort_fields.first
end

#sort_directionObject



52
53
54
55
# File 'app/queries/workarea/reports/report.rb', line 52

def sort_direction
  @sort_direction ||= params[:sort_direction].presence_in(sort_directions) ||
    sort_directions.first
end

#sort_valueObject



48
49
50
# File 'app/queries/workarea/reports/report.rb', line 48

def sort_value
  { sort_by => sort_direction == 'desc' ? -1 : 1 }
end

#starts_atObject



21
22
23
24
25
26
27
# File 'app/queries/workarea/reports/report.rb', line 21

def starts_at
  @starts_at ||= begin
    default = Workarea.config.reports_default_starts_at.call
    value = Time.zone.parse(params[:starts_at].to_s) || default rescue default
    value.beginning_of_day
  end
end