class Contracts::Engine::Target

Represents class in question

Attributes

target[R]

Public Class Methods

new(target) click to toggle source

Creates new instance of Target

@param [Class] target - class in question

# File lib/contracts/engine/target.rb, line 10
def initialize(target)
  @target = target
end

Public Instance Methods

applied?() click to toggle source

Returns true if target has contracts engine already

@return [Bool]

# File lib/contracts/engine/target.rb, line 38
def applied?
  target.respond_to?(:__contracts_engine)
end
apply(engine_class = Base) click to toggle source

Enable contracts engine for target

  • it is no-op if contracts engine is already enabled

  • it automatically enables contracts engine for its eigenclass

  • it sets owner class to target for its eigenclass

@param [Engine::Base:Class] engine_class - type of engine to

enable (Base or Eigenclass)
# File lib/contracts/engine/target.rb, line 21
def apply(engine_class = Base)
  return if applied?

  apply_to_eigenclass

  eigenclass.class_eval do
    define_method(:__contracts_engine) do
      @__contracts_engine ||= engine_class.new(self)
    end
  end

  engine.set_eigenclass_owner
end
engine() click to toggle source

Returns contracts engine of target

@return [Engine::Base or Engine::Eigenclass]

# File lib/contracts/engine/target.rb, line 45
def engine
  applied? && target.__contracts_engine
end

Private Instance Methods

apply_to_eigenclass() click to toggle source
# File lib/contracts/engine/target.rb, line 53
def apply_to_eigenclass
  return unless meaningless_eigenclass?

  self.class.new(eigenclass).apply(Eigenclass)
  eigenclass.extend(MethodDecorators)
  # FIXME; this should detect what user uses `include Contracts` or
  # `include Contracts;;Core`
  eigenclass.send(:include, Contracts)
end
eigenclass() click to toggle source
# File lib/contracts/engine/target.rb, line 63
def eigenclass
  Support.eigenclass_of(target)
end
meaningless_eigenclass?() click to toggle source
# File lib/contracts/engine/target.rb, line 67
def meaningless_eigenclass?
  !Support.eigenclass?(target)
end