Sha256: cfeb3c839db610d246622900813b9300acc1e388dae6f7872c85bc36117cfb20

Contents?: true

Size: 1.75 KB

Versions: 44

Compression:

Stored size: 1.75 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.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

44 entries across 44 versions & 1 rubygems

Version Path
think_feel_do_engine-3.17.2 app/models/think_feel_do_engine/reports/module_page_view.rb
think_feel_do_engine-3.17.1 app/models/think_feel_do_engine/reports/module_page_view.rb
think_feel_do_engine-3.17.0 app/models/think_feel_do_engine/reports/module_page_view.rb
think_feel_do_engine-3.16.3 app/models/think_feel_do_engine/reports/module_page_view.rb
think_feel_do_engine-3.16.2 app/models/think_feel_do_engine/reports/module_page_view.rb
think_feel_do_engine-3.16.1 app/models/think_feel_do_engine/reports/module_page_view.rb
think_feel_do_engine-3.15.7 app/models/think_feel_do_engine/reports/module_page_view.rb
think_feel_do_engine-3.16.0 app/models/think_feel_do_engine/reports/module_page_view.rb
think_feel_do_engine-3.15.6 app/models/think_feel_do_engine/reports/module_page_view.rb
think_feel_do_engine-3.15.5 app/models/think_feel_do_engine/reports/module_page_view.rb
think_feel_do_engine-3.15.4 app/models/think_feel_do_engine/reports/module_page_view.rb
think_feel_do_engine-3.15.3 app/models/think_feel_do_engine/reports/module_page_view.rb
think_feel_do_engine-3.15.2 app/models/think_feel_do_engine/reports/module_page_view.rb
think_feel_do_engine-3.15.1 app/models/think_feel_do_engine/reports/module_page_view.rb
think_feel_do_engine-3.15.0 app/models/think_feel_do_engine/reports/module_page_view.rb
think_feel_do_engine-3.14.9 app/models/think_feel_do_engine/reports/module_page_view.rb
think_feel_do_engine-3.14.8 app/models/think_feel_do_engine/reports/module_page_view.rb
think_feel_do_engine-3.14.7 app/models/think_feel_do_engine/reports/module_page_view.rb
think_feel_do_engine-3.14.6 app/models/think_feel_do_engine/reports/module_page_view.rb
think_feel_do_engine-3.14.5 app/models/think_feel_do_engine/reports/module_page_view.rb