Class: Suxess::Evaluators::TaskSuccessEvaluator

Inherits:
Object
  • Object
show all
Defined in:
lib/suxess/evaluators/task_success_evaluator.rb

Instance Method Summary (collapse)

Instance Method Details

- (Object) evaluate(id)

This method will be called by sidekiq

Parameters:

  • id


7
8
9
10
11
12
13
14
# File 'lib/suxess/evaluators/task_success_evaluator.rb', line 7

def evaluate(id)
  @task_run = TaskRun.find(id)

  unless @task_run.nil?
    result_flag = get_result(@task_run)
    save_result(@task_run, result_flag)
  end
end

- (Object) extract_clicks(record)

extract click events from logged events. Clicks are returned in reversed order, so last click is returned as first.

Parameters:

  • record

Returns:

  • clicks



54
55
56
57
58
59
60
61
62
63
# File 'lib/suxess/evaluators/task_success_evaluator.rb', line 54

def extract_clicks(record)
  clicks = []
  record.events.reverse.each do |event|
    if event["type"] == "click"
      event["target"]["id"].sub!('mockup_element_','')
      clicks << event
    end
  end
  clicks
end

- (Object) get_result(task_run)

This method evaluates whether Task was finished successfully or not success = last click was on target element indirect-success = there was click on target element but was not last fail = there wasn't click on target element

Parameters:

  • task_run

Returns:

  • result_flag



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
48
# File 'lib/suxess/evaluators/task_success_evaluator.rb', line 22

def get_result(task_run)
  target_id = task_run.task.element_aoi_id.to_s
  last_click = true
  result_flag = 'F'

  Record.where(task_run_id: @task_run.id).order('created_at DESC').each do |record|
    clicks = extract_clicks(record)
    if clicks.count > 0
        if last_click && clicks.first["target"]["id"] == target_id
        result_flag = 'S'
        break
      end

      last_click = false
      clicks.each do |click|
        if click["target"]["id"] == target_id
          result_flag = 'I'
          break
        end
      end

      break if result_flag == 'I'
    end
  end

  result_flag
end

- (Object) save_result(task_run, result_flag)

this method persists evaluation result into DB.

Parameters:

  • task_run,

    result_flag (S-success, F-fail, I-indirect success)



67
68
69
70
71
72
73
74
# File 'lib/suxess/evaluators/task_success_evaluator.rb', line 67

def save_result(task_run, result_flag)
  Result.create(task_id: task_run.task_id,
                task_run_id: task_run.id,
                project_id: task_run.task.project_id,
                result_type: :success,
                user_id: task_run.user.id,
                result: {:task_completion => result_flag})
end