From d1b6ce89fdc008359f9fd0ed080c3cfb28bd39b7 Mon Sep 17 00:00:00 2001 From: Marian13 Date: Mon, 27 Mar 2023 18:48:53 +0300 Subject: [PATCH] feat(core): introduce MiddlewareCreator --- .../entities/method_middlewares/entities.rb | 1 + .../entities/middleware_creator.rb | 52 ++++++++++++++++ .../entities/middleware_creator_spec.rb | 62 +++++++++++++++++++ 3 files changed, 115 insertions(+) create mode 100644 lib/convenient_service/core/entities/config/entities/method_middlewares/entities/middleware_creator.rb create mode 100644 spec/lib/convenient_service/core/entities/config/entities/method_middlewares/entities/middleware_creator_spec.rb diff --git a/lib/convenient_service/core/entities/config/entities/method_middlewares/entities.rb b/lib/convenient_service/core/entities/config/entities/method_middlewares/entities.rb index 40ba5194d9c..8c95e34df7c 100644 --- a/lib/convenient_service/core/entities/config/entities/method_middlewares/entities.rb +++ b/lib/convenient_service/core/entities/config/entities/method_middlewares/entities.rb @@ -3,5 +3,6 @@ require_relative "entities/caller" require_relative "entities/chain" require_relative "entities/container" +require_relative "entities/middleware_creator" require_relative "entities/middleware" require_relative "entities/stack" diff --git a/lib/convenient_service/core/entities/config/entities/method_middlewares/entities/middleware_creator.rb b/lib/convenient_service/core/entities/config/entities/method_middlewares/entities/middleware_creator.rb new file mode 100644 index 00000000000..70907f003d8 --- /dev/null +++ b/lib/convenient_service/core/entities/config/entities/method_middlewares/entities/middleware_creator.rb @@ -0,0 +1,52 @@ +# frozen_string_literal: true + +module ConvenientService + module Core + module Entities + class Config + module Entities + class MethodMiddlewares + module Entities + class MiddlewareCreator + ## + # @!attribute [r] middleware + # @return [Class] + # + attr_reader :middleware + + ## + # @!attribute [r] arguments + # @return [ConvenientService::Support::Arguments] + # + attr_reader :arguments + + ## + # @param middleware [Class] + # @param arguments [ConvenientService::Support::Arguments] + # @return [void] + # + def initialize(middleware:, arguments:) + @middleware = middleware + @arguments = arguments + end + + ## + # @param other [Object] + # @return [Boolean, nil] + # + def ==(other) + return unless other.instance_of?(self.class) + + return false if middleware != other.middleware + return false if arguments != other.arguments + + true + end + end + end + end + end + end + end + end +end diff --git a/spec/lib/convenient_service/core/entities/config/entities/method_middlewares/entities/middleware_creator_spec.rb b/spec/lib/convenient_service/core/entities/config/entities/method_middlewares/entities/middleware_creator_spec.rb new file mode 100644 index 00000000000..e83dfd9b8d9 --- /dev/null +++ b/spec/lib/convenient_service/core/entities/config/entities/method_middlewares/entities/middleware_creator_spec.rb @@ -0,0 +1,62 @@ +# frozen_string_literal: true + +require "spec_helper" + +require "convenient_service" + +# rubocop:disable RSpec/NestedGroups +RSpec.describe ConvenientService::Core::Entities::Config::Entities::MethodMiddlewares::Entities::MiddlewareCreator do + include ConvenientService::RSpec::Matchers::DelegateTo + + let(:middleware_creator) { described_class.new(middleware: middleware, arguments: arguments) } + let(:middleware) { Class.new(ConvenientService::Core::Entities::Config::Entities::MethodMiddlewares::Entities::Middleware) } + let(:arguments) { ConvenientService::Support::Arguments.new(:foo, foo: :bar) { :foo } } + + example_group "attributes" do + include ConvenientService::RSpec::Matchers::HaveAttrReader + + subject { middleware_creator } + + it { is_expected.to have_attr_reader(:middleware) } + it { is_expected.to have_attr_reader(:arguments) } + end + + example_group "instance methods" do + example_group "comparison" do + describe "#==" do + context "when `other` has different class" do + let(:other) { 42 } + + it "returns `nil`" do + expect(middleware_creator == other).to be_nil + end + end + + context "when `other` has different `middleware`" do + let(:other) { described_class.new(middleware: Class.new(ConvenientService::Core::Entities::Config::Entities::MethodMiddlewares::Entities::Middleware), arguments: arguments) } + + it "returns `false`" do + expect(middleware_creator == other).to eq(false) + end + end + + context "when `other` has different `arguments`" do + let(:other) { described_class.new(middleware: middleware, arguments: ConvenientService::Support::Arguments.null_arguments) } + + it "returns `false`" do + expect(middleware_creator == other).to eq(false) + end + end + + context "when `other` has same attributes" do + let(:other) { described_class.new(middleware: middleware, arguments: arguments) } + + it "returns `true`" do + expect(middleware_creator == other).to eq(true) + end + end + end + end + end +end +# rubocop:enable RSpec/NestedGroups