Sha256: 9acc3a9b517099031e387d1df91c41b0415be541cf4cd9cef3d12877873b4b9b

Contents?: true

Size: 1.82 KB

Versions: 3

Compression:

Stored size: 1.82 KB

Contents

require_relative './exceptions'

module ClickSession
  class ClickSessionProcessor
    attr_accessor :click_session
    attr_reader :web_runner_processor, :notifier, :screenshot_enabled, :screenshot_options

    def initialize(click_session, web_runner_processor, notifier, options = {})
      @click_session = click_session
      @web_runner_processor = web_runner_processor
      @notifier = notifier
      @screenshot_enabled = options[:screenshot_enabled] || false
      @screenshot_options = options[:screenshot_options] || nil
    end

    def process
      validate_screenshot_configuration

      begin
        process_provided_steps_in_session
      rescue TooManyRetriesError => e
        take_care_of_failed_session
        raise e
      end

      click_session
    end

    private

    def validate_screenshot_configuration
      if screenshot_enabled
        if screenshot_options == nil
          raise ConfigurationError.new(<<-ERROR.strip_heredoc)
            In order to save screenshots, you need to enter s3 information
            in the 'screenshot' option of the configuration
            See https://github.com/talltorp/click_session for more information.
          ERROR
        end
      end
    end

    def process_provided_steps_in_session
      web_runner_processor.process(click_session.model)
      click_session.success!
      notifier.session_successful(click_session)

      if screenshot_enabled
        click_session.screenshot_url = web_runner_processor.save_screenshot(click_session.id)
        click_session.save
      end
    end

    def take_care_of_failed_session
      click_session.failure!
      notifier.session_failed(click_session)

      if screenshot_enabled
        click_session.screenshot_url = web_runner_processor.save_screenshot(click_session.id)
        click_session.save
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
click_session-0.1.1 lib/click_session/click_session_processor.rb
click_session-0.1.0 lib/click_session/click_session_processor.rb
click_session-0.0.1 lib/click_session/click_session_processor.rb