class CrossSpec::Spec

Public Class Methods

trace(&block) click to toggle source
# File lib/cross_spec/spec.rb, line 48
def self.trace(&block)
  spec = new
  DistributedTracing.trace do
    spec.instance_eval(&block)
  end
end

Public Instance Methods

async(service:, data: nil) click to toggle source
# File lib/cross_spec/spec.rb, line 55
def async(service:, data: nil)
  DistributedTracing.trace do
    str = JSON.dump(
      service: service,
      biomarkers: DistributedTracing.get,
      data: data
    )
    CrossSpec.broadcast(str)
  end
  nil
end
await(tasks:, options: {}, &block) click to toggle source
# File lib/cross_spec/spec.rb, line 72
def await(tasks:, options: {}, &block)
  combined = { timeout: 5 }.merge(options)
  waiting = SpecWaiting.new(tasks)
  ::Timeout::timeout(combined[:timeout]) do
    CrossSpec.listen! do |message|
      waiting.process(message, &block)
      return waiting.data.length == 1 ? waiting.data.first : waiting.data if waiting.done?
      nil # nil keeps blocking listen!
    end
  end
end
sync(service:, data: nil, tasks:, options: {}, &block) click to toggle source
# File lib/cross_spec/spec.rb, line 67
def sync(service:, data: nil, tasks:, options: {}, &block)
  async(service: service, data: data)
  await(tasks: tasks, options: options, &block)
end