class Uptyped::InterfaceValidator
Attributes
class_method_arity_errors[R]
instance_method_arity_errors[R]
public_class_method_errors[R]
public_instance_method_errors[R]
Public Class Methods
new(klass)
click to toggle source
# File lib/uptyped/interface_validator.rb, line 4 def initialize(klass) @validated_class = klass @public_instance_method_errors = [] @public_class_method_errors = [] @instance_method_arity_errors = [] @class_method_arity_errors = [] check_for_extra_subclass_instance_methods check_for_extra_subclass_class_methods check_instance_methods_for_arity_mismatches check_class_methods_for_arity_mismatches end
Public Instance Methods
success?()
click to toggle source
# File lib/uptyped/interface_validator.rb, line 16 def success? (public_instance_method_errors + public_class_method_errors + instance_method_arity_errors + class_method_arity_errors).empty? end
Private Instance Methods
check_class_methods_for_arity_mismatches()
click to toggle source
# File lib/uptyped/interface_validator.rb, line 56 def check_class_methods_for_arity_mismatches (validated_class.superclass.methods - validated_class.superclass.superclass.methods).each do |method| klass_arity = validated_class.method(method).arity superklass_arity = validated_class.superclass.method(method).arity unless klass_arity == superklass_arity error_message = "#{validated_class}.#{method.to_s} takes #{klass_arity} argument(s) while #{validated_class.superclass}.#{method.to_s} takes #{superklass_arity} argument(s)." @class_method_arity_errors << error_message end end end
check_for_extra_subclass_class_methods()
click to toggle source
# File lib/uptyped/interface_validator.rb, line 34 def check_for_extra_subclass_class_methods local_public_methods = validated_class.methods superclass_public_methods = validated_class.superclass.methods extra_public_methods = local_public_methods - superclass_public_methods unless extra_public_methods.empty? error_message = "expected #{validated_class} to have the same public class methods as #{validated_class.superclass}, got #{extra_public_methods}." @public_class_method_errors << error_message end end
check_for_extra_subclass_instance_methods()
click to toggle source
# File lib/uptyped/interface_validator.rb, line 26 def check_for_extra_subclass_instance_methods extra_instance_methods = validated_class.instance_methods - validated_class.superclass.instance_methods unless extra_instance_methods.empty? error_message = "expected #{validated_class} to have the same public instance methods as #{validated_class.superclass}, got #{extra_instance_methods}." @public_instance_method_errors << error_message end end
check_instance_methods_for_arity_mismatches()
click to toggle source
# File lib/uptyped/interface_validator.rb, line 44 def check_instance_methods_for_arity_mismatches (validated_class.superclass.instance_methods - validated_class.superclass.superclass.instance_methods).push(:initialize).each do |method| klass_arity = validated_class.instance_method(method).arity superklass_arity = validated_class.superclass.instance_method(method).arity unless klass_arity == superklass_arity error_message = "#{validated_class}##{method.to_s} takes #{klass_arity} argument(s) while #{validated_class.superclass}##{method.to_s} takes #{superklass_arity} argument(s)." instance_method_arity_errors << error_message end end end
validated_class()
click to toggle source
# File lib/uptyped/interface_validator.rb, line 22 def validated_class @validated_class end