Verified Commit 1cdf5deb authored by Hercules Merscher's avatar Hercules Merscher 🌴
Browse files

refactor: Renaming to active_experiences

parent c6126641
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -85,10 +85,11 @@ module Labkit
      end

      def find_current(experience_id)
        definition = registry[experience_id]
        data = Current.experiences[experience_id.to_s] || {}
        xp = Current.active_experiences[experience_id.to_s]
        return xp unless xp.nil?

        Experience.new(definition).rehydrate(data) if definition
        definition = registry[experience_id]
        Experience.new(definition) if definition
      end
    end
  end
+5 −5
Original line number Diff line number Diff line
@@ -13,20 +13,20 @@ module Labkit
    # store and access experiences throughout the request and background job lifecycle.
    #
    # Example usage:
    #   Labkit::CoveredExperience::Current.experiences << my_experience
    #   Labkit::CoveredExperience::Current.active_experiences << my_experience
    #   Labkit::CoveredExperience::Current.rehydrate("create_merge_request", "start_time" => "2025-08-22T10:02:15.237Z")
    class Current < ActiveSupport::CurrentAttributes
      AGGREGATION_KEY = 'labkit_covered_experiences'

      attribute :_experiences
      attribute :_active_experiences

      def experiences
        self._experiences ||= {}
      def active_experiences
        self._active_experiences ||= {}
      end

      def rehydrate(experience_id, **data)
        instance = Labkit::CoveredExperience.get(experience_id).rehydrate(data)
        experiences.merge!(instance.to_h)
        active_experiences[instance.id] = instance
        instance
      end
    end
+2 −2
Original line number Diff line number Diff line
@@ -80,7 +80,7 @@ module Labkit
        checkpoint_counter.increment(checkpoint: "start", **base_labels)
        log_event("start", **extra)

        Labkit::CoveredExperience::Current.experiences.merge!(to_h)
        Labkit::CoveredExperience::Current.active_experiences[id] = self

        return self unless block_given?

@@ -132,7 +132,7 @@ module Labkit
          total_counter.increment(error: has_error?, **base_labels)
          apdex_counter.increment(success: apdex_success?, **base_labels) unless has_error?
          log_event("end", **extra)
          Labkit::CoveredExperience::Current.experiences.delete(id)
          Labkit::CoveredExperience::Current.active_experiences.delete(id)
        end

        self
+3 −6
Original line number Diff line number Diff line
@@ -11,14 +11,11 @@ module Labkit
        # populates the job with them.
        class Client
          def call(worker_class, job, _queue, _redis_pool)
            Labkit::CoveredExperience::Current.experiences.each do |experience_id, data|
              Labkit::CoveredExperience
                .get(experience_id)
                .rehydrate(data)
                .checkpoint(checkpoint_action: "sidekiq_job_scheduled", worker: worker_class.to_s)
            data = Labkit::CoveredExperience::Current.active_experiences.inject({}) do |data, (_, xp)|
              xp.checkpoint(checkpoint_action: "sidekiq_job_scheduled", worker: worker_class.to_s)
              data.merge!(xp.to_h)
            end

            data = Labkit::CoveredExperience::Current.experiences
            job[Labkit::CoveredExperience::Current::AGGREGATION_KEY] = data unless data.empty?

            yield
+9 −10
Original line number Diff line number Diff line
@@ -13,7 +13,7 @@ RSpec.describe Labkit::CoveredExperience::Current do
  let(:experience_id) { definition.covered_experience }
  let(:experience_data) { { 'start_time' => '2023-01-01T12:00:00.000Z' } }

  it { expect(described_class.experiences).to be_a(Hash) }
  it { expect(described_class.active_experiences).to be_a(Hash) }

  describe '#rehydrate' do
    context 'when experience exists in registry' do
@@ -26,12 +26,13 @@ RSpec.describe Labkit::CoveredExperience::Current do
      end

      it 'adds the rehydrated experience to the experiences set' do
        expect(described_class.experiences).to be_empty
        expect(described_class.active_experiences).to be_empty

        result = described_class.rehydrate(experience_id, **experience_data)
        described_class.rehydrate(experience_id, **experience_data)

        expect(described_class.experiences).to include(result.to_h)
        expect(described_class.experiences.size).to eq(1)
        expect(described_class.active_experiences).to have_key(experience_id)
        expect(described_class.active_experiences[experience_id]).to be_a(Labkit::CoveredExperience::Experience)
        expect(described_class.active_experiences.size).to eq(1)
      end

      context 'when multiple experiences are rehydrated' do
@@ -61,10 +62,8 @@ RSpec.describe Labkit::CoveredExperience::Current do
          described_class.rehydrate(experience_id, **experience_data)
          described_class.rehydrate(second_experience_id, **second_experience_data)

          expect(described_class.experiences).to match(
            experience_id => experience_data,
            second_experience_id => second_experience_data
          )
          expect(described_class.active_experiences).to have_key(experience_id)
          expect(described_class.active_experiences).to have_key(second_experience_id)
        end
      end
    end
@@ -95,7 +94,7 @@ RSpec.describe Labkit::CoveredExperience::Current do
          result = described_class.rehydrate(nonexistent_experience_id, **experience_data)

          expect(result).to be(Labkit::CoveredExperience::Null.instance)
          expect(described_class.experiences).to be_empty
          expect(described_class.active_experiences).to have_key("null")
        end
      end
    end
Loading