Sha256: 0c8537290dd8456df08a39f272030ecebc6acc1342ef2b619312b4a5aaeaf4fe

Contents?: true

Size: 1.89 KB

Versions: 4

Compression:

Stored size: 1.89 KB

Contents

module Steep
  module Interface
    class Method
      attr_reader :type_name
      attr_reader :name
      attr_reader :super_method
      attr_reader :types
      attr_reader :attributes

      def initialize(type_name:, name:, types:, super_method:, attributes:)
        @type_name = type_name
        @name = name
        @types = types
        @super_method = super_method
        @attributes = attributes
      end

      def ==(other)
        other.is_a?(Method) &&
          other.type_name == type_name &&
          other.name == name &&
          other.types == types &&
          other.super_method == super_method &&
          other.attributes == attributes
      end

      def incompatible?
        attributes.include?(:incompatible)
      end

      def private?
        attributes.include?(:private)
      end

      def closed?
        types.all?(&:closed?)
      end

      def subst(s)
        self.class.new(
          type_name: type_name,
          name: name,
          types: types.map {|type| type.subst(s) },
          super_method: super_method&.subst(s),
          attributes: attributes
        )
      end

      def with_super(super_method)
        self.class.new(
          type_name: type_name,
          name: name,
          types: types,
          super_method: super_method,
          attributes: attributes
        )
      end

      def with_types(types)
        self.class.new(
          type_name: type_name,
          name: name,
          types: types,
          super_method: super_method,
          attributes: attributes
        )
      end

      def map_types
        with_types(types.map {|type| yield type })
      end

      def include_in_chain?(method)
        (method.type_name == type_name &&
          method.name == name &&
          method.types == types &&
          method.attributes == attributes) ||
          super_method&.include_in_chain?(method)
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
steep-0.11.1 lib/steep/interface/method.rb
steep-0.11.0 lib/steep/interface/method.rb
steep-0.10.0 lib/steep/interface/method.rb
steep-0.9.0 lib/steep/interface/method.rb