class DuckTesting::YARD::Builder
Public Class Methods
new(class_object)
click to toggle source
@param class_object [DuckTesting::YARD::ClassObject]
# File lib/duck_testing/yard/builder.rb, line 5 def initialize(class_object) @class_object = class_object end
Public Instance Methods
build(scope = :instance)
click to toggle source
Build duck testing for the ‘@class_object`.
@param scope [Symbol] ‘:instance` or `:class` @return [Module] duck testing module of `class_object` in the `scope`.
# File lib/duck_testing/yard/builder.rb, line 13 def build(scope = :instance) @building_module = prepare_module @class_object.method_objects.each do |method_object| next unless method_object.scope == scope handle_method_object(method_object) end @building_module ensure remove_instance_variable :@building_module end
Private Instance Methods
__dk_test_keyword_parameters(tester, method_object, hash_parameter)
click to toggle source
# File lib/duck_testing/yard/builder.rb, line 41 def __dk_test_keyword_parameters(tester, method_object, hash_parameter) method_object.keyword_parameters.each do |method_parameter| next unless hash_parameter.key?(method_parameter.key_name) tester.test_param( hash_parameter[method_parameter.key_name], method_parameter.expected_types ) end end
__dk_test_normal_parameters(tester, method_object, parameters)
click to toggle source
# File lib/duck_testing/yard/builder.rb, line 32 def __dk_test_normal_parameters(tester, method_object, parameters) parameters.each_with_index do |parameter, index| tester.test_param( parameter, method_object.method_parameters[index].expected_types ) end end
handle_method_object(method_object)
click to toggle source
@param method_object [DuckTesting::YARD::MethodObject]
Calls superclass method
# File lib/duck_testing/yard/builder.rb, line 54 def handle_method_object(method_object) @building_module.module_eval do define_method method_object.name do |*parameters| tester = DuckTesting::Tester.new(self, method_object.name) if method_object.keyword_parameters.any? && parameters.last.is_a?(Hash) __dk_test_normal_parameters(tester, method_object, parameters[0...-1]) __dk_test_keyword_parameters(tester, method_object, parameters.last) else __dk_test_normal_parameters(tester, method_object, parameters) end tester.test_return(super(*parameters), method_object.expected_return_types) end end end
prepare_module()
click to toggle source
rubocop:disable Lint/NestedMethodDefinition, Metrics/AbcSize
# File lib/duck_testing/yard/builder.rb, line 28 def prepare_module Module.new do private def __dk_test_normal_parameters(tester, method_object, parameters) parameters.each_with_index do |parameter, index| tester.test_param( parameter, method_object.method_parameters[index].expected_types ) end end def __dk_test_keyword_parameters(tester, method_object, hash_parameter) method_object.keyword_parameters.each do |method_parameter| next unless hash_parameter.key?(method_parameter.key_name) tester.test_param( hash_parameter[method_parameter.key_name], method_parameter.expected_types ) end end end end