Que veut dire ~>
Exigence de version dans les spécifications de gemme?
hanna-0.1.12 dépend de [haml (~> 2.2.8)]
Le manuel RubyGems appelle cela un contrainte de version pessimiste .
Supposons que vous avez spécifié un numéro de version en n parties, par exemple 1.3
(En 2 parties) ou 3.5.6.2
(4 parties) comme contrainte. Ensuite, pour remplir la contrainte, un numéro de version doit satisfaire aux deux conditions suivantes
Les n-1 premières parties du numéro de version doivent être identiques aux n-1 premières parties de la contrainte (par exemple 1.x
ou 3.5.6.x
correspond, mais 0.x
ou 3.5.7.x
pas) et
La dernière partie du numéro de version doit être supérieure ou égale à la dernière partie de la contrainte (par exemple 1.9999
et 3.5.6.2
correspond, mais 1.2
ou 3.5.6.1
pas).
En d'autres termes
~> x1.X2.X3. … .Xn-2.Xn-1.Xn
allumettes
X1.X2.X3. … .Xn-2.Xn-1.y, y> = xn
La raison pour laquelle ceci est appelé une contrainte "pessimiste", et aussi le cas d'utilisation pour cela, est que lorsque vous dites simplement > x.y.z
, vous êtes optimiste: vous supposez qu'à partir de maintenant, jusqu'à l'éternité, l'API ne changera jamais. C'est bien sûr une hypothèse assez audacieuse. Cependant, la plupart des projets ont des règles sur le moment où ils sont autorisés à rompre la compatibilité descendante , et comment ils doivent changer leur numéro de version lorsqu'ils font rompre la compatibilité descendante. Vous pouvez encoder ces règles de numérotation de version en utilisant une contrainte pessimiste, et ainsi vous pouvez être sûr que votre code continuera toujours à fonctionner (en supposant que l'auteur de l'autre projet adhère réellement à ses propres règles, ce qui n'est malheureusement pas toujours le cas ).
En d'autres termes, vous pouvez utiliser ce symbole pour garder votre gem à jour avec toutes les mises à jour mineures et éviter de faire une mise à jour majeure qui peut casser votre application.
Par exemple, "~> 1.2" mettra à jour votre gem à 1.3 (si une telle version est publiée) mais il ne le mettra pas à jour à 2.0
Je pense bundler docs mieux résumer ceci:
Le spécificateur ~> a une signification spéciale, mieux illustrée par l'exemple. ~> 2.0.3 est identique à> = 2.0.3 et <2.1. ~> 2.1 est identique à> = 2.1 et <3.0. ~> 2.2.beta correspondra aux versions préliminaires comme 2.2.beta.12.