Sha256: 716956dbdedbc451fabc5e1facc52aaeef3359870f822593c3575db4a39abd85

Contents?: true

Size: 1.46 KB

Versions: 12

Compression:

Stored size: 1.46 KB

Contents

require 'singleton'

module Nanoc::Int
  # @api private
  module ContractsSupport
    class Ignorer
      include Singleton

      # rubocop:disable Style/MethodMissing
      def method_missing(*_args)
        self
      end
      # rubocop:enable Style/MethodMissing

      def respond_to_missing?(*_args)
        true
      end
    end

    module DisabledContracts
      Any         = Ignorer.instance
      Bool        = Ignorer.instance
      Num         = Ignorer.instance
      KeywordArgs = Ignorer.instance
      Optional    = Ignorer.instance
      Maybe       = Ignorer.instance
      None        = Ignorer.instance
      ArrayOf     = Ignorer.instance
      Or          = Ignorer.instance
      Func        = Ignorer.instance
      RespondTo   = Ignorer.instance

      def contract(*args)
      end
    end

    module EnabledContracts
      def contract(*args)
        Contract(*args)
      end
    end

    def self.included(base)
      contracts_loadable =
        begin
          require 'contracts'
          true
        rescue LoadError
          false
        end

      should_enable = contracts_loadable && !ENV.key?('DISABLE_CONTRACTS')

      if should_enable
        unless base.include?(::Contracts::Core)
          base.include(::Contracts::Core)
          base.extend(EnabledContracts)
          base.const_set('C', ::Contracts)
        end
      else
        base.extend(DisabledContracts)
        base.const_set('C', DisabledContracts)
      end
    end
  end
end

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
nanoc-4.4.2 lib/nanoc/base/contracts_support.rb
nanoc-4.4.1 lib/nanoc/base/contracts_support.rb
nanoc-4.4.0 lib/nanoc/base/contracts_support.rb
nanoc-4.3.8 lib/nanoc/base/contracts_support.rb
nanoc-4.3.7 lib/nanoc/base/contracts_support.rb
nanoc-4.3.6 lib/nanoc/base/contracts_support.rb
nanoc-4.3.5 lib/nanoc/base/contracts_support.rb
nanoc-4.3.4 lib/nanoc/base/contracts_support.rb
nanoc-4.3.3 lib/nanoc/base/contracts_support.rb
nanoc-4.3.2 lib/nanoc/base/contracts_support.rb
nanoc-4.3.1 lib/nanoc/base/contracts_support.rb
nanoc-4.3.0 lib/nanoc/base/contracts_support.rb