Sha256: 92dd4c43ea4c9cec297491d6f7d712b18889d8f0cb38b9593b7138712920e286

Contents?: true

Size: 929 Bytes

Versions: 4

Compression:

Stored size: 929 Bytes

Contents

class TestTrack::IdentitySessionDiscriminator
  attr_reader :identity

  def initialize(identity)
    @identity = identity
  end

  def with_visitor
    raise ArgumentError, "must provide block to `with_visitor`" unless block_given?

    if matching_identity?
      yield session.visitor_dsl
    else
      TestTrack::OfflineSession.with_visitor_for(identity.test_track_identifier_type, identity.test_track_identifier_value) do |v|
        yield v
      end
    end
  end

  def with_session
    raise ArgumentError, "must provide block to `with_session`" unless block_given?

    if web_context?
      yield session
    else
      raise "#with_session called outside of web context"
    end
  end

  private

  def matching_identity?
    session.present? && session.has_matching_identity?(identity)
  end

  def web_context?
    session.present?
  end

  def session
    @session ||= RequestStore[:test_track_session]
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
test_track_rails_client-3.0.1 app/models/test_track/identity_session_discriminator.rb
test_track_rails_client-3.0.0 app/models/test_track/identity_session_discriminator.rb
test_track_rails_client-2.0.0 app/models/test_track/identity_session_discriminator.rb
test_track_rails_client-1.3.0 app/models/test_track/identity_session_discriminator.rb