Module: Kiba::Extend::Jobs::DependencyHandleable

Included in:
BaseJob, DynamicJobable
Defined in:
lib/kiba/extend/jobs/dependency_handleable.rb

Overview

The methods that need to be mixed in to a Job to handle dependencies

Since:

  • 2.2.0

Instance Method Summary collapse

Instance Method Details

#check_requirements(type) ⇒ Object

Parameters:

  • type (:source, :lookup)

Since:

  • 2.2.0



77
78
79
80
81
82
83
84
85
# File 'lib/kiba/extend/jobs/dependency_handleable.rb', line 77

def check_requirements(type)
  files[type].flatten.compact.each do |data|
    next if data.dynamic_source
    next unless data.path
    next if File.exist?(data.path)

    fail Kiba::Extend::MissingDependencyError.new(data.key, data.path)
  end
end

#destinationsObject

Since:

  • 2.2.0



87
88
89
90
91
# File 'lib/kiba/extend/jobs/dependency_handleable.rb', line 87

def destinations
  @files[:destination].map { |config| file_config(config) }
    .map { |src| "destination #{src[:klass]}, **#{src[:args]}" }
    .join("\n")
end

#file_config(config) ⇒ Object

Since:

  • 2.2.0



99
100
101
# File 'lib/kiba/extend/jobs/dependency_handleable.rb', line 99

def file_config(config)
  {klass: config.klass, args: config.args}
end

#handle_requirements(type) ⇒ Object

Parameters:

  • type (:source, :lookup)

Since:

  • 2.2.0



53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/kiba/extend/jobs/dependency_handleable.rb', line 53

def handle_requirements(type)
  deps = files[type]
  return unless deps

  deps.flatten
    .compact
    .reject(&:dynamic_source)
    .each do |registered|
      req = registered.required
      next unless req

      req.call
    end
  check_requirements(type)
rescue Kiba::Extend::MissingDependencyError => err
  puts "JOB FAILED: DEPENDENCY ERROR IN: #{err.calling_job}"
  err.info
  exit
rescue => err
  puts "JOB FAILED: Error handling #{type} file dependency for "\
    "#{destination_key}: #{err.message}"
end

#prep_file(meth, key, for_job) ⇒ Object

Since:

  • 2.2.0



40
41
42
43
44
45
46
47
48
49
50
# File 'lib/kiba/extend/jobs/dependency_handleable.rb', line 40

def prep_file(meth, key, for_job)
  meth.call(key, for_job)
rescue Kiba::Extend::ErrMod => err
  if err.respond_to?(:formatted)
    puts err.formatted
  else
    puts "JOB FAILED: TRANSFORM ERROR IN: #{err.calling_job}"
    err.info
  end
  exit
end

#setup_file_for(type, key) ⇒ Object

Since:

  • 2.2.0



19
20
21
22
23
24
25
# File 'lib/kiba/extend/jobs/dependency_handleable.rb', line 19

def setup_file_for(type, key)
  return setup_source_for(key) if type == :source

  prep_file(
    Kiba::Extend.registry.method(:"as_#{type}"), key, destination_key
  )
end

#setup_files(files) ⇒ Object

Replace file key names with registered_source/lookup/destination objects dynamically

Since:

  • 2.2.0



10
11
12
13
# File 'lib/kiba/extend/jobs/dependency_handleable.rb', line 10

def setup_files(files)
  files.map { |type, arr| [type, setup_files_for(type, arr)] }
    .to_h
end

#setup_files_for(type, arr) ⇒ Object

Since:

  • 2.2.0



15
16
17
# File 'lib/kiba/extend/jobs/dependency_handleable.rb', line 15

def setup_files_for(type, arr)
  arr.map { |key| setup_file_for(type, key) }
end

#setup_source_for(key) ⇒ Object

Since:

  • 2.2.0



27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/kiba/extend/jobs/dependency_handleable.rb', line 27

def setup_source_for(key)
  entry = Kiba::Extend.registry.resolve(key)
  if entry.dynamic_source &&
      self.class.ancestors.include?(Kiba::Extend::Jobs::DynamicJobable)
    return Kiba::Extend::Registry::DynamicSource.new(
      key: key, for_job: destination_key
    )
  end

  meth = Kiba::Extend.registry.method(:as_source)
  prep_file(meth, key, destination_key)
end

#sourcesObject

Since:

  • 2.2.0



93
94
95
96
97
# File 'lib/kiba/extend/jobs/dependency_handleable.rb', line 93

def sources
  @files[:source].map { |config| file_config(config) }
    .map { |src| "source #{src[:klass]}, **#{src[:args]}" }
    .join("\n")
end