Verified Commit 4a221fd4 authored by Hercules Merscher's avatar Hercules Merscher 🌴
Browse files

refactor: Definition data object

The Definition data object will be used to store and share experience
definitions. The Experience object will build on top of Definition,
on MR !158
to actually contain the runnable definition that can be started, resumed, and
ended.
parent 7a9aee76
Loading
Loading
Loading
Loading
+0 −11
Original line number Diff line number Diff line
# frozen_string_literal: true

module Labkit
  module CoveredExperience
    Experience = Struct.new("Experience", :id, :description, :feature_category, :urgency) do
      def initialize(id:, description:, feature_category:, urgency:)
        super(id.freeze, description.freeze, feature_category.freeze, urgency.freeze)
      end
    end
  end
end
+3 −2
Original line number Diff line number Diff line
@@ -5,10 +5,11 @@ require 'json-schema'
require 'pathname'
require 'yaml'
require 'labkit/logging/json_logger'
require 'labkit/covered_experience/experience'

module Labkit
  module CoveredExperience
    Definition = Data.define(:id, :description, :feature_category, :urgency)

    class Registry
      extend Forwardable

@@ -78,7 +79,7 @@ module Labkit
        return nil unless content.is_a?(Hash)

        errors = JSON::Validator.fully_validate(schema, content)
        return Experience.new(id: experience_id, **content.transform_keys(&:to_sym)) if errors.empty?
        return Definition.new(id: experience_id, **content) if errors.empty?

        warn("Invalid schema for #{file_path}")

+6 −11
Original line number Diff line number Diff line
@@ -4,7 +4,6 @@ require 'spec_helper'
require 'tmpdir'
require 'fileutils'
require 'labkit/covered_experience/registry'
require 'labkit/covered_experience/experience'

RSpec.describe Labkit::CoveredExperience::Registry do
  let(:temp_dir) { Dir.mktmpdir }
@@ -39,13 +38,13 @@ RSpec.describe Labkit::CoveredExperience::Registry do
      it 'load definitions' do
        registry = described_class.new(dir: covered_experiences_dir)

        expect(registry[:merge_request_creation]).to eq Labkit::CoveredExperience::Experience.new(
        expect(registry[:merge_request_creation]).to eq Labkit::CoveredExperience::Definition.new(
          id: "merge_request_creation",
          description: 'Creating a new merge request in a project',
          feature_category: 'source_code_management',
          urgency: 'sync_fast'
        )
        expect(registry[:issue_creation]).to eq Labkit::CoveredExperience::Experience.new(
        expect(registry[:issue_creation]).to eq Labkit::CoveredExperience::Definition.new(
          id: 'issue_creation',
          description: 'Creating a new issue in a project',
          feature_category: 'team_planning',
@@ -56,11 +55,7 @@ RSpec.describe Labkit::CoveredExperience::Registry do
      it 'freezes the stored data' do
        registry = described_class.new(dir: covered_experiences_dir)

        experience = registry['merge_request_creation']
        expect(experience.id).to be_frozen
        expect(experience.description).to be_frozen
        expect(experience.feature_category).to be_frozen
        expect(experience.urgency).to be_frozen
        expect(registry['merge_request_creation']).to be_frozen
      end

      it 'handles .yml extension' do
@@ -70,7 +65,7 @@ RSpec.describe Labkit::CoveredExperience::Registry do
        registry = described_class.new(dir: covered_experiences_dir)

        expect(registry[:yaml_test]).to be_nil
        expect(registry[:yml_test]).to be_a(Labkit::CoveredExperience::Experience)
        expect(registry[:yml_test]).to be_a(Labkit::CoveredExperience::Definition)
      end
    end

@@ -88,7 +83,7 @@ RSpec.describe Labkit::CoveredExperience::Registry do
      it 'expands relative paths from current working directory' do
        registry = described_class.new(dir: relative_dir)

        expect(registry[:merge_request_creation]).to be_a(Labkit::CoveredExperience::Experience)
        expect(registry[:merge_request_creation]).to be_a(Labkit::CoveredExperience::Definition)
      end
    end

@@ -98,7 +93,7 @@ RSpec.describe Labkit::CoveredExperience::Registry do

        registry = described_class.new(dir: covered_experiences_dir)

        expect(registry[:absolute_test]).to be_a(Labkit::CoveredExperience::Experience)
        expect(registry[:absolute_test]).to be_a(Labkit::CoveredExperience::Definition)
      end
    end