Sha256: 62ebaa894fd7cc4a638945d3ba4ab84d5d35888d0b074e8598dfc8bb110cb187

Contents?: true

Size: 778 Bytes

Versions: 2

Compression:

Stored size: 778 Bytes

Contents

module Contracts
  module Eigenclass
    def self.extended(eigenclass)
      return if eigenclass.respond_to?(:owner_class=)

      class << eigenclass
        attr_accessor :owner_class
      end
    end

    def self.lift(base)
      return NullEigenclass if Support.eigenclass? base

      eigenclass = Support.eigenclass_of base

      eigenclass.extend(Eigenclass) unless eigenclass.respond_to?(:owner_class=)

      unless eigenclass.respond_to?(:pop_decorators)
        eigenclass.extend(MethodDecorators)
        eigenclass.send(:include, Contracts)
      end

      eigenclass.owner_class = base

      eigenclass
    end

    module NullEigenclass
      def self.owner_class
        self
      end

      def self.pop_decorators
        []
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
contracts-0.9 lib/contracts/eigenclass.rb
contracts-0.8 lib/contracts/eigenclass.rb