From: Jim Weirich Date: 2006-08-23T03:19:38+09:00 Subject: Re: gem pessimistic versioning - bug? unknown wrote: > can anyone provide a good reason why both of these should not work? > > harp:~ > ruby -r rubygems -e' require_gem "dynaload", "~> 0.1"; p > Dynaload::VERSION ' > "0.2.0" ~> 0.1 implies that versions 0.x are appropriate choices. 0.2.0 matches this criteria. $ irb --simple-prompt >> Gem::Requirement.new("~> 0.1").satisfied_by?(Gem::Version.new("0.0")) => false >> Gem::Requirement.new("~> 0.1").satisfied_by?(Gem::Version.new("0.1")) => true >> Gem::Requirement.new("~> 0.1").satisfied_by?(Gem::Version.new("0.2")) => true >> Gem::Requirement.new("~> 0.1").satisfied_by?(Gem::Version.new("0.2.0")) => true >> Gem::Requirement.new("~> 0.1").satisfied_by?(Gem::Version.new("0.2.0.0.0.0")) => true >> Gem::Requirement.new("~> 0.1").satisfied_by?(Gem::Version.new("0.3")) => true >> Gem::Requirement.new("~> 0.1").satisfied_by?(Gem::Version.new("1.0")) => false > harp:~ > ruby -r rubygems -e' require_gem "dynaload", "~> 0.1.0"; p > Dynaload::VERSION ' > /home/ahoward//lib/ruby/site_ruby/1.8/rubygems.rb:204:in > `report_activate_error': RubyGem version error: dynaload(0.2.0 not ~> > 0.1.0) (Gem::LoadError) > from /home/ahoward//lib/ruby/site_ruby/1.8/rubygems.rb:141:in > `activate' > from /home/ahoward//lib/ruby/site_ruby/1.8/rubygems.rb:37:in > `require_gem_with_options' > from /home/ahoward//lib/ruby/site_ruby/1.8/rubygems.rb:31:in > `require_gem' > from -e:1 ~> 0.1.0 implies that versions 0.1.x are appropriate choices. Version 0.2.0 does not meet that criteria. $ irb --simple-prompt >> Gem::Requirement.new("~> 0.1.0").satisfied_by?(Gem::Version.new("0.1.0")) => true >> Gem::Requirement.new("~> 0.1.0").satisfied_by?(Gem::Version.new("0.1")) => true >> Gem::Requirement.new("~> 0.1.0").satisfied_by?(Gem::Version.new("0.1.1")) => true >> Gem::Requirement.new("~> 0.1.0").satisfied_by?(Gem::Version.new("0.2")) => false >> Gem::Requirement.new("~> 0.1.0").satisfied_by?(Gem::Version.new("0.2.0")) => false > in addition, the error is most misleading... Suggestions are welcome ... > i'm unclear why it wouldn't simply do > > version = version.split(%r/\./).first(2).join('.') > > to ignore the trailing digit. (1) The number of 'digits' compared depends on the number of 'digits' in the requirement. It is not fixed at 2. ('digits' are in quotes because version numbers can be more than single digits, but you know what I mean). (2) The trailing 'digit' can't be ignored. It must be equal or greater than the last 'digit' of the requirment. > i guess i'm thinking that this is a bug. Looks OK to me. -- Jim Weirich -- Posted via http://www.ruby-forum.com/.