Module: Nanoc::Core::ContractsSupport

Defined Under Namespace

Modules: DisabledContracts, EnabledContracts Classes: Ignorer

Class Method Summary collapse

Class Method Details

.enabled?Boolean

Returns:

  • (Boolean)


111
112
113
# File 'lib/nanoc/core/contracts_support.rb', line 111

def self.enabled?
  setup_once
end

.included(base) ⇒ Object



115
116
117
118
119
120
121
122
123
124
125
126
127
128
# File 'lib/nanoc/core/contracts_support.rb', line 115

def self.included(base)
  should_enable = setup_once

  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

.setup_onceObject



85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
# File 'lib/nanoc/core/contracts_support.rb', line 85

def self.setup_once
  @_contracts_support__setup ||= false
  return @_contracts_support__should_enable if @_contracts_support__setup

  @_contracts_support__setup = true

  contracts_loadable =
    begin
      require 'contracts'
      true
    rescue LoadError
      false
    end

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

  if @_contracts_support__should_enable
    # FIXME: ugly
    ::Contracts.const_set('Named', EnabledContracts::Named)
    ::Contracts.const_set('IterOf', EnabledContracts::IterOf)
    ::Contracts.const_set('AbsolutePathString', EnabledContracts::AbsolutePathString)
  end

  @_contracts_support__should_enable
end