Sha256: 5be984690e2d6e030dccdd649052ff21fedba1ee4a82ae9f11a680e56a1303ae
Contents?: true
Size: 1.76 KB
Versions: 9
Compression:
Stored size: 1.76 KB
Contents
module ThinkFeelDoEngine module Reports # Scenario: A Participant starts using a Module page. class ModulePageView include ToolModule def self.columns %w( participant_id tool_id module_id page_headers page_selected_at page_exited_at url ) end 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 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(/#{ l }(\/.*)?$/).nil? end key ? [modules[key], e] : nil end.compact end 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 end end end
Version data entries
9 entries across 9 versions & 1 rubygems