From 5513b597ecf0ddec12540d711ecf26558b3114b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miros=C5=82aw=20Prag=C5=82owski?= Date: Wed, 2 Jul 2025 15:10:45 +0200 Subject: [PATCH] RubyEventStore configuration - a new way to handle upcoming features An attempt speedup releases by adding feature flags based on configuration defined. By using load_defaults dev will still be able to keep the RES behaviour as is, without changes and new installations will use new features hidden behind configuration flags. --- ruby_event_store/lib/ruby_event_store.rb | 1 + .../lib/ruby_event_store/configuration.rb | 26 +++++++++++++++++++ ruby_event_store/spec/configuration_spec.rb | 23 ++++++++++++++++ 3 files changed, 50 insertions(+) create mode 100644 ruby_event_store/lib/ruby_event_store/configuration.rb create mode 100644 ruby_event_store/spec/configuration_spec.rb diff --git a/ruby_event_store/lib/ruby_event_store.rb b/ruby_event_store/lib/ruby_event_store.rb index f57650bf2e..f7804ca979 100644 --- a/ruby_event_store/lib/ruby_event_store.rb +++ b/ruby_event_store/lib/ruby_event_store.rb @@ -1,5 +1,6 @@ # frozen_string_literal: true +require_relative "ruby_event_store/configuration" require_relative "ruby_event_store/dispatcher" require_relative "ruby_event_store/subscriptions" require_relative "ruby_event_store/broker" diff --git a/ruby_event_store/lib/ruby_event_store/configuration.rb b/ruby_event_store/lib/ruby_event_store/configuration.rb new file mode 100644 index 0000000000..53714e3006 --- /dev/null +++ b/ruby_event_store/lib/ruby_event_store/configuration.rb @@ -0,0 +1,26 @@ +module RubyEventStore + class Configuration + def initialize + load_defaults(VERSION) + end + + attr_reader :loaded_defaults + attr_accessor :test + + def load_defaults(version) + self.test = "2.17.0" <= version ? "new_value" : "current_value" + @loaded_defaults = version + self + end + end + + class << self + def configuration + @configuration ||= Configuration.new + end + + def configure + yield(configuration) + end + end +end diff --git a/ruby_event_store/spec/configuration_spec.rb b/ruby_event_store/spec/configuration_spec.rb new file mode 100644 index 0000000000..19a0e9c742 --- /dev/null +++ b/ruby_event_store/spec/configuration_spec.rb @@ -0,0 +1,23 @@ +require "spec_helper" +require "ruby_event_store/configuration" + +module RubyEventStore + ::RSpec.describe Configuration do + specify { expect(RubyEventStore::Configuration.new.load_defaults("2.17.0").loaded_defaults).to eq("2.17.0") } + specify { expect(RubyEventStore::Configuration.new.loaded_defaults).to eq(RubyEventStore::VERSION) } + specify { expect(RubyEventStore::Configuration.new.test).to eq("current_value") } + specify { expect(RubyEventStore::Configuration.new.load_defaults("1.0.0").test).to eq("current_value") } + specify { expect(RubyEventStore::Configuration.new.load_defaults("2.17.0").test).to eq("new_value") } + specify { expect(RubyEventStore::Configuration.new.load_defaults("2.20.0").test).to eq("new_value") } + + specify { expect(RubyEventStore.configuration).to be_a(RubyEventStore::Configuration) } + specify do + RubyEventStore.configure do |config| + config.load_defaults("2.0.0") + config.test = "another_value" + end + expect(RubyEventStore.configuration.loaded_defaults).to eq("2.0.0") + expect(RubyEventStore.configuration.test).to eq("another_value") + end + end +end