class Contracts::Engine::Eigenclass

Special case of contracts engine for eigenclasses We don't care about eigenclass of eigenclass at this point

Attributes

owner_class[RW]

Class that owns this eigenclass

Public Class Methods

lift(eigenclass, owner) click to toggle source

Automatically enables eigenclass engine if it is not Returns its engine NOTE: Required by jruby in 1.9 mode. Otherwise inherited eigenclasses don't have their engines

@param [Class] eigenclass - class in question @param [Class] owner - owner of eigenclass @return [Engine::Eigenclass]

# File lib/contracts/engine/eigenclass.rb, line 19
def self.lift(eigenclass, owner)
  return Engine.fetch_from(eigenclass) if Engine.applied?(eigenclass)

  Target.new(eigenclass).apply(Eigenclass)
  eigenclass.extend(MethodDecorators)
  # FIXME; this should detect what user uses `include Contracts` or
  # `include Contracts;;Core`
  eigenclass.send(:include, Contracts)
  Engine.fetch_from(owner).set_eigenclass_owner
  Engine.fetch_from(eigenclass)
end

Public Instance Methods

all_decorators() click to toggle source

Fetches just eigenclasses decorators

# File lib/contracts/engine/eigenclass.rb, line 35
def all_decorators
  pop_decorators
end
set_eigenclass_owner() click to toggle source

No-op for eigenclasses

# File lib/contracts/engine/eigenclass.rb, line 32
def set_eigenclass_owner; end

Private Instance Methods

owner?() click to toggle source
# File lib/contracts/engine/eigenclass.rb, line 46
def owner?
  !!owner_class
end
validate!() click to toggle source

Fails when contracts are not included in owner class

# File lib/contracts/engine/eigenclass.rb, line 42
def validate!
  fail ContractsNotIncluded unless owner?
end