module Reflective
  class MethodInfo
    def initialize(constant, method_name, visibility: :public)
      @method = Module.instance_method(:instance_method).bind(constant).call(method_name)
      @visibility = visibility
    end

    attr_reader :visibility

    def owner
      @method.owner
    end

    def public?
      visibility == :public
    end

    def protected?
      visibility == :protected
    end

    def private?
      visibility == :private
    end

    def static?
      Module.instance_method(:singleton_class?).bind(owner).call
    end
  end
end