Class: ThinkFeelDoEngine::Reports::LessonViewing
- Inherits:
-
Object
- Object
- ThinkFeelDoEngine::Reports::LessonViewing
- Includes:
- LessonModule
- Defined in:
- app/models/think_feel_do_engine/reports/lesson_viewing.rb
Overview
Scenario: a Participant starts viewing a Lesson.
Constant Summary
Constants included from LessonModule
ThinkFeelDoEngine::Reports::LessonModule::URL_ROOT_RE
Class Method Summary collapse
- .all(*ids) ⇒ Object
- .columns ⇒ Object
-
.last_page_opened(first_session_event, lesson_id) ⇒ Object
last event (click) with matching module id.
- .participant_ids(ids) ⇒ Object
Methods included from LessonModule
Class Method Details
.all(*ids) ⇒ Object
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'app/models/think_feel_do_engine/reports/lesson_viewing.rb', line 16 def self.all(*ids) lessons = lesson_entries_map Participant.select(:id, :study_id) .where(id: participant_ids(ids)).map do |participant| lesson_select_events = EventCapture::Event .where(participant_id: participant.id, kind: "render") .select(:participant_id, :emitted_at, :payload) .to_a.select do |e| lessons.keys.include?(e.current_url.gsub(URL_ROOT_RE, "")) end lesson_select_events.map do |e| lesson_id = lessons[e.current_url.gsub(URL_ROOT_RE, "")] last_page_opened = last_page_opened(e, lesson_id) { participant_id: participant.study_id, lesson_id: lesson_id, page_headers: e.headers, lesson_selected_at: e.emitted_at.iso8601, last_page_number_opened: last_page_opened[:number].to_i, last_page_opened_at: last_page_opened[:opened_at].iso8601 } end end.flatten end |
.columns ⇒ Object
7 8 9 10 |
# File 'app/models/think_feel_do_engine/reports/lesson_viewing.rb', line 7 def self.columns %w( participant_id lesson_id page_headers lesson_selected_at last_page_number_opened last_page_opened_at ) end |
.last_page_opened(first_session_event, lesson_id) ⇒ Object
last event (click) with matching module id
46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
# File 'app/models/think_feel_do_engine/reports/lesson_viewing.rb', line 46 def self.last_page_opened(first_session_event, lesson_id) lesson_events = EventCapture::Event .where(participant_id: first_session_event.participant_id, kind: "render") .where("emitted_at > ?", first_session_event.emitted_at) .order(:emitted_at) .select(:kind, :emitted_at, :payload) .to_a.take_while { |e| e.current_url.include?(lesson_id.to_s) } last_event = (lesson_events.last || first_session_event) { number: last_event.current_url[/\d+$/], opened_at: last_event.emitted_at } end |
.participant_ids(ids) ⇒ Object
12 13 14 |
# File 'app/models/think_feel_do_engine/reports/lesson_viewing.rb', line 12 def self.participant_ids(ids) ids.empty? ? Participant.ids : ids end |