Essa é uma restrição de versão pessimista . RubyGems irá incrementar o último dígito na versão fornecida e usá-lo até atingir a versão máxima. Portanto, ~>0.8.5é semanticamente equivalente a:
gem "cucumber", ">=0.8.5", "<0.9.0"
A maneira mais fácil de pensar sobre isso é que você está bem com o último dígito incrementado para algum valor arbitrário, mas os que o precedem na string não podem ser maiores do que o fornecido. Assim ~>0.8.5, para , qualquer valor é aceitável para o terceiro dígito (o 5), desde que seja maior ou igual a 5, mas o 0,8 à esquerda deve ser "0,8".
Você pode fazer isso, por exemplo, se achar que a versão 0.9 vai implementar algumas mudanças importantes, mas sabe que toda a série de lançamentos 0.8.x são apenas correções de bugs.
No entanto, o simples uso ">=0.8.5"indicaria que qualquer versão posterior (ou igual a) 0.8.5 é aceitável. Não há limite superior.
Como isso se comporta com gemas que usam quatro dígitos para suas versões, como backbone-on-rails ?
JJD
2
@JJD: Deve ser basicamente o mesmo comportamento. O último dígito dos quatro pode ser incrementado sem limite, mas o terceiro não (então ~>0.9.2.3permitiria v0.9.2.4 ou v0.9.2.23, mas não v0.9.3.0). Se você especificou apenas 3 dígitos na restrição, o quarto seria essencialmente irrelevante - seria restrito apenas com base nos três primeiros que você especificar (por exemplo ~>0.9.2, aceitaria qualquer coisa dentro de uma série 0.9.xy, independentemente do que yseja; a restrição é que o 9 não pode ser incrementado).
eldarerathis
3
Existe uma exceção à regra de que "RubyGems irá incrementar o último dígito na versão": quando você fornece um dígito. Você pode esperar que "~> 4" signifique "Qualquer versão 4 ou superior", mas não significa , então tome cuidado.
hlascelles
2
E quanto a ~> 0,1 vs. ~> 0,1.0? Se pensarmos nisso como "você está bem com o último dígito incrementando para algum valor arbitrário", ~> 0,1 se traduz em> = 0,1.0 <1.0.0 enquanto ~> 0.1.0 se traduz em> = 0.1.0 < 0.2.0. Isso está correto?
Wei
Quando vejo um projeto GitHub dizendo que requer ruby> = 2.4.4, posso supor que eles suportam todos os ruby após 2.4.4 incluindo 2.5.1 e até mesmo ruby 3? Ou devemos jogar pelo seguro (ou seja, ao invés de pensar que eles suportarão todos os rubis após 2.4.4 inclusive, eu deveria pensar que eles significam que eles não suportarão nenhum ruby antes de 2.4.4)?
Henry Yang
3
@millisami Você pode até usar para adicionar dependências com o gemspec usando a restrição pessimista como esta:
gem.add_runtime_dependency "thor","~> 0.18.1"
Se você não sabe muito sobre o desenvolvimento de gemas ou está apenas começando, estas são algumas boas referências:
~>
requisitos de versão .~>
às vezes é chamado de "operador espermático".ruby "~>2.0"
Respostas:
Essa é uma restrição de versão pessimista . RubyGems irá incrementar o último dígito na versão fornecida e usá-lo até atingir a versão máxima. Portanto,
~>0.8.5
é semanticamente equivalente a:gem "cucumber", ">=0.8.5", "<0.9.0"
A maneira mais fácil de pensar sobre isso é que você está bem com o último dígito incrementado para algum valor arbitrário, mas os que o precedem na string não podem ser maiores do que o fornecido. Assim
~>0.8.5
, para , qualquer valor é aceitável para o terceiro dígito (o 5), desde que seja maior ou igual a 5, mas o 0,8 à esquerda deve ser "0,8".Você pode fazer isso, por exemplo, se achar que a versão 0.9 vai implementar algumas mudanças importantes, mas sabe que toda a série de lançamentos 0.8.x são apenas correções de bugs.
No entanto, o simples uso
">=0.8.5"
indicaria que qualquer versão posterior (ou igual a) 0.8.5 é aceitável. Não há limite superior.fonte
~>0.9.2.3
permitiria v0.9.2.4 ou v0.9.2.23, mas não v0.9.3.0). Se você especificou apenas 3 dígitos na restrição, o quarto seria essencialmente irrelevante - seria restrito apenas com base nos três primeiros que você especificar (por exemplo~>0.9.2
, aceitaria qualquer coisa dentro de uma série 0.9.xy, independentemente do quey
seja; a restrição é que o 9 não pode ser incrementado).@millisami Você pode até usar para adicionar dependências com o gemspec usando a restrição pessimista como esta:
Se você não sabe muito sobre o desenvolvimento de gemas ou está apenas começando, estas são algumas boas referências:
fonte