Sha256: 1c5d88f5cb26a0331ce64be28640231b7dd3916fa8c58319f08e0af4691003bb

Contents?: true

Size: 1.99 KB

Versions: 1

Compression:

Stored size: 1.99 KB

Contents

# frozen_string_literal: true

module ConvenientService
  module Core
    module Entities
      class Config
        module Commands
          class TrackMethodMissingCommitTrigger < Support::Command
            ##
            # @!attribute [r] config
            #   @return [ConvenientService::Core::Entities::Config]
            #
            attr_reader :config

            ##
            # @!attribute [r] trigger
            #   @return [ConvenientService::Support::UniqueValue]
            #
            attr_reader :trigger

            ##
            # @param config [ConvenientService::Core::Entities::Config]
            # @param trigger [ConvenientService::Support::UniqueValue]
            # @return [void]
            #
            def initialize(config:, trigger:)
              @config = config
              @trigger = trigger
            end

            ##
            # @return [void]
            #
            def call
              return unless method_missing_trigger_valid?
              return if method_missing_commits_counter_incremented?

              raise Errors::TooManyCommitsFromMethodMissing.new(config: config)
            end

            ##
            # @return [Boolean]
            #
            def method_missing_trigger_valid?
              method_missing_triggers.any?(trigger)
            end

            ##
            # @return [Boolean]
            #
            def method_missing_commits_counter_incremented?
              Utils::Object.memoize_including_falsy_values(self, :@method_missing_commits_counter_incremented) { config.method_missing_commits_counter.bincrement }
            end

            ##
            # @return [Array<ConvenientService::Support::UniqueValue>]
            #
            def method_missing_triggers
              @method_missing_triggers ||= [
                Constants::Triggers::INSTANCE_METHOD_MISSING,
                Constants::Triggers::CLASS_METHOD_MISSING
              ]
            end
          end
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
convenient_service-0.12.0 lib/convenient_service/core/entities/config/commands/track_method_missing_commit_trigger.rb