Module: Pbt::Check::RSpecAdapter::PropertyExtension

Defined in:
lib/pbt/check/rspec_adapter/property_extension.rb

Instance Method Summary collapse

Instance Method Details

#run_in_ractor(val) ⇒ Ractor

Run the predicate with the generated ‘val`. This overrides the original `Property#run_in_ractor`.

Parameters:

  • val (Object)

Returns:

  • (Ractor)


31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/pbt/check/rspec_adapter/property_extension.rb', line 31

def run_in_ractor(val)
  Ractor.new(@class_name, @method_name, @predicate.parameters.size, val) do |class_name, method_name, param_size, val|
    klass = RSpecAdapter.const_get(class_name)
    if val.is_a?(Hash)
      klass.new.send(method_name, **val)
    elsif param_size >= 2
      klass.new.send(method_name, *val)
    else
      klass.new.send(method_name, val)
    end
  end
end

#setup_rspec_integrationvoid

This method returns an undefined value.

Define an original class to be called in Ractor.



11
12
13
14
15
16
17
# File 'lib/pbt/check/rspec_adapter/property_extension.rb', line 11

def setup_rspec_integration
  filepath, line = @predicate.source_location
  basename = File.basename(filepath, ".rb")
  @class_name = "Test" + basename.split("_").map(&:capitalize).join + line.to_s
  @method_name = "predicate_#{basename}_#{line}"
  define_ractor_callable_class
end

#teardown_rspec_integrationvoid

This method returns an undefined value.

Clean up an original class to be called in Ractor to avoid any persisted namespace pollution.



22
23
24
# File 'lib/pbt/check/rspec_adapter/property_extension.rb', line 22

def teardown_rspec_integration
  RSpecAdapter.__send__(:remove_const, @class_name) if RSpecAdapter.const_defined?(@class_name)
end