Quelle est la différence entre ~> et> = lorsque vous spécifiez 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 les mêmes ou ont-ils une différence significative?

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. Donc, ~>0.8.5 est sémantiquement équivalent à:

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

La manière la plus simple d'y penser est que le dernier chiffre peut être incrémenté à une valeur arbitraire, mais que ceux qui le précèdent 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’elle soit supérieure ou égale à 5, mais que le premier 0,8 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 0.8.x n'est que des corrections de bogues.

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

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

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

Si vous ne connaissez pas grand chose en matière de développement de gemmes ou si vous ne l’êtes pas, voici quelques bonnes références:

  1. Didacticiel qui vous apprend comment créer votre propre RubyGem, les pratiques standard associées et comment le télécharger pour que d’autres puissent l’installer.
  2. Comment créer un bijou à partir de zéro avec Bundler