Sha256: c118a553c7cd90cf004c40762e2e0c2d15c05c2d833f1d7978628a5428e23efe

Contents?: true

Size: 988 Bytes

Versions: 3

Compression:

Stored size: 988 Bytes

Contents

class TestTrack::JobSession
  def manage
    raise ArgumentError, "must provide block to `manage`" unless block_given?

    original_job_session = RequestStore[:test_track_job_session]
    RequestStore[:test_track_job_session] = self
    yield
  ensure
    notify_unsynced_assignments!
    RequestStore[:test_track_job_session] = original_job_session
  end

  def visitor_dsl_for(identity)
    raise "must be called within `manage` block" if RequestStore[:test_track_job_session].nil?

    TestTrack::VisitorDSL.new(for_identity(identity))
  end

  private

  def for_identity(identity)
    identity_visitor_map[identity] ||= TestTrack::LazyVisitorByIdentity.new(identity)
  end

  def notify_unsynced_assignments!
    identity_visitor_map.each_value do |visitor|
      if visitor.loaded? && visitor.unsynced_assignments.present?
        TestTrack::ThreadedVisitorNotifier.new(visitor).notify
      end
    end
  end

  def identity_visitor_map
    @identity_visitor_map ||= {}
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
test_track_rails_client-4.0.0.alpha33 app/models/test_track/job_session.rb
test_track_rails_client-4.0.0.alpha32 app/models/test_track/job_session.rb
test_track_rails_client-4.0.0.alpha31 app/models/test_track/job_session.rb