Semantic Versioning Specification中的第一点指出兼容软件必须声明公共API。
我想知道宝石如何建立这个公共API。它似乎通常通过自述文件完成(例如,参见ActiveRecord),这并不意味着它在公共API代码和其他代码之间划出了严格的界限。更好地执行此操作的gem的示例是Twitter API,将其公共API代码放在API directory中,但即使在那里,该行也是灰色的,因为公共API的configure方法在{{3}中定义在API目录之外。
作为宝石的潜在贡献者,试图坚持语义版本控制(其中大部分都是,因为我们有像bundler这样的工具),我想知道哪些方法是公共API的一部分,哪些不是“T。也许我必须查看更多的源代码,但有没有明确定义您的公共API的指南?
答案 0 :(得分:5)
有一些流行的方法来定义公共API。你选择哪一个主要是品味问题。
一种方法是文档。您只需在文档中说明哪些协议是公共API的一部分,以及这些协议的合同是什么。 YARD甚至为此预定了标签。
另一种方法是测试。我认为Merb做到了这一点。公共API在其RSpec测试中有所描述。私有部分显然也经过了测试,但这些测试都存在于不同的目录中。
这实际上非常酷,因为它允许您将代码更改和语义版本更改结合在一起:每次将测试添加到公共目录时,您都需要修改次要版本。每次删除或修改公共目录中的测试时,都需要使用主要版本。
反之亦然:在次要修订期间,您不得更改或删除测试。