描述用于语义版本控制的ruby gem公共API

描述用于语义版本控制的ruby gem公共API,ruby,gem,semantic-versioning,Ruby,Gem,Semantic Versioning,各州的第一点是,兼容软件必须声明一个公共API 我想知道gems是如何建立这个公共API的。看起来它通常是通过自述文件来完成的(例如,请参见),自述文件并没有在公共API代码和其他代码之间划出严格的界限。gem的一个更好的例子是,将其公共API代码放在API目录中,但即使在那里,行也是灰色的,因为公共API的配置方法是在API目录外定义的 作为一个试图坚持语义版本控制的gem的潜在贡献者(这是其中的大多数,因为我们有像bundler这样的工具),我想知道哪些方法是公共API的一部分,哪些不是。也

各州的第一点是,兼容软件必须声明一个公共API

我想知道gems是如何建立这个公共API的。看起来它通常是通过自述文件来完成的(例如,请参见),自述文件并没有在公共API代码和其他代码之间划出严格的界限。gem的一个更好的例子是,将其公共API代码放在API目录中,但即使在那里,行也是灰色的,因为公共API的配置方法是在API目录外定义的


作为一个试图坚持语义版本控制的gem的潜在贡献者(这是其中的大多数,因为我们有像bundler这样的工具),我想知道哪些方法是公共API的一部分,哪些不是。也许我需要查看更多的源代码,但是是否有明确定义公共API的指南?

有一些常用的方法来定义公共API。你选择哪一个主要取决于你的品味

一种方法是文档。您只需在文档中声明哪些协议是公共API的一部分,以及这些协议的契约是什么。YARD甚至为此预定义了标签

另一种方法是测试。我想是默布干的。公共API在其RSpec测试中进行了描述。私有部分显然也进行了测试,但这些测试位于不同的目录中

这实际上非常酷,因为它允许您将代码更改和语义版本更改联系在一起:每次向公共目录添加测试时,您都需要升级次要版本。每次删除或修改公共目录中的测试时,都需要升级主版本

或者反过来说:在小修改期间,不允许更改或删除测试