Module: Crspec::Rails::Parallel

Defined in:
lib/crspec/rails/parallel.rb

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.enabledObject

Returns the value of attribute enabled.



9
10
11
# File 'lib/crspec/rails/parallel.rb', line 9

def enabled
  @enabled
end

.setup_blocksObject

Returns the value of attribute setup_blocks.



9
10
11
# File 'lib/crspec/rails/parallel.rb', line 9

def setup_blocks
  @setup_blocks
end

.teardown_blocksObject

Returns the value of attribute teardown_blocks.



9
10
11
# File 'lib/crspec/rails/parallel.rb', line 9

def teardown_blocks
  @teardown_blocks
end

.worker_countObject

Returns the value of attribute worker_count.



9
10
11
# File 'lib/crspec/rails/parallel.rb', line 9

def worker_count
  @worker_count
end

Class Method Details

.enabled?Boolean

Returns:

  • (Boolean)


30
31
32
# File 'lib/crspec/rails/parallel.rb', line 30

def enabled?
  !!@enabled
end

.parallelize(workers: :number_of_processors, &block) ⇒ Object



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/crspec/rails/parallel.rb', line 11

def parallelize(workers: :number_of_processors, &block)
  count = case workers
          when :number_of_processors
            Etc.nprocessors
          when Integer
            workers
          else
            Etc.nprocessors
          end
  @worker_count = count
  @enabled = true
  @setup_blocks ||= []
  @teardown_blocks ||= []

  return unless block_given?

  instance_eval(&block)
end

.parallelize_setup(&block) ⇒ Object



34
35
36
37
# File 'lib/crspec/rails/parallel.rb', line 34

def parallelize_setup(&block)
  @setup_blocks ||= []
  @setup_blocks << block
end

.parallelize_teardown(&block) ⇒ Object



39
40
41
42
# File 'lib/crspec/rails/parallel.rb', line 39

def parallelize_teardown(&block)
  @teardown_blocks ||= []
  @teardown_blocks << block
end

.reset!Object



68
69
70
71
72
73
# File 'lib/crspec/rails/parallel.rb', line 68

def reset!
  @enabled = false
  @worker_count = nil
  @setup_blocks = []
  @teardown_blocks = []
end

.setup_worker(worker_number) ⇒ Object



44
45
46
47
48
49
50
51
52
53
54
# File 'lib/crspec/rails/parallel.rb', line 44

def setup_worker(worker_number)
  env_num = worker_number == 1 ? "" : worker_number.to_s
  ENV["TEST_ENV_NUMBER"] = env_num
  ENV["PARALLEL_WORKERS"] = (@worker_count || Etc.nprocessors).to_s

  if defined?(ActiveRecord::Base) && ActiveRecord::Base.respond_to?(:connection_db_config)
    setup_active_record_db(worker_number)
  end

  @setup_blocks&.each { |b| b.call(worker_number) }
end

.teardown_worker(worker_number) ⇒ Object



56
57
58
59
60
61
62
63
64
65
66
# File 'lib/crspec/rails/parallel.rb', line 56

def teardown_worker(worker_number)
  @teardown_blocks&.each { |b| b.call(worker_number) }

  return unless defined?(ActiveRecord::Base) && ActiveRecord::Base.respond_to?(:connection_handler)

  begin
    ActiveRecord::Base.connection_handler.clear_all_connections!
  rescue StandardError
    nil
  end
end