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

Version Path
think_feel_do_engine-3.19.7 app/models/think_feel_do_engine/reports/module_page_view.rb
think_feel_do_engine-3.19.6 app/models/think_feel_do_engine/reports/module_page_view.rb
think_feel_do_engine-3.19.5 app/models/think_feel_do_engine/reports/module_page_view.rb
think_feel_do_engine-3.19.4 app/models/think_feel_do_engine/reports/module_page_view.rb
think_feel_do_engine-3.19.3 app/models/think_feel_do_engine/reports/module_page_view.rb
think_feel_do_engine-3.19.2 app/models/think_feel_do_engine/reports/module_page_view.rb
think_feel_do_engine-3.19.1 app/models/think_feel_do_engine/reports/module_page_view.rb
think_feel_do_engine-3.19.0 app/models/think_feel_do_engine/reports/module_page_view.rb
think_feel_do_engine-3.18.0 app/models/think_feel_do_engine/reports/module_page_view.rb