Class: Twin::Program

Inherits:
Struct
  • Object
show all
Defined in:
lib/twin/scanner.rb

Overview

A logical group of Jobs sharing a Program name (e.g. "Matterbase" can have multiple paths). Selection unit in the picker.

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#jobsObject

Returns the value of attribute jobs

Returns:

  • (Object)

    the current value of jobs



56
57
58
# File 'lib/twin/scanner.rb', line 56

def jobs
  @jobs
end

#nameObject

Returns the value of attribute name

Returns:

  • (Object)

    the current value of name



56
57
58
# File 'lib/twin/scanner.rb', line 56

def name
  @name
end

Instance Method Details

#active_jobsObject



71
# File 'lib/twin/scanner.rb', line 71

def active_jobs = jobs.select { |j| j.active == 1 }

#descriptionObject



60
61
62
# File 'lib/twin/scanner.rb', line 60

def description
  jobs.map(&:description).reject(&:empty?).uniq.join(" / ")
end

#labelObject



58
# File 'lib/twin/scanner.rb', line 58

def label     = jobs.first&.label

#newest_source_mtimeObject



73
# File 'lib/twin/scanner.rb', line 73

def newest_source_mtime = jobs.map(&:source_mtime).compact.max

#newest_target_mtimeObject



74
# File 'lib/twin/scanner.rb', line 74

def newest_target_mtime = jobs.map(&:target_mtime).compact.max

#statusObject

Aggregate status across jobs — worst first.



65
66
67
68
69
# File 'lib/twin/scanner.rb', line 65

def status
  states = jobs.map(&:status)
  %i[unreachable both_missing missing_source missing_target target_newer source_newer unverified disabled in_sync]
    .find { |s| states.include?(s) } || :in_sync
end

#sync_fileObject



57
# File 'lib/twin/scanner.rb', line 57

def sync_file = jobs.first&.sync_file