class Bricolage::JobClass

Constants

CLASSES
LOAD_PATHES

Attributes

id[R]

Public Class Methods

add_load_path(path) click to toggle source
# File lib/bricolage/jobclass.rb, line 22
def JobClass.add_load_path(path)
  LOAD_PATHES.push path
end
define(id, &block) click to toggle source
# File lib/bricolage/jobclass.rb, line 12
def JobClass.define(id, &block)
  id = id.to_s
  raise FatalError, "duplicated job class: #{@id.inspect}" if CLASSES[id]
  c = new(id)
  c.instance_exec(c, &block)
  CLASSES[id] = c
end
each(&block) click to toggle source
# File lib/bricolage/jobclass.rb, line 57
def JobClass.each(&block)
  CLASSES.each_value(&block)
end
get(id) click to toggle source
# File lib/bricolage/jobclass.rb, line 37
def JobClass.get(id)
  unless CLASSES[id.to_s]
    begin
      path = LOAD_PATHES.map {|prefix| prefix + "#{id}.rb" }.detect(&:exist?)
      raise ParameterError, "no such job class: #{id}" unless path
      ::Bricolage.module_eval File.read(path), path.to_path, 1
    rescue SystemCallError => err
      raise FatalError, "could not load job class: #{id}: #{err.message}"
    end
    raise FatalError, "job class file loaded but required job class is not defined: #{id}" unless CLASSES[id.to_s]
  end
  CLASSES[id.to_s]
end
list() click to toggle source
# File lib/bricolage/jobclass.rb, line 51
def JobClass.list
  LOAD_PATHES.map {|dir|
    Dir.glob("#{dir}/*.rb").map {|path| File.basename(path, '.rb') }
  }.flatten.uniq.sort
end
load_path_for_lib_file(path) click to toggle source
# File lib/bricolage/jobclass.rb, line 30
def JobClass.load_path_for_lib_file(path)
  srcdir = Pathname(path).realpath.parent.parent.parent.cleanpath
  srcdir + 'jobclass'
end
new(id) click to toggle source
# File lib/bricolage/jobclass.rb, line 61
def initialize(id)
  @id = id
  @parameters = nil
  @parameters_filter = nil   # optional
  @declarations = nil
  @script = nil
end
primary_load_path() click to toggle source
# File lib/bricolage/jobclass.rb, line 26
def JobClass.primary_load_path
  load_path_for_lib_file(__FILE__)
end

Public Instance Methods

declarations(&block) click to toggle source
# File lib/bricolage/jobclass.rb, line 93
def declarations(&block)
  @declarations = block
end
get_declarations(params) click to toggle source
# File lib/bricolage/jobclass.rb, line 97
def get_declarations(params)
  @declarations ? @declarations.call(params) : Declarations.new
end
get_parameters() click to toggle source
# File lib/bricolage/jobclass.rb, line 79
def get_parameters
  Parameters::Declarations.new.tap {|params|
    @parameters.call(params)
  }
end
get_script(params) click to toggle source
# File lib/bricolage/jobclass.rb, line 105
def get_script(params)
  Script.new.tap {|script|
    @script.call(params, script)
  }
end
inspect() click to toggle source
# File lib/bricolage/jobclass.rb, line 71
def inspect
  "\#<#{self.class} #{@id}>"
end
invoke_parameters_filter(job) click to toggle source
# File lib/bricolage/jobclass.rb, line 89
def invoke_parameters_filter(job)
  @parameters_filter.call(job) if @parameters_filter
end
parameters(&block) click to toggle source
# File lib/bricolage/jobclass.rb, line 75
def parameters(&block)
  @parameters = block
end
parameters_filter(&block) click to toggle source
# File lib/bricolage/jobclass.rb, line 85
def parameters_filter(&block)
  @parameters_filter = block
end
script(&block) click to toggle source
# File lib/bricolage/jobclass.rb, line 101
def script(&block)
  @script = block
end