web-dev-qa-db-fra.com

Quelle est la différence entre ~> et> = lors de la spécification de rubygem dans Gemfile?

Je vois souvent la notation suivante (~>) dans Gemfile.

gem "cucumber", "~>0.8.5"
gem "rspec", "~>1.3.0"

Je sais que le signe (> =) est juste supérieur ou égal à, mais que signifie la notation (~>)? Sont-ils tous les deux identiques ou ont-ils une différence significative?

112
Autodidact

C'est une contrainte de version pessimiste . RubyGems incrémentera le dernier chiffre de la version fournie et l'utilisera jusqu'à ce qu'il atteigne une version maximale. Alors ~>0.8.5 est sémantiquement équivalent à:

gem "cucumber", ">=0.8.5", "<0.9.0"

Le moyen le plus simple d'y penser est que vous êtes d'accord avec le dernier chiffre incrémentant à une valeur arbitraire, mais ceux qui le précèdent dans la chaîne ne peuvent pas être supérieurs à ce que vous avez fourni. Ainsi pour ~>0.8.5, toute valeur est acceptable pour le troisième chiffre (le 5) à condition qu'il soit supérieur ou égal à 5, mais le 0,8 en tête doit être "0,8".

Vous pouvez le faire, par exemple, si vous pensez que la version 0.9 va implémenter des changements de rupture, mais vous savez que toute la série de versions 0.8.x n'est que des corrections de bogues.

Cependant, en utilisant simplement ">=0.8.5" indiquerait que toute version postérieure (ou égale) à 0.8.5 est acceptable. Il n'y a pas de limite supérieure.

157
eldarerathis

@millisami Vous pouvez même utiliser pour ajouter des dépendances avec le gemspec en utilisant la contrainte pessimiste comme ceci:

gem.add_runtime_dependency "thor", "~> 0.18.1"

Si vous ne savez pas grand-chose sur le développement de gemmes ou que vous vous y lancez, voici quelques bonnes références:

  1. Tutoriel qui vous apprend comment créer votre propre RubyGem, les pratiques standard qui lui sont associées et comment le télécharger pour que d'autres puissent l'installer.
  2. Comment créer une gemme à partir de zéro avec Bundler
2
strangeloops