Class: AhoyCaptain::Stats::AverageVisitDurationQuery

Inherits:
BaseQuery show all
Defined in:
app/queries/ahoy_captain/stats/average_visit_duration_query.rb

Instance Attribute Summary

Attributes inherited from ApplicationQuery

#params

Class Method Summary collapse

Instance Method Summary collapse

Methods included from LazyComparableQuery

#with_lazy_comparison

Methods included from ComparableQuery

#with_comparison

Methods inherited from ApplicationQuery

call, inherited, #initialize, #inspect

Constructor Details

This class inherits a constructor from AhoyCaptain::ApplicationQuery

Class Method Details

.cast_type(value) ⇒ Object



10
11
12
# File 'app/queries/ahoy_captain/stats/average_visit_duration_query.rb', line 10

def self.cast_type(value)
  ActiveRecord::Type.lookup(:string)
end

.cast_value(_type, value) ⇒ Object



14
15
16
17
18
19
20
# File 'app/queries/ahoy_captain/stats/average_visit_duration_query.rb', line 14

def self.cast_value(_type, value)
  if value.present?
    ActiveSupport::Duration.parse(value)
  else
    ActiveSupport::Duration.parse("P0MT0S")
  end
end

Instance Method Details

#buildObject



4
5
6
7
8
# File 'app/queries/ahoy_captain/stats/average_visit_duration_query.rb', line 4

def build
  max_events = event_query.select("#{AhoyCaptain.event.table_name}.visit_id, max(#{AhoyCaptain.event.table_name}.time) as created_at").group("visit_id")
  visit_query.select("avg((max_events.created_at - #{AhoyCaptain.visit.table_name}.started_at))::interval as average_visit_duration")
             .joins("LEFT JOIN (#{max_events.to_sql}) as max_events ON #{AhoyCaptain.visit.table_name}.id = max_events.visit_id")
end