Module: Workarea::Reports::Report
- Extended by:
- ActiveSupport::Concern
- Included in:
- AverageOrderValue, Customers, FirstTimeVsReturningSales, LowInventory, SalesByCategory, SalesByCountry, SalesByDiscount, SalesByMenu, SalesByProduct, SalesBySku, SalesByTender, SalesByTrafficReferrer, SalesOverTime, Searches, SearchesOverTime, SearchesWithoutResultsOverTime
- Defined in:
- app/queries/workarea/reports/report.rb
Instance Method Summary collapse
- #cache_key ⇒ Object
- #count ⇒ Object
- #ends_at ⇒ Object
- #initialize(params = {}) ⇒ Object
- #limit ⇒ Object
- #more_results? ⇒ Boolean
- #results ⇒ Object
- #slug ⇒ Object
- #sort ⇒ Object
- #sort_by ⇒ Object
- #sort_direction ⇒ Object
- #sort_value ⇒ Object
- #starts_at ⇒ Object
Instance Method Details
#cache_key ⇒ Object
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 |
#count ⇒ Object
57 58 59 |
# File 'app/queries/workarea/reports/report.rb', line 57 def count results.length end |
#ends_at ⇒ Object
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 |
#limit ⇒ Object
40 41 42 |
# File 'app/queries/workarea/reports/report.rb', line 40 def limit { '$limit' => Workarea.config.reports_max_results } end |
#more_results? ⇒ Boolean
61 62 63 |
# File 'app/queries/workarea/reports/report.rb', line 61 def more_results? count >= Workarea.config.reports_max_results end |
#results ⇒ Object
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 |
#slug ⇒ Object
17 18 19 |
# File 'app/queries/workarea/reports/report.rb', line 17 def slug self.class.name.demodulize.underscore end |
#sort ⇒ Object
36 37 38 |
# File 'app/queries/workarea/reports/report.rb', line 36 def sort { '$sort' => sort_value } end |
#sort_by ⇒ Object
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_direction ⇒ Object
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_value ⇒ Object
48 49 50 |
# File 'app/queries/workarea/reports/report.rb', line 48 def sort_value { sort_by => sort_direction == 'desc' ? -1 : 1 } end |