Sha256: b79550fa56f11dc4023faa63cbad922e2a13719e332c7f0dd4d40044fd7e969c

Contents?: true

Size: 1.79 KB

Versions: 1

Compression:

Stored size: 1.79 KB

Contents

# frozen_string_literal: true

module ConvenientService
  module Service
    module Plugins
      module HasResult
        module Commands
          class CreateResultClass < Support::Command
            attr_reader :service_class

            def initialize(service_class:)
              @service_class = service_class
            end

            def call
              result_class.include Entities::Result::Concern

              ##
              # class Result < ConvenientService::Service::Plugins::HasResult::Entities::Result # or just `class Result` if service class defines its own.
              #   include ConvenientService::Service::Plugins::HasResult::Entities::Result::Concern
              #
              #   class << self
              #     def service_class
              #       ##
              #       # NOTE: Returns `service_class` passed to `CreateResultClass`.
              #       #
              #       service_class
              #     end
              #
              #     def ==(other)
              #       return unless other.instance_of?(self.class)
              #
              #       self.service_class == other.service_class
              #     end
              #   end
              # end
              #
              result_class.class_exec(service_class) do |service_class|
                define_singleton_method(:service_class) { service_class }
                define_singleton_method(:==) { |other| self.service_class == other.service_class if other.instance_of?(self.class) }
              end

              result_class
            end

            private

            def result_class
              @result_class ||= Utils::Module.get_own_const(service_class, :Result) || ::Class.new(Entities::Result)
            end
          end
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
convenient_service-0.1.0 lib/convenient_service/service/plugins/has_result/commands/create_result_class.rb