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