diff --git a/lib/convenient_service/configs/awesome_print_inspect.rb b/lib/convenient_service/configs/awesome_print_inspect.rb index 9a823a3e6b..620e141e84 100644 --- a/lib/convenient_service/configs/awesome_print_inspect.rb +++ b/lib/convenient_service/configs/awesome_print_inspect.rb @@ -2,9 +2,6 @@ module ConvenientService module Configs - ## - # TODO: Complete. - # module AwesomePrintInspect include Support::Concern @@ -36,12 +33,12 @@ class self::Message end end - # class self::Code - # concerns do - # replace HasInspect::Concern, HasAwesomePrintInspect::Concern - # end - # end - # + class self::Code + concerns do + replace Plugins::Code::HasInspect::Concern, Plugins::Code::HasAwesomePrintInspect::Concern + end + end + class self::Status concerns do replace Plugins::Status::HasInspect::Concern, Plugins::Status::HasAwesomePrintInspect::Concern diff --git a/lib/convenient_service/configs/minimal.rb b/lib/convenient_service/configs/minimal.rb index 9505cd00f8..ec5d5afa82 100644 --- a/lib/convenient_service/configs/minimal.rb +++ b/lib/convenient_service/configs/minimal.rb @@ -165,6 +165,10 @@ class self::Message class self::Code include Core + + concerns do + use Plugins::Code::HasInspect::Concern + end end class self::Status diff --git a/lib/convenient_service/dependencies.rb b/lib/convenient_service/dependencies.rb index 3215c8599f..a99761fa3c 100644 --- a/lib/convenient_service/dependencies.rb +++ b/lib/convenient_service/dependencies.rb @@ -70,6 +70,7 @@ def require_awesome_print_inspect require_relative "service/plugins/has_result/entities/result/plugins/has_j_send_status_and_attributes/entities/data/plugins/has_awesome_print_inspect" require_relative "service/plugins/has_result/entities/result/plugins/has_j_send_status_and_attributes/entities/message/plugins/has_awesome_print_inspect" require_relative "service/plugins/has_result/entities/result/plugins/has_j_send_status_and_attributes/entities/status/plugins/has_awesome_print_inspect" + require_relative "service/plugins/has_result/entities/result/plugins/has_j_send_status_and_attributes/entities/code/plugins/has_awesome_print_inspect" require_relative "service/plugins/can_have_steps/entities/step/plugins/has_awesome_print_inspect" require_relative "configs/awesome_print_inspect" require_relative "configs/awesome_print_inspect/aliases" diff --git a/lib/convenient_service/service/plugins/has_result/entities/result/plugins/has_j_send_status_and_attributes/entities/code.rb b/lib/convenient_service/service/plugins/has_result/entities/result/plugins/has_j_send_status_and_attributes/entities/code.rb index e985b01ab6..771edd2d0f 100644 --- a/lib/convenient_service/service/plugins/has_result/entities/result/plugins/has_j_send_status_and_attributes/entities/code.rb +++ b/lib/convenient_service/service/plugins/has_result/entities/result/plugins/has_j_send_status_and_attributes/entities/code.rb @@ -2,6 +2,7 @@ require_relative "code/commands" require_relative "code/concern" +require_relative "code/plugins" module ConvenientService module Service diff --git a/lib/convenient_service/service/plugins/has_result/entities/result/plugins/has_j_send_status_and_attributes/entities/code/plugins.rb b/lib/convenient_service/service/plugins/has_result/entities/result/plugins/has_j_send_status_and_attributes/entities/code/plugins.rb new file mode 100644 index 0000000000..22fac033ab --- /dev/null +++ b/lib/convenient_service/service/plugins/has_result/entities/result/plugins/has_j_send_status_and_attributes/entities/code/plugins.rb @@ -0,0 +1,5 @@ +# frozen_string_literal: true + +require_relative "plugins/has_inspect" + +require_relative "plugins/aliases" diff --git a/lib/convenient_service/service/plugins/has_result/entities/result/plugins/has_j_send_status_and_attributes/entities/code/plugins/aliases.rb b/lib/convenient_service/service/plugins/has_result/entities/result/plugins/has_j_send_status_and_attributes/entities/code/plugins/aliases.rb new file mode 100644 index 0000000000..9479a69870 --- /dev/null +++ b/lib/convenient_service/service/plugins/has_result/entities/result/plugins/has_j_send_status_and_attributes/entities/code/plugins/aliases.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +module ConvenientService + module Plugins + Code = ::ConvenientService::Service::Plugins::HasResult::Entities::Result::Plugins::HasJSendStatusAndAttributes::Entities::Code::Plugins + end +end diff --git a/lib/convenient_service/service/plugins/has_result/entities/result/plugins/has_j_send_status_and_attributes/entities/code/plugins/has_awesome_print_inspect.rb b/lib/convenient_service/service/plugins/has_result/entities/result/plugins/has_j_send_status_and_attributes/entities/code/plugins/has_awesome_print_inspect.rb new file mode 100644 index 0000000000..a5f31c87ef --- /dev/null +++ b/lib/convenient_service/service/plugins/has_result/entities/result/plugins/has_j_send_status_and_attributes/entities/code/plugins/has_awesome_print_inspect.rb @@ -0,0 +1,3 @@ +# frozen_string_literal: true + +require_relative "has_awesome_print_inspect/concern" diff --git a/lib/convenient_service/service/plugins/has_result/entities/result/plugins/has_j_send_status_and_attributes/entities/code/plugins/has_awesome_print_inspect/concern.rb b/lib/convenient_service/service/plugins/has_result/entities/result/plugins/has_j_send_status_and_attributes/entities/code/plugins/has_awesome_print_inspect/concern.rb new file mode 100644 index 0000000000..0c657c6a80 --- /dev/null +++ b/lib/convenient_service/service/plugins/has_result/entities/result/plugins/has_j_send_status_and_attributes/entities/code/plugins/has_awesome_print_inspect/concern.rb @@ -0,0 +1,46 @@ +# frozen_string_literal: true + +module ConvenientService + module Service + module Plugins + module HasResult + module Entities + class Result + module Plugins + module HasJSendStatusAndAttributes + module Entities + class Code + module Plugins + module HasAwesomePrintInspect + module Concern + include Support::Concern + + instance_methods do + ## + # @return [String] + # + def inspect + metadata = { + ConvenientService: { + entity: "Code", + result: result.class.name, + value: to_sym + } + } + + metadata.ai + end + end + end + end + end + end + end + end + end + end + end + end + end + end +end diff --git a/lib/convenient_service/service/plugins/has_result/entities/result/plugins/has_j_send_status_and_attributes/entities/code/plugins/has_inspect.rb b/lib/convenient_service/service/plugins/has_result/entities/result/plugins/has_j_send_status_and_attributes/entities/code/plugins/has_inspect.rb new file mode 100644 index 0000000000..96a3682579 --- /dev/null +++ b/lib/convenient_service/service/plugins/has_result/entities/result/plugins/has_j_send_status_and_attributes/entities/code/plugins/has_inspect.rb @@ -0,0 +1,3 @@ +# frozen_string_literal: true + +require_relative "has_inspect/concern" diff --git a/lib/convenient_service/service/plugins/has_result/entities/result/plugins/has_j_send_status_and_attributes/entities/code/plugins/has_inspect/concern.rb b/lib/convenient_service/service/plugins/has_result/entities/result/plugins/has_j_send_status_and_attributes/entities/code/plugins/has_inspect/concern.rb new file mode 100644 index 0000000000..afc14ed1b1 --- /dev/null +++ b/lib/convenient_service/service/plugins/has_result/entities/result/plugins/has_j_send_status_and_attributes/entities/code/plugins/has_inspect/concern.rb @@ -0,0 +1,38 @@ +# frozen_string_literal: true + +module ConvenientService + module Service + module Plugins + module HasResult + module Entities + class Result + module Plugins + module HasJSendStatusAndAttributes + module Entities + class Code + module Plugins + module HasInspect + module Concern + include Support::Concern + + instance_methods do + ## + # @return [String] + # + def inspect + "<#{self.class} value: :#{value}>" + end + end + end + end + end + end + end + end + end + end + end + end + end + end +end diff --git a/spec/lib/convenient_service/configs/awesome_print_inspect_spec.rb b/spec/lib/convenient_service/configs/awesome_print_inspect_spec.rb index 1d27eda7b5..6e641c60f6 100644 --- a/spec/lib/convenient_service/configs/awesome_print_inspect_spec.rb +++ b/spec/lib/convenient_service/configs/awesome_print_inspect_spec.rb @@ -73,17 +73,17 @@ end end - # example_group "service result code" do - # example_group "concerns" do - # it "removes `HasInspect::Concern` from service concerns" do - # expect(service_class.::Result::Code.concerns.to_a).not_to include(HasInspect::Concern) - # end - # - # it "adds `HasAwesomeInspect::Concern` from service concerns" do - # expect(service_class.::Result::Code.concerns.to_a).to include(HasAwesomeInspect::Concern) - # end - # end - # end + example_group "service result code" do + example_group "concerns" do + it "removes `ConvenientService::Service::Plugins::HasResult::Entities::Result::Plugins::HasJSendStatusAndAttributes::Entities::Code::Plugins::HasInspect::Concern` from service concerns" do + expect(service_class::Result::Code.concerns.to_a).not_to include(ConvenientService::Service::Plugins::HasResult::Entities::Result::Plugins::HasJSendStatusAndAttributes::Entities::Code::Plugins::HasInspect::Concern) + end + + it "adds `ConvenientService::Service::Plugins::HasResult::Entities::Result::Plugins::HasJSendStatusAndAttributes::Entities::Code::Plugins::HasAwesomePrintInspect::Concern` from service concerns" do + expect(service_class::Result::Code.concerns.to_a).to include(ConvenientService::Service::Plugins::HasResult::Entities::Result::Plugins::HasJSendStatusAndAttributes::Entities::Code::Plugins::HasAwesomePrintInspect::Concern) + end + end + end example_group "service result status" do example_group "concerns" do diff --git a/spec/lib/convenient_service/configs/minimal_spec.rb b/spec/lib/convenient_service/configs/minimal_spec.rb index 4ca700331a..a221509cf9 100644 --- a/spec/lib/convenient_service/configs/minimal_spec.rb +++ b/spec/lib/convenient_service/configs/minimal_spec.rb @@ -348,7 +348,11 @@ example_group "service result code" do example_group "concerns" do - let(:concerns) { [] } + let(:concerns) do + [ + ConvenientService::Service::Plugins::HasResult::Entities::Result::Plugins::HasJSendStatusAndAttributes::Entities::Code::Plugins::HasInspect::Concern + ] + end it "sets service result code concerns" do expect(service_class::Result::Code.concerns.to_a).to eq(concerns) diff --git a/spec/lib/convenient_service/configs/standard_spec.rb b/spec/lib/convenient_service/configs/standard_spec.rb index bb0da89193..4cc45ecfe0 100644 --- a/spec/lib/convenient_service/configs/standard_spec.rb +++ b/spec/lib/convenient_service/configs/standard_spec.rb @@ -390,7 +390,11 @@ example_group "service result code" do example_group "concerns" do - let(:concerns) { [] } + let(:concerns) do + [ + ConvenientService::Service::Plugins::HasResult::Entities::Result::Plugins::HasJSendStatusAndAttributes::Entities::Code::Plugins::HasInspect::Concern + ] + end it "sets service result code concerns" do expect(service_class::Result::Code.concerns.to_a).to eq(concerns) diff --git a/spec/lib/convenient_service/examples/dry/gemfile/dry_service/config_spec.rb b/spec/lib/convenient_service/examples/dry/gemfile/dry_service/config_spec.rb index 08e5886f89..3101131a07 100644 --- a/spec/lib/convenient_service/examples/dry/gemfile/dry_service/config_spec.rb +++ b/spec/lib/convenient_service/examples/dry/gemfile/dry_service/config_spec.rb @@ -394,7 +394,11 @@ example_group "service result code" do example_group "concerns" do - let(:concerns) { [] } + let(:concerns) do + [ + ConvenientService::Service::Plugins::HasResult::Entities::Result::Plugins::HasJSendStatusAndAttributes::Entities::Code::Plugins::HasInspect::Concern + ] + end it "sets service result code concerns" do expect(service_class::Result::Code.concerns.to_a).to eq(concerns) diff --git a/spec/lib/convenient_service/examples/rails/gemfile/rails_service/config_spec.rb b/spec/lib/convenient_service/examples/rails/gemfile/rails_service/config_spec.rb index b3e986e8a8..10a532663d 100644 --- a/spec/lib/convenient_service/examples/rails/gemfile/rails_service/config_spec.rb +++ b/spec/lib/convenient_service/examples/rails/gemfile/rails_service/config_spec.rb @@ -396,7 +396,11 @@ example_group "service result code" do example_group "concerns" do - let(:concerns) { [] } + let(:concerns) do + [ + ConvenientService::Service::Plugins::HasResult::Entities::Result::Plugins::HasJSendStatusAndAttributes::Entities::Code::Plugins::HasInspect::Concern + ] + end it "sets service result code concerns" do expect(service_class::Result::Code.concerns.to_a).to eq(concerns) diff --git a/spec/lib/convenient_service/service/plugins/has_result/entities/result/plugins/has_j_send_status_and_attributes/entities/code/plugins/aliases_spec.rb b/spec/lib/convenient_service/service/plugins/has_result/entities/result/plugins/has_j_send_status_and_attributes/entities/code/plugins/aliases_spec.rb new file mode 100644 index 0000000000..4a6b24a18f --- /dev/null +++ b/spec/lib/convenient_service/service/plugins/has_result/entities/result/plugins/has_j_send_status_and_attributes/entities/code/plugins/aliases_spec.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +require "spec_helper" + +require "convenient_service" + +# rubocop:disable RSpec/DescribeClass +RSpec.describe "convenient_service/service/plugins/has_result/entities/result/plugins/has_j_send_status_and_attributes/entities/code/plugins/aliases" do + specify { expect(ConvenientService::Plugins::Code).to eq(ConvenientService::Service::Plugins::HasResult::Entities::Result::Plugins::HasJSendStatusAndAttributes::Entities::Code::Plugins) } +end +# rubocop:enable RSpec/DescribeClass diff --git a/spec/lib/convenient_service/service/plugins/has_result/entities/result/plugins/has_j_send_status_and_attributes/entities/code/plugins/has_awesome_print_inspect/concern_spec.rb b/spec/lib/convenient_service/service/plugins/has_result/entities/result/plugins/has_j_send_status_and_attributes/entities/code/plugins/has_awesome_print_inspect/concern_spec.rb new file mode 100644 index 0000000000..dd6a73020e --- /dev/null +++ b/spec/lib/convenient_service/service/plugins/has_result/entities/result/plugins/has_j_send_status_and_attributes/entities/code/plugins/has_awesome_print_inspect/concern_spec.rb @@ -0,0 +1,64 @@ +# frozen_string_literal: true + +require "spec_helper" + +require "convenient_service" + +# rubocop:disable RSpec/NestedGroups, RSpec/MultipleMemoizedHelpers +RSpec.describe ConvenientService::Service::Plugins::HasResult::Entities::Result::Plugins::HasJSendStatusAndAttributes::Entities::Code::Plugins::HasAwesomePrintInspect::Concern do + include ConvenientService::RSpec::Matchers::DelegateTo + + example_group "modules" do + include ConvenientService::RSpec::Matchers::IncludeModule + + subject { described_class } + + it { is_expected.to include_module(ConvenientService::Support::Concern) } + + context "when included" do + subject { code_class } + + let(:code_class) do + Class.new.tap do |klass| + klass.class_exec(described_class) do |mod| + include mod + end + end + end + + it { is_expected.to include_module(described_class::InstanceMethods) } + end + end + + example_group "instance methods" do + describe "#inspect" do + let(:service) do + Class.new do + include ConvenientService::Configs::Minimal + + include ConvenientService::Configs::AwesomePrintInspect + + def result + error(code: :foo) + end + end + end + + let(:code) { service.result.code } + + let(:keywords) { ["ConvenientService", "entity", "Code", "result", code.result.class.name, "value", ":foo"] } + + before do + ## + # TODO: Remove when Core implements auto committing from `inspect`. + # + code.class.commit_config! + end + + it "returns `inspect` representation of code" do + expect(code.inspect).to include(*keywords) + end + end + end +end +# rubocop:enable RSpec/NestedGroups, RSpec/MultipleMemoizedHelpers diff --git a/spec/lib/convenient_service/service/plugins/has_result/entities/result/plugins/has_j_send_status_and_attributes/entities/code/plugins/has_inspect/concern_spec.rb b/spec/lib/convenient_service/service/plugins/has_result/entities/result/plugins/has_j_send_status_and_attributes/entities/code/plugins/has_inspect/concern_spec.rb new file mode 100644 index 0000000000..cb9965da76 --- /dev/null +++ b/spec/lib/convenient_service/service/plugins/has_result/entities/result/plugins/has_j_send_status_and_attributes/entities/code/plugins/has_inspect/concern_spec.rb @@ -0,0 +1,60 @@ +# frozen_string_literal: true + +require "spec_helper" + +require "convenient_service" + +# rubocop:disable RSpec/NestedGroups, RSpec/MultipleMemoizedHelpers +RSpec.describe ConvenientService::Service::Plugins::HasResult::Entities::Result::Plugins::HasJSendStatusAndAttributes::Entities::Code::Plugins::HasInspect::Concern do + include ConvenientService::RSpec::Matchers::DelegateTo + + example_group "modules" do + include ConvenientService::RSpec::Matchers::IncludeModule + + subject { described_class } + + it { is_expected.to include_module(ConvenientService::Support::Concern) } + + context "when included" do + subject { code_class } + + let(:code_class) do + Class.new.tap do |klass| + klass.class_exec(described_class) do |mod| + include mod + end + end + end + + it { is_expected.to include_module(described_class::InstanceMethods) } + end + end + + example_group "instance methods" do + describe "#inspect" do + let(:service) do + Class.new do + include ConvenientService::Configs::Minimal + + def result + success + end + end + end + + let(:code) { service.result.code } + + before do + ## + # TODO: Remove when Core implements auto committing from `inspect`. + # + code.class.commit_config! + end + + it "returns `inspect` representation of code" do + expect(code.inspect).to eq("<#{code.class} value: :#{code}>") + end + end + end +end +# rubocop:enable RSpec/NestedGroups, RSpec/MultipleMemoizedHelpers