Sha256: 3e54675624989904d934e1c753d209c03de268106e1a1fbfe40bb48f95593180

Contents?: true

Size: 1.62 KB

Versions: 1

Compression:

Stored size: 1.62 KB

Contents

# frozen_string_literal: true

module Strict
  module Method
    def self.extended(mod)
      return if mod.singleton_class?

      mod.singleton_class.extend(self)
    end

    def sig(&)
      instance = singleton_class? ? self : singleton_class
      instance.instance_variable_set(:@__strict_method_internal_last_sig_configuration, Methods::Dsl.run(&))
    end

    # rubocop:disable Metrics/MethodLength
    def singleton_method_added(method_name)
      super

      sig = singleton_class.instance_variable_get(:@__strict_method_internal_last_sig_configuration)
      singleton_class.instance_variable_set(:@__strict_method_internal_last_sig_configuration, nil)
      return unless sig

      verifiable_method = Methods::VerifiableMethod.new(
        method: singleton_class.instance_method(method_name),
        parameters: sig.parameters,
        returns: sig.returns,
        instance: false
      )
      verifiable_method.verify_definition!
      singleton_class.prepend(Methods::Module.new(verifiable_method))
    end

    def method_added(method_name)
      super

      sig = singleton_class.instance_variable_get(:@__strict_method_internal_last_sig_configuration)
      singleton_class.instance_variable_set(:@__strict_method_internal_last_sig_configuration, nil)
      return unless sig

      verifiable_method = Methods::VerifiableMethod.new(
        method: instance_method(method_name),
        parameters: sig.parameters,
        returns: sig.returns,
        instance: true
      )
      verifiable_method.verify_definition!
      prepend(Methods::Module.new(verifiable_method))
    end
    # rubocop:enable Metrics/MethodLength
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
strict-1.0.0 lib/strict/method.rb