Sha256: d6a71fa80ff28fae016a8c6b95c7355c65821a8883fe28b122a1e6e5c5ea64cc

Contents?: true

Size: 1.72 KB

Versions: 8

Compression:

Stored size: 1.72 KB

Contents

# frozen_string_literal: true

##
# Returns class when `object` is a class, module when `object` is a module or object's class.
#
# @example Aloid `if` condition for `ConvenientService::Core::Concern::ClassMethod#middlewares`.
#
#   service = Service.new # || Service
#
#   if service.is_a?(Module)
#     service.middlewares(:result)
#   else
#     service.class.middelewares(:result)
#   end
#
#   ##
#   # With `ConvenientService::Utils::Object::clamp_class` it can be rewritten in the followiing way:
#   #
#   ConvenientService::Utils::Object::clamp_class(service).middlewares(:result)
#
# @example Possible returns values.
#
#   module Musician
#   end
#
#   class Person
#   end
#
#   person = Person.new
#
#   ConvenientService::Utils::Object::ClampClass.call(42)
#   # => Integer
#
#   ConvenientService::Utils::Object::ClampClass.call("foo")
#   # => String
#
#   ConvenientService::Utils::Object::ClampClass.call(person)
#   # => Person
#
#   ConvenientService::Utils::Object::ClampClass.call(Person)
#   # => Person
#
#   ConvenientService::Utils::Object::ClampClass.call(Musician)
#   # => Musician
#
# @note Name is inspired by `Comparable#clamp`.
#
# @see https://ruby-doc.org/core-2.7.0/Comparable.html#method-i-clamp
#
module ConvenientService
  module Utils
    module Object
      class ClampClass < Support::Command
        ##
        # @!attribute [r] object
        #   @return [Object]
        #
        attr_reader :object

        ##
        # @param object [Object]
        # @return [void]
        #
        def initialize(object)
          @object = object
        end

        ##
        # @return [Class]
        #
        def call
          object.is_a?(::Module) ? object : object.class
        end
      end
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
convenient_service-0.19.1 lib/convenient_service/utils/object/clamp_class.rb
convenient_service-0.19.0 lib/convenient_service/utils/object/clamp_class.rb
convenient_service-0.18.0 lib/convenient_service/utils/object/clamp_class.rb
convenient_service-0.17.0 lib/convenient_service/utils/object/clamp_class.rb
convenient_service-0.16.0 lib/convenient_service/utils/object/clamp_class.rb
convenient_service-0.15.0 lib/convenient_service/utils/object/clamp_class.rb
convenient_service-0.14.0 lib/convenient_service/utils/object/clamp_class.rb
convenient_service-0.13.0 lib/convenient_service/utils/object/clamp_class.rb