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 collapse
- DEFAULT_LESSON_MODULE_POSTFIX =
%r{\/providers\/.*}
Constants included from LessonModule
ThinkFeelDoEngine::Reports::LessonModule::URL_ROOT_RE
Class Method Summary collapse
- .all(*ids) ⇒ Object
- .columns ⇒ Object
- .event_hash(participant, lesson_id, event, last_page_opened) ⇒ Object
- .event_lesson_page_number(event) ⇒ Object
-
.last_page_opened(participant_render_events, first_session_event, lesson_id) ⇒ Object
last event (click) with matching module id.
- .lessons_with_default_urls(lessons_map) ⇒ Object
- .participant_ids(ids) ⇒ Object
- .render_events ⇒ Object
Methods included from LessonModule
Class Method Details
.all(*ids) ⇒ Object
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 44 45 46 47 |
# File 'app/models/think_feel_do_engine/reports/lesson_viewing.rb', line 19 def self.all(*ids) lessons = lesson_entries_map lessons_default = lessons_with_default_urls(lessons) Participant.not_moderator.select(:id, :study_id) .where(id: participant_ids(ids)).map do |participant| participant_render_events = render_events .where(participant_id: participant.id) lesson_select_events = participant_render_events .to_a.select do |e| lessons.keys.include?(e.current_url.gsub(URL_ROOT_RE, "")) || lessons_default .keys.include?(e.current_url.gsub(URL_ROOT_RE, "")) || lessons_default .keys.include?(e.current_url.gsub(URL_ROOT_RE, "")[0...-1]) end lesson_select_events.map do |e| lesson_id = lessons[e.current_url.gsub(URL_ROOT_RE, "")] || lessons_default[e.current_url.gsub(URL_ROOT_RE, "")] || lessons_default[e.current_url.gsub(URL_ROOT_RE, "")[0...-1]] last_page_opened_info = last_page_opened(participant_render_events, e, lesson_id) event_hash(participant, lesson_id, e, last_page_opened_info) end end.flatten end |
.columns ⇒ Object
10 11 12 13 |
# File 'app/models/think_feel_do_engine/reports/lesson_viewing.rb', line 10 def self.columns %w( participant_id lesson_id url page_headers lesson_selected_at last_page_number_opened completed last_page_opened_at ) end |
.event_hash(participant, lesson_id, event, last_page_opened) ⇒ Object
92 93 94 95 96 97 98 99 100 101 102 103 104 |
# File 'app/models/think_feel_do_engine/reports/lesson_viewing.rb', line 92 def self.event_hash(participant, lesson_id, event, last_page_opened) { participant_id: participant.study_id, lesson_id: lesson_id, url: event.current_url, page_headers: event.headers, lesson_selected_at: event.emitted_at.iso8601, last_page_number_opened: last_page_opened[:number].to_i, completed: last_page_opened[:number].to_i == ContentModules::LessonModule.find(lesson_id)..count, last_page_opened_at: last_page_opened[:opened_at].iso8601 } end |
.event_lesson_page_number(event) ⇒ Object
74 75 76 77 78 79 80 |
# File 'app/models/think_feel_do_engine/reports/lesson_viewing.rb', line 74 def self.event_lesson_page_number(event) if event.current_url.include? "providers" event.current_url[/\d+$/] else 1 end end |
.last_page_opened(participant_render_events, first_session_event, lesson_id) ⇒ Object
last event (click) with matching module id
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
# File 'app/models/think_feel_do_engine/reports/lesson_viewing.rb', line 56 def self.last_page_opened( participant_render_events, first_session_event, lesson_id ) lesson_events = participant_render_events .where("emitted_at > ?", first_session_event.emitted_at) .order(:emitted_at) .to_a.take_while { |e| e.current_url.include?(lesson_id.to_s) } last_event = (lesson_events.last || first_session_event) { number: event_lesson_page_number(last_event), opened_at: last_event.emitted_at } end |
.lessons_with_default_urls(lessons_map) ⇒ Object
82 83 84 85 86 87 88 89 90 |
# File 'app/models/think_feel_do_engine/reports/lesson_viewing.rb', line 82 def self.lessons_with_default_urls(lessons_map) lessons_with_default_path = lessons_map.each.map do |lesson| default_lesson_url = lesson[0].gsub(URL_ROOT_RE, "") .gsub(DEFAULT_LESSON_MODULE_POSTFIX, "") [default_lesson_url, lesson[1]] end Hash[lessons_with_default_path] end |
.participant_ids(ids) ⇒ Object
15 16 17 |
# File 'app/models/think_feel_do_engine/reports/lesson_viewing.rb', line 15 def self.participant_ids(ids) ids.empty? ? Participant.not_moderator.ids : ids end |
.render_events ⇒ Object
49 50 51 52 53 |
# File 'app/models/think_feel_do_engine/reports/lesson_viewing.rb', line 49 def self.render_events EventCapture::Event .where(kind: "render") .select(:participant_id, :emitted_at, :kind, :payload) end |