Sha256: fb72c2ebcae3817877f250e961cd5ce3a3454a2dfc8546838083fb7b78a8b077
Contents?: true
Size: 1.46 KB
Versions: 15
Compression:
Stored size: 1.46 KB
Contents
# frozen_string_literal: true module Contracts module Engine # Special case of contracts engine for eigenclasses # We don't care about eigenclass of eigenclass at this point class Eigenclass < Base # Class that owns this eigenclass attr_accessor :owner_class # 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] 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 # No-op for eigenclasses def set_eigenclass_owner; end # Fetches just eigenclasses decorators def all_decorators pop_decorators end private # Fails when contracts are not included in owner class def validate! fail ContractsNotIncluded unless owner? end def owner? !!owner_class end end end end
Version data entries
15 entries across 15 versions & 5 rubygems