Class: ThinkFeelDoEngine::Reports::ModulePageView

Inherits:
Object
  • Object
show all
Includes:
ToolModule
Defined in:
app/models/think_feel_do_engine/reports/module_page_view.rb

Overview

Scenario: A Participant starts using a Module page.

Constant Summary

Constants included from ToolModule

ToolModule::URL_ROOT_RE

Class Method Summary collapse

Methods included from ToolModule

included

Class Method Details

.allObject



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'app/models/think_feel_do_engine/reports/module_page_view.rb', line 13

def self.all
  modules = modules_map

  Participant.not_moderator.select(:id, :study_id).map do |participant|
    slide_render_events_for(participant, modules).map do |module_event|
      e = module_event[1]
      mod = module_event[0]

      {
        participant_id: participant.study_id,
        tool_id: mod.bit_core_tool_id,
        module_id: mod.id,
        page_headers: e.headers,
        page_selected_at: e.emitted_at.iso8601,
        page_exited_at: page_exit_event_at(e).try(:iso8601),
        url: e.payload["currentUrl"]
      }
    end
  end.flatten
end

.columnsObject



8
9
10
11
# File 'app/models/think_feel_do_engine/reports/module_page_view.rb', line 8

def self.columns
  %w( participant_id tool_id module_id page_headers page_selected_at
      page_exited_at url )
end

.page_exit_event_at(page_render_event) ⇒ Object



48
49
50
51
52
53
54
55
# File 'app/models/think_feel_do_engine/reports/module_page_view.rb', line 48

def self.page_exit_event_at(page_render_event)
  EventCapture::Event
    .order(:emitted_at)
    .where("emitted_at > ? AND payload NOT LIKE ?",
           page_render_event.emitted_at,
           "%currentUrl: #{page_render_event.current_url}\n%")
    .select(:emitted_at).limit(1).first.try(:emitted_at)
end

.slide_render_events_for(participant, modules) ⇒ Object



34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'app/models/think_feel_do_engine/reports/module_page_view.rb', line 34

def self.slide_render_events_for(participant, modules)
  EventCapture::Event
    .where(participant_id: participant.id,
           kind: %w( render ))
    .select(:participant_id, :emitted_at, :payload)
    .to_a.map do |e|
      key = modules.keys.find do |l|
        !e.current_url.match(%r{#{ l }(\/.*)?$}).nil?
      end

      key ? [modules[key], e] : nil
    end.compact
end