# # This class is Dog # classDog # @param name [String] a name # @param weight [Numeric] weight definitialize(name, weight) @name = name @weight = weight @children = [] end
# Add a child dog # # @param dog [Animal::Dog] a child dog defadd_child(dog) @children.push(dog) end
defvalidate_arguments(args) errors = [] args.each_with_index do|arg, i| arg_def = @args[i] ts = arg_def.types result = ts.find { |t| klass = Object.const_get(t) arg.is_a?(klass) } if result.nil? if ts.count > 1 errors.push "#{arg_def.name}: #{arg.inspect} isn't any of " + ts.join(',') else errors.push "#{arg_def.name}: #{arg.inspect} isn't #{ts[0]}" end end end errors.empty? ? nil : "#{@name}(" + errors.join(', ') + ")" end
defvalidate_return(ret_val) returnnilif @ret.nil? ts = @ret.types result = ts.find { |t| klass = Object.const_get(t) ret_val.is_a?(klass) } if result.nil? if ts.count > 1 "#{@name} returned #{ret_val.inspect} isn't any of " + ts.join(',') + ")" else "#{@name} returned #{ret_val.inspect} isn't #{ts[0]})" end else nil end end
defload_docstr(docstr) docstr.tags.each do|tag| tag_name = tag.tag_name if tag_name == 'param' @args.push OpenStruct.new({ name: tag.name, types: tag.types }) elsif tag_name == 'return' @ret = OpenStruct.new({ types: tag.types }) end end end end
classDefinitionStore definitialize @store = {} registry = YARD::Registry.load! registry.all(:class).each do|class_obj| add(class_obj) end end
defadd(class_obj) method_map = @store[class_obj.path] = {} class_obj.meths.each do|mt| method_map[mt.name] = MethodDefinition.new(mt) end end
defget(klass_name, method_name) klass_def = @store[klass_name] klass_def[method_name] end end