Class: Scripterator::Runner

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Defined in:
lib/scripterator/runner.rb

Instance Method Summary collapse

Constructor Details

#initialize(description, &config_block) ⇒ Runner

Returns a new instance of Runner.



11
12
13
14
15
16
17
# File 'lib/scripterator/runner.rb', line 11

def initialize(description, &config_block)
  @script_description = description

  self.instance_eval(&config_block) if config_block

  @model ||= Proc.new { eval("#{@inferred_model_name}") } # constantize
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method_name, *args, &block) ⇒ Object



44
45
46
47
48
49
50
51
# File 'lib/scripterator/runner.rb', line 44

def method_missing(method_name, *args, &block)
  if model_name = /for_each_(.+)/.match(method_name)[1]
    @per_record          = block
    @inferred_model_name = model_name.split('_').map(&:capitalize).join
  else
    super
  end
end

Instance Method Details

#run(options = {}) ⇒ Object



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/scripterator/runner.rb', line 19

def run(options = {})
  unless (options[:start_id] || options[:end_id]) || options[:id_list]
    raise 'You must provide either a start ID or end ID, or a comma-delimited id list'
  end
  @id_list          = options[:id_list] || []
  @start_id         = options[:start_id] || 1
  @end_id           = options[:end_id]
  @batch_size       = options[:batch_size] || 1000
  @redis_expiration = options[:redis_expiration]
  @output_stream    = options[:output_stream] || $stdout

  raise 'No per_record code defined' unless @per_record

  output_init_details
  init_vars
  run_blocks
  output_stats
end