Class: Remi::Job::Parameters

Inherits:
Object
  • Object
show all
Defined in:
lib/remi/job/parameters.rb

Overview

A job parameter adds flexiblity to defining job templates. An instance of Parameters contains a collection of parameters that are evaluatin in the context of a job. It functions very similarly to Rspec's #let, in that in can be defined using a block of code that is only evaluated the first time it is used, and cached for later use.

Parameters should only be used in the context of a job.

Examples:

class MyJob < Remi::Job
  param(:my_param) { 'some parameter' }
  param :my_calculated_param do
    1.upto(1000).size
  end

  transform :something do
    puts "my_param is #{job.params[:my_param]}"
    puts "my_calculated_param is #{job.params[:my_calculated_param]}"
  end
end

job1 = MyJob.new
job1.execute
#=> my_param is some parameter
#=> my_calculated_param is 1000

job2 = MyJob.new
job2.params[:my_param] = 'override'
job2.execute
#=> my_param is override
#=> my_calculated_param is 1000

job3 = MyJob.new(my_param: 'constructor override', my_calculated_param: 322)
job3.execute
#=> my_param is constructor override
#=> my_calculated_param is 322

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(context = nil) ⇒ Parameters



40
41
42
43
# File 'lib/remi/job/parameters.rb', line 40

def initialize(context=nil)
  @context = context
  @params = {}
end

Instance Attribute Details

#contextObject



46
47
48
# File 'lib/remi/job/parameters.rb', line 46

def context
  @context
end

Instance Method Details

#[](name) ⇒ Object

Get the value of a parameter

Raises:

  • (ArgumentError)


53
54
55
56
# File 'lib/remi/job/parameters.rb', line 53

def [](name)
  return send(name) if respond_to?(name)
  raise ArgumentError, "Job parameter #{name} is not defined"
end

#[]=(name, value) ⇒ Object

Set the value of a parameter



65
66
67
68
# File 'lib/remi/job/parameters.rb', line 65

def []=(name, value)
  __define__(name) { value } unless respond_to? name
  @params[name] = value
end

#__define__(name, &block) ⇒ Object



82
83
84
85
86
87
# File 'lib/remi/job/parameters.rb', line 82

def __define__(name, &block)
  @params[name] = nil
  define_singleton_method name do
    @params[name] ||= Remi::Dsl.dsl_return(self, @context, &block)
  end
end

#cloneJob::Parameters



76
77
78
79
80
# File 'lib/remi/job/parameters.rb', line 76

def clone
  the_clone = super
  the_clone.instance_variable_set(:@params, @params.dup)
  the_clone
end

#to_hHash



71
72
73
# File 'lib/remi/job/parameters.rb', line 71

def to_h
  @params
end