Class: Soba::Services::QueueingService

Inherits:
Object
  • Object
show all
Defined in:
lib/soba/services/queueing_service.rb

Constant Summary collapse

TODO_LABEL =
"soba:todo"
QUEUED_LABEL =
"soba:queued"

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(github_client:, blocking_checker:, logger: nil) ⇒ QueueingService

Returns a new instance of QueueingService.



11
12
13
14
15
# File 'lib/soba/services/queueing_service.rb', line 11

def initialize(github_client:, blocking_checker:, logger: nil)
  @github_client = github_client
  @blocking_checker = blocking_checker
  @logger = logger || SemanticLogger["QueueingService"]
end

Instance Attribute Details

#blocking_checkerObject (readonly)

Returns the value of attribute blocking_checker.



9
10
11
# File 'lib/soba/services/queueing_service.rb', line 9

def blocking_checker
  @blocking_checker
end

#github_clientObject (readonly)

Returns the value of attribute github_client.



9
10
11
# File 'lib/soba/services/queueing_service.rb', line 9

def github_client
  @github_client
end

#loggerObject (readonly)

Returns the value of attribute logger.



9
10
11
# File 'lib/soba/services/queueing_service.rb', line 9

def logger
  @logger
end

Instance Method Details

#queue_next_issue(repository) ⇒ Object



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/soba/services/queueing_service.rb', line 17

def queue_next_issue(repository)
  logger.info("Starting queueing process: #{repository}")

  if has_active_issue?(repository)
    issues = github_client.issues(repository, state: "open")
    reason = blocking_checker.blocking_reason(repository, issues: issues)
    logger.info("Skipping queueing process: #{reason}")
    return nil
  end

  candidate = find_next_candidate_from_repository(repository)
  if candidate.nil?
    logger.info("No issues found for queueing")
    return nil
  end

  result = transition_to_queued(candidate, repository)
  return nil if result.nil? # 競合状態検出時

  candidate
rescue => e
  logger.error("Error during queueing process: #{e.message} (repository: #{repository})")
  raise
end