Diff of the two buildlogs: -- --- b1/build.log 2025-02-03 21:38:12.124516486 +0000 +++ b2/build.log 2025-02-03 21:38:55.362562785 +0000 @@ -1,6 +1,6 @@ I: pbuilder: network access will be disabled during build -I: Current time: Mon Feb 3 09:37:08 -12 2025 -I: pbuilder-time-stamp: 1738618628 +I: Current time: Mon Mar 9 18:01:14 +14 2026 +I: pbuilder-time-stamp: 1773028874 I: Building the build Environment I: extracting base tarball [/var/cache/pbuilder/trixie-reproducible-base.tgz] I: copying local configuration @@ -23,54 +23,86 @@ dpkg-source: info: unpacking ruby-semantic-puppet_1.1.0-1.debian.tar.xz I: Not using root during the build. I: Installing the build-deps -I: user script /srv/workspace/pbuilder/51225/tmp/hooks/D02_print_environment starting +I: user script /srv/workspace/pbuilder/72511/tmp/hooks/D01_modify_environment starting +debug: Running on ionos16-i386. +I: Changing host+domainname to test build reproducibility +I: Adding a custom variable just for the fun of it... +I: Changing /bin/sh to bash +'/bin/sh' -> '/bin/bash' +lrwxrwxrwx 1 root root 9 Mar 9 04:01 /bin/sh -> /bin/bash +I: Setting pbuilder2's login shell to /bin/bash +I: Setting pbuilder2's GECOS to second user,second room,second work-phone,second home-phone,second other +I: user script /srv/workspace/pbuilder/72511/tmp/hooks/D01_modify_environment finished +I: user script /srv/workspace/pbuilder/72511/tmp/hooks/D02_print_environment starting I: set - BUILDDIR='/build/reproducible-path' - BUILDUSERGECOS='first user,first room,first work-phone,first home-phone,first other' - BUILDUSERNAME='pbuilder1' - BUILD_ARCH='i386' - DEBIAN_FRONTEND='noninteractive' - DEB_BUILD_OPTIONS='buildinfo=+all reproducible=+all parallel=11 ' - DISTRIBUTION='trixie' - HOME='/root' - HOST_ARCH='i386' + BASH=/bin/sh + BASHOPTS=checkwinsize:cmdhist:complete_fullquote:extquote:force_fignore:globasciiranges:globskipdots:hostcomplete:interactive_comments:patsub_replacement:progcomp:promptvars:sourcepath + BASH_ALIASES=() + BASH_ARGC=() + BASH_ARGV=() + BASH_CMDS=() + BASH_LINENO=([0]="12" [1]="0") + BASH_LOADABLES_PATH=/usr/local/lib/bash:/usr/lib/bash:/opt/local/lib/bash:/usr/pkg/lib/bash:/opt/pkg/lib/bash:. + BASH_SOURCE=([0]="/tmp/hooks/D02_print_environment" [1]="/tmp/hooks/D02_print_environment") + BASH_VERSINFO=([0]="5" [1]="2" [2]="37" [3]="1" [4]="release" [5]="i686-pc-linux-gnu") + BASH_VERSION='5.2.37(1)-release' + BUILDDIR=/build/reproducible-path + BUILDUSERGECOS='second user,second room,second work-phone,second home-phone,second other' + BUILDUSERNAME=pbuilder2 + BUILD_ARCH=i386 + DEBIAN_FRONTEND=noninteractive + DEB_BUILD_OPTIONS='buildinfo=+all reproducible=+all parallel=21 ' + DIRSTACK=() + DISTRIBUTION=trixie + EUID=0 + FUNCNAME=([0]="Echo" [1]="main") + GROUPS=() + HOME=/root + HOSTNAME=i-capture-the-hostname + HOSTTYPE=i686 + HOST_ARCH=i386 IFS=' ' - INVOCATION_ID='f058014de07c429888c240e14e533148' - LANG='C' - LANGUAGE='en_US:en' - LC_ALL='C' - LD_LIBRARY_PATH='/usr/lib/libeatmydata' - LD_PRELOAD='libeatmydata.so' - MAIL='/var/mail/root' - OPTIND='1' - PATH='/usr/sbin:/usr/bin:/sbin:/bin:/usr/games' - PBCURRENTCOMMANDLINEOPERATION='build' - PBUILDER_OPERATION='build' - PBUILDER_PKGDATADIR='/usr/share/pbuilder' - PBUILDER_PKGLIBDIR='/usr/lib/pbuilder' - PBUILDER_SYSCONFDIR='/etc' - PPID='51225' - PS1='# ' - PS2='> ' + INVOCATION_ID=1da4d2edafac40f8a224857bb9e30d29 + LANG=C + LANGUAGE=de_CH:de + LC_ALL=C + LD_LIBRARY_PATH=/usr/lib/libeatmydata + LD_PRELOAD=libeatmydata.so + MACHTYPE=i686-pc-linux-gnu + MAIL=/var/mail/root + OPTERR=1 + OPTIND=1 + OSTYPE=linux-gnu + PATH=/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path + PBCURRENTCOMMANDLINEOPERATION=build + PBUILDER_OPERATION=build + PBUILDER_PKGDATADIR=/usr/share/pbuilder + PBUILDER_PKGLIBDIR=/usr/lib/pbuilder + PBUILDER_SYSCONFDIR=/etc + PIPESTATUS=([0]="0") + POSIXLY_CORRECT=y + PPID=72511 PS4='+ ' - PWD='/' - SHELL='/bin/bash' - SHLVL='2' - SUDO_COMMAND='/usr/bin/timeout -k 18.1h 18h /usr/bin/ionice -c 3 /usr/bin/nice /usr/sbin/pbuilder --build --configfile /srv/reproducible-results/rbuild-debian/r-b-build.r0gMCxMc/pbuilderrc_V9wn --distribution trixie --hookdir /etc/pbuilder/first-build-hooks --debbuildopts -b --basetgz /var/cache/pbuilder/trixie-reproducible-base.tgz --buildresult /srv/reproducible-results/rbuild-debian/r-b-build.r0gMCxMc/b1 --logfile b1/build.log ruby-semantic-puppet_1.1.0-1.dsc' - SUDO_GID='112' - SUDO_UID='107' - SUDO_USER='jenkins' - TERM='unknown' - TZ='/usr/share/zoneinfo/Etc/GMT+12' - USER='root' - _='/usr/bin/systemd-run' - http_proxy='http://46.16.76.132:3128' + PWD=/ + SHELL=/bin/bash + SHELLOPTS=braceexpand:errexit:hashall:interactive-comments:posix + SHLVL=3 + SUDO_COMMAND='/usr/bin/timeout -k 24.1h 24h /usr/bin/ionice -c 3 /usr/bin/nice -n 11 /usr/bin/unshare --uts -- /usr/sbin/pbuilder --build --configfile /srv/reproducible-results/rbuild-debian/r-b-build.r0gMCxMc/pbuilderrc_IVVO --distribution trixie --hookdir /etc/pbuilder/rebuild-hooks --debbuildopts -b --basetgz /var/cache/pbuilder/trixie-reproducible-base.tgz --buildresult /srv/reproducible-results/rbuild-debian/r-b-build.r0gMCxMc/b2 --logfile b2/build.log ruby-semantic-puppet_1.1.0-1.dsc' + SUDO_GID=112 + SUDO_UID=107 + SUDO_USER=jenkins + TERM=unknown + TZ=/usr/share/zoneinfo/Etc/GMT-14 + UID=0 + USER=root + _='I: set' + http_proxy=http://213.165.73.152:3128 I: uname -a - Linux ionos12-i386 6.1.0-30-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.124-1 (2025-01-12) x86_64 GNU/Linux + Linux i-capture-the-hostname 6.1.0-30-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.124-1 (2025-01-12) x86_64 GNU/Linux I: ls -l /bin - lrwxrwxrwx 1 root root 7 Nov 22 14:40 /bin -> usr/bin -I: user script /srv/workspace/pbuilder/51225/tmp/hooks/D02_print_environment finished + lrwxrwxrwx 1 root root 7 Nov 22 2024 /bin -> usr/bin +I: user script /srv/workspace/pbuilder/72511/tmp/hooks/D02_print_environment finished -> Attempting to satisfy build-dependencies -> Creating pbuilder-satisfydepends-dummy package Package: pbuilder-satisfydepends-dummy @@ -251,7 +283,7 @@ Get: 137 http://deb.debian.org/debian trixie/main i386 ruby-rspec-expectations all 3.13.0c0e0m0s1-2 [90.2 kB] Get: 138 http://deb.debian.org/debian trixie/main i386 ruby-rspec-mocks all 3.13.0c0e0m0s1-2 [81.3 kB] Get: 139 http://deb.debian.org/debian trixie/main i386 ruby-rspec all 3.13.0c0e0m0s1-2 [5184 B] -Fetched 56.4 MB in 1s (71.9 MB/s) +Fetched 56.4 MB in 1s (43.4 MB/s) Preconfiguring packages ... Selecting previously unselected package libpython3.13-minimal:i386. (Reading database ... (Reading database ... 5% (Reading database ... 10% (Reading database ... 15% (Reading database ... 20% (Reading database ... 25% (Reading database ... 30% (Reading database ... 35% (Reading database ... 40% (Reading database ... 45% (Reading database ... 50% (Reading database ... 55% (Reading database ... 60% (Reading database ... 65% (Reading database ... 70% (Reading database ... 75% (Reading database ... 80% (Reading database ... 85% (Reading database ... 90% (Reading database ... 95% (Reading database ... 100% (Reading database ... 19830 files and directories currently installed.) @@ -713,8 +745,8 @@ Setting up tzdata (2024b-6) ... Current default time zone: 'Etc/UTC' -Local time is now: Mon Feb 3 21:37:44 UTC 2025. -Universal Time is now: Mon Feb 3 21:37:44 UTC 2025. +Local time is now: Mon Mar 9 04:01:39 UTC 2026. +Universal Time is now: Mon Mar 9 04:01:39 UTC 2026. Run 'dpkg-reconfigure tzdata' if you wish to change it. Setting up autotools-dev (20220109.1) ... @@ -842,7 +874,11 @@ Building tag database... -> Finished parsing the build-deps I: Building the package -I: Running cd /build/reproducible-path/ruby-semantic-puppet-1.1.0/ && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games" HOME="/nonexistent/first-build" dpkg-buildpackage -us -uc -b && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games" HOME="/nonexistent/first-build" dpkg-genchanges -S > ../ruby-semantic-puppet_1.1.0-1_source.changes +I: user script /srv/workspace/pbuilder/72511/tmp/hooks/A99_set_merged_usr starting +Not re-configuring usrmerge for trixie +I: user script /srv/workspace/pbuilder/72511/tmp/hooks/A99_set_merged_usr finished +hostname: Name or service not known +I: Running cd /build/reproducible-path/ruby-semantic-puppet-1.1.0/ && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path" HOME="/nonexistent/second-build" dpkg-buildpackage -us -uc -b && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path" HOME="/nonexistent/second-build" dpkg-genchanges -S > ../ruby-semantic-puppet_1.1.0-1_source.changes dpkg-buildpackage: info: source package ruby-semantic-puppet dpkg-buildpackage: info: source version 1.1.0-1 dpkg-buildpackage: info: source distribution unstable @@ -875,7 +911,7 @@ │ ruby-semantic-puppet: Installing files and building extensions for ruby3.1 │ └──────────────────────────────────────────────────────────────────────────────┘ -/usr/bin/ruby3.1 -S gem build --config-file /dev/null --verbose /tmp/d20250203-56388-ux6n0k/gemspec +/usr/bin/ruby3.1 -S gem build --config-file /dev/null --verbose /tmp/d20260309-77581-j2sye2/gemspec WARNING: open-ended dependency on rake (>= 0, development) is not recommended use a bounded requirement, such as "~> x.y" WARNING: open-ended dependency on rspec (>= 0, development) is not recommended @@ -893,7 +929,7 @@ Name: semantic_puppet Version: 1.1.0 File: semantic_puppet-1.1.0.gem -/usr/bin/ruby3.1 -S gem install --config-file /dev/null --verbose --local --verbose --no-document --ignore-dependencies --install-dir debian/ruby-semantic-puppet/usr/share/rubygems-integration/all /tmp/d20250203-56388-ux6n0k/semantic_puppet-1.1.0.gem +/usr/bin/ruby3.1 -S gem install --config-file /dev/null --verbose --local --verbose --no-document --ignore-dependencies --install-dir debian/ruby-semantic-puppet/usr/share/rubygems-integration/all /tmp/d20260309-77581-j2sye2/semantic_puppet-1.1.0.gem /build/reproducible-path/ruby-semantic-puppet-1.1.0/debian/ruby-semantic-puppet/usr/share/rubygems-integration/all/gems/semantic_puppet-1.1.0/lib/semantic_puppet.rb /build/reproducible-path/ruby-semantic-puppet-1.1.0/debian/ruby-semantic-puppet/usr/share/rubygems-integration/all/gems/semantic_puppet-1.1.0/lib/semantic_puppet/dependency.rb /build/reproducible-path/ruby-semantic-puppet-1.1.0/debian/ruby-semantic-puppet/usr/share/rubygems-integration/all/gems/semantic_puppet-1.1.0/lib/semantic_puppet/dependency/graph.rb @@ -938,32 +974,75 @@ All examples were filtered out; ignoring {:focus=>true} -Randomized with seed 10490 +Randomized with seed 56506 + +SemanticPuppet::Dependency::GraphNode + #<=> + can be compared + #populate_children + accepts a graph solution and populates it across all nodes + saves all relevant nodes as its children + #satisfied + is satisfied when all dependencies are fulfilled + is unsatisfied when any dependencies are missing + is unsatisfied when no nodes have been appended + dependencies + are maintained in the #dependencies Hash + are added by #add_dependency + #<< + does not append unsatisfying nodes + appends satisfying nodes to the dependencies + does not append nodes with unknown names + sorts once the dependencies for a specific node + sorts the dependencies for each addition to the same node + +SemanticPuppet::Dependency::ModuleRelease + #== + considers a release different from something that is not a release + considers two equal releases to be equal + considers two releases with different versions to be different + considers two releases with different names to be different + can compare a release with something that is not a release + #satisfied? + returns false when not all dependencies have been satisified + returns false when not all dependency versions have been satisified + returns false when no dependencies have been satisified + returns true when there are no dependencies to satisfy + returns true when all dependencies have been satisified + #<< + does not mark mis-matching dependency names as satisfied + does not mark mis-matching dependency versions as satisfied + marks matching dependencies as satisfied + #dependency_names + lists the names of all the release's dependencies + #to_s + is expected to =~ /foobarbaz/ + is expected to =~ /1.2.3/ + #<=> + considers releases with lesser version numbers lesser + orders releases with different names lexographically + considers releases with greater version numbers greater + orders releases by name first + #satisfies_dependency? + returns false when the release does not match the dependency name + returns false when there are no dependencies to satisfy + returns true when the release matches the dependency + returns false when the release does not match the dependency version SemanticPuppet::Dependency + .sources + defaults to an empty list + can be emptied by using #clear_sources + is frozen + can be modified by using #add_source .resolve for a module without dependencies returns the greatest release matching the version range - when the query omits all versions - fails with an appropriate message when the query includes both stable and prerelease versions returns the greatest stable release matching the range when the query omits all stable versions returns the greatest prerelease version matching the range - for a module with circular dependencies - that can be resolved - terminates - that cannot be resolved - fails with an appropriate message - for a module with competing dependencies - that overlap - returns the greatest release satisfying all dependencies - that do not overlap - fails with an appropriate message - that violate graph constraints - that can be resolved - terminates - that cannot be resolved + when the query omits all versions fails with an appropriate message for a module with dependencies that violate module constraints on the graph @@ -971,6 +1050,16 @@ fails with an appropriate message that can be resolved terminates + that violate graph constraints + that can be resolved + terminates + that cannot be resolved + fails with an appropriate message + for a module with circular dependencies + that cannot be resolved + fails with an appropriate message + that can be resolved + terminates for a module with dependencies returns the greatest releases matching the dependency range when the dependency has no stable versions @@ -980,1072 +1069,1019 @@ when the dependency cannot be satisfied sets unsatisfiable fails with an appropriate message + for a module with competing dependencies + that do not overlap + fails with an appropriate message + that overlap + returns the greatest release satisfying all dependencies .query - with multiple sources - resolves all dependencies against all sources - queries each source in turn without sources returns an unsatisfied ModuleRelease + with multiple sources + queries each source in turn + resolves all dependencies against all sources with one source + queries the source for release information populates the returned ModuleRelease with related dependencies returns a ModuleRelease with the requested dependencies - queries the source for release information - queries the source for each dependency only once - queries the source for each dependency populates all returned ModuleReleases with related dependencies - .sources - can be emptied by using #clear_sources - is frozen - can be modified by using #add_source - defaults to an empty list + queries the source for each dependency + queries the source for each dependency only once SemanticPuppet::Dependency::Graph #add_constraint can create a new constraint on a module permits multiple constraints against the same module name + #initialize + adds constraints for every key in the passed hash + can be called without arguments + implements the GraphNode protocol + adds the named dependencies for every key in the passed hash #add_graph_constraint - can create a new constraint on a graph permits multiple graph constraints + can create a new constraint on a graph #satisfies_graph? - returns false if the solution violates any graph constraint returns false if the solution violates a graph constraint returns true if the solution violates no graph constraints + returns false if the solution violates any graph constraint #satisfies_dependency? - is not satisfied by modules that do not fulfill all the constraints is satisfied by modules that do fulfill all the constraints - is not satisfied by modules that do not fulfill the constraint + is not satisfied by modules that do not fulfill all the constraints is not satisfied by modules it does not depend on - #initialize - implements the GraphNode protocol - adds the named dependencies for every key in the passed hash - adds constraints for every key in the passed hash - can be called without arguments + is not satisfied by modules that do not fulfill the constraint -SemanticPuppet::Dependency::GraphNode - #<< - sorts once the dependencies for a specific node - does not append unsatisfying nodes - appends satisfying nodes to the dependencies - sorts the dependencies for each addition to the same node - does not append nodes with unknown names +SemanticPuppet::Version #<=> - can be compared - #populate_children - accepts a graph solution and populates it across all nodes - saves all relevant nodes as its children - dependencies - are added by #add_dependency - are maintained in the #dependencies Hash - #satisfied - is satisfied when all dependencies are fulfilled - is unsatisfied when no nodes have been appended - is unsatisfied when any dependencies are missing + Spec v2.0.0 + Section 11 + comparisons without prereleases + sorted order + comparisons against prereleases + prereleases have lower precedence + comparisions between prereleases + non-numeric identifiers sort ASCIIbetically + non-numeric identifiers have a higher precendence + build metadata does not figure into precendence + sorted order + identifiers are parsed left-to-right + identical prereleases are equal + build metadata does figure into equality + larger identifier sets have precendence + numeric identifiers sort numerically + Spec v1.0.0 + Section 4 + sorted order + .valid? + Spec v2.0.0 + Section 2 + rejects versions that contain non-integers + permits zeroes in version number parts + rejects versions that contain too many parts + rejects versions that contain too few parts + rejects versions that contain negative integers + rejects version numbers containing leading zeroes + Section 9 + rejects empty prerelease versions + permits non-numeric prerelease identifiers with leading zeroes + rejects prerelease identifiers with non-alphanumerics + rejects empty prerelease version identifiers + permits non-numeric prerelease identifiers + rejects numeric prerelease identifiers with leading zeroes + permits numeric prerelease identifiers of zero + Section 10 + rejects build identifiers with non-alphanumerics + rejects empty build identifiers + permits numeric build identifiers of zero + rejects empty build metadata + permits numeric build identifiers with leading zeroes + permits non-numeric build identifiers with leading zeroes + Spec v1.0.0 + Section 4 + rejects prerelease identifiers with non-alphanumerics + rejects empty prerelease versions + permits non-numeric prerelease identifiers with leading zeroes + permits numeric prerelease identifiers of zero + rejects numeric prerelease identifiers with leading zeroes + Section 2 + rejects versions that contain too many parts + rejects versions that contain non-integers + rejects versions that contain too few parts + permits zeroes in version number parts + #next + with :patch + removes any prerelease information + does not modify the original version + removes any build information + returns the next patch version + with :minor + removes any build information + removes any prerelease information + resets the patch version to 0 + returns the next minor version + does not modify the original version + with :major + removes any prerelease information + does not modify the original version + returns the next major version + resets the minor and patch versions to 0 + removes any build information + .parse + Spec v2.0.0 + Section 10 + permits numeric build identifiers with leading zeroes + rejects empty build identifiers + permits numeric build identifiers of zero + rejects empty build metadata + permits non-numeric build identifiers with leading zeroes + rejects build identifiers with non-alphanumerics + examples + 1.0.0-alpha+001 + 1.0.0-beta+exp.sha.5114f85 + 1.0.0+20130313144700 + Section 9 + rejects numeric prerelease identifiers with leading zeroes + permits non-numeric prerelease identifiers with leading zeroes + rejects empty prerelease version identifiers + rejects empty prerelease versions + rejects prerelease identifiers with non-alphanumerics + permits numeric prerelease identifiers of zero + examples + 1.0.0-0.3.7 + 1.0.0-alpha + 1.0.0-x.7.z.92 + 1.0.0-alpha.1 + Section 2 + rejects versions that contain too few parts + rejects versions that contain non-integers + rejects versions that contain negative integers + permits zeroes in version number parts + rejects version numbers containing leading zeroes + rejects versions that contain too many parts + examples + 1.10.0 + 1.9.0 + 1.11.0 + Spec v1.0.0 + Section 4 + rejects empty prerelease versions + permits numeric prerelease identifiers of zero + rejects prerelease identifiers with non-alphanumerics + rejects numeric prerelease identifiers with leading zeroes + permits non-numeric prerelease identifiers with leading zeroes + examples + 1.0.0-beta2 + 1.0.0-beta1 + 1.0.0-rc1 + 1.0.0-alpha1 + Section 2 + rejects versions that contain too few parts + rejects versions that contain non-integers + permits zeroes in version number parts + rejects versions that contain too many parts + examples + 1.9.0 + 1.10.0 + 1.11.0 + #== + should yield false when the minor differs + should yield false when compared to something that is not a Version + should yield true when comparing two equal instances + should yield false when the prerelease differs + should yield false when the major differs + should yield false when the patch differs SemanticPuppet::Dependency::UnsatisfiableGraph - #message - is expected to match /foo, bar, and baz/ #sentence_from_list - with a list of one item - is expected to eql "foo" - with a list of two items - is expected to eql "foo and bar" with a list of more than three items is expected to eql "foo, bar, baz, and quux" + with a list of two items + is expected to eql "foo and bar" + with a list of one item + is expected to eql "foo" with a list of three items is expected to eql "foo, bar, and baz" + #message + is expected to match /foo, bar, and baz/ SemanticPuppet::VersionRange + #intersection + cannot intersect with non-VersionRanges + between 10.0.0 - 5.0.0 & + >=5.0.0 <1.0.0 + 9.0.0 - 6.0.0 + 5.0.0 - 1.0.0 + 11.0.0 - 4.0.0 + >=10.0.0 <5.0.0 + 6.0.0 - 1.0.0 + 15.0.0 - 9.0.0 + >=7.0.0 <1.0.0 + 4.0.0 - 1.0.0 + 10.0.0 - 5.0.0 + 15.0.0 - 11.0.0 + 15.0.0 - 10.0.0 + is commutative + between 10.0.0 - 5.0.0 & >=7.0.0 <1.0.0 + between 10.0.0 - 5.0.0 & >=10.0.0 <5.0.0 + between 10.0.0 - 5.0.0 & 15.0.0 - 9.0.0 + between >=10.0.0 <5.0.0 & >=10.0.0 <5.0.0 + between >=10.0.0 <5.0.0 & 6.0.0 - 1.0.0 + between >=10.0.0 <5.0.0 & 15.0.0 - 10.0.0 + between 10.0.0 - 5.0.0 & 11.0.0 - 4.0.0 + between 10.0.0 - 5.0.0 & 15.0.0 - 11.0.0 + between 10.0.0 - 5.0.0 & 5.0.0 - 1.0.0 + between 10.0.0 - 5.0.0 & 15.0.0 - 10.0.0 + between >=10.0.0 <5.0.0 & >=7.0.0 <1.0.0 + between >=10.0.0 <5.0.0 & 15.0.0 - 11.0.0 + between >=10.0.0 <5.0.0 & 10.0.0 - 5.0.0 + between >=10.0.0 <5.0.0 & 4.0.0 - 1.0.0 + between >=10.0.0 <5.0.0 & 9.0.0 - 6.0.0 + between 10.0.0 - 5.0.0 & 6.0.0 - 1.0.0 + between >=10.0.0 <5.0.0 & >=5.0.0 <1.0.0 + between 10.0.0 - 5.0.0 & 10.0.0 - 5.0.0 + between >=10.0.0 <5.0.0 & 11.0.0 - 4.0.0 + between >=10.0.0 <5.0.0 & 5.0.0 - 1.0.0 + between >=10.0.0 <5.0.0 & 15.0.0 - 9.0.0 + between 10.0.0 - 5.0.0 & 9.0.0 - 6.0.0 + between 10.0.0 - 5.0.0 & >=5.0.0 <1.0.0 + between 10.0.0 - 5.0.0 & 4.0.0 - 1.0.0 + between >=10.0.0 <5.0.0 & + 15.0.0 - 9.0.0 + 15.0.0 - 10.0.0 + >=10.0.0 <5.0.0 + 11.0.0 - 4.0.0 + 6.0.0 - 1.0.0 + >=5.0.0 <1.0.0 + 10.0.0 - 5.0.0 + >=7.0.0 <1.0.0 + 15.0.0 - 11.0.0 + 4.0.0 - 1.0.0 + 9.0.0 - 6.0.0 + 5.0.0 - 1.0.0 .parse - inclusive range expressions - "1.2.3-alpha - 1.3.4-alpha" includes 1.3.4-alpha - parse("1.2.3-alpha - 1.3.4").to_s includes 1.2.3-alpha - parse("1.2.3-alpha - 1.3.4-alpha").to_s excludes 1.2.3-alph - "1.2.3 - 1.3.4" excludes 1.2.3-0 - "1.2.3 - 1.3.4" excludes 1.2.2 - "1.2.3-alpha - 1.3.4" stringifies as >=1.2.3-alpha <=1.3.4 - "1.2.3 - 1.3.4" stringifies as >=1.2.3 <=1.3.4 - parse("1.2.3 - 1.3.4-alpha").to_s excludes 1.2.2 - parse("1.2.3 - 1.3.4-alpha").to_s excludes 1.3.5 - parse("1.2.3-alpha - 1.3.4").to_s excludes 1.2.3-alph - "1.2.3-alpha - 1.3.4-alpha" includes 1.2.3-alpha - "1.2.3 - 1.3.4-alpha" excludes 1.3.4-alpha0 - "1.2.3 - 1.3.4-alpha" excludes 1.2.2 - "1.2.3 - 1.3.4-alpha" includes 1.2.3 - parse("1.2.3 - 1.3.4-alpha").to_s includes 1.2.3 - "1.2.3-alpha - 1.3.4" includes 1.2.3-alpha - parse("1.2.3 - 1.3.4").to_s excludes 1.3.5-0 - parse("1.2.3-alpha - 1.3.4").to_s excludes 1.3.5-0 - parse("1.2.3 - 1.3.4").to_s includes 1.3.4 - parse("1.2.3 - 1.3.4-alpha").to_s excludes 1.3.4-alpha0 - parse("1.2.3-alpha - 1.3.4-alpha").to_s excludes 1.3.4-alpha0 - "1.2.3 - 1.3.4-alpha" excludes 1.3.5 - "1.2.3 - 1.3.4" includes 1.2.3 - "1.2.3-alpha - 1.3.4-alpha" excludes 1.3.5 - "1.2.3-alpha - 1.3.4" excludes 1.3.5-0 - parse("1.2.3 - 1.3.4").to_s includes 1.2.3 - "1.2.3 - 1.3.4" excludes 1.3.5-0 - "1.2.3 - 1.3.4" includes 1.3.4 - "1.2.3-alpha - 1.3.4-alpha" stringifies as >=1.2.3-alpha <=1.3.4-alpha - parse("1.2.3 - 1.3.4").to_s excludes 1.2.3-0 - "1.2.3-alpha - 1.3.4-alpha" excludes 1.3.4-alpha0 - parse("1.2.3 - 1.3.4-alpha").to_s includes 1.3.4-alpha - "1.2.3-alpha - 1.3.4-alpha" excludes 1.2.3-alph - parse("1.2.3-alpha - 1.3.4-alpha").to_s includes 1.3.4-alpha - parse("1.2.3 - 1.3.4").to_s excludes 1.2.2 - parse("1.2.3-alpha - 1.3.4").to_s includes 1.3.4 - parse("1.2.3-alpha - 1.3.4-alpha").to_s excludes 1.3.5 - "1.2.3 - 1.3.4-alpha" includes 1.3.4-alpha - "1.2.3 - 1.3.4-alpha" excludes 1.2.3-0 - "1.2.3-alpha - 1.3.4" includes 1.3.4 - parse("1.2.3-alpha - 1.3.4-alpha").to_s includes 1.2.3-alpha - "1.2.3 - 1.3.4-alpha" stringifies as >=1.2.3 <=1.3.4-alpha - parse("1.2.3 - 1.3.4-alpha").to_s excludes 1.2.3-0 - "1.2.3-alpha - 1.3.4" excludes 1.2.3-alph - ored expressions - adjacent - ">=1.2.3 <1.2.5 || >=1.2.5 <1.3.0" stringifies as >=1.2.3 <1.3.0 - parse("1.2.3 || 1.2.4 || 1.2.5").to_s excludes 1.2.5-0 - returns nil on exclude_end? - "1.2.3 || 1.2.4 || 1.2.5" includes 1.2.3 - "1.2.3 || 1.2.4 || 1.2.5" stringifies as >=1.2.3 <=1.2.5 - ">=1.2.3 <1.2.5 || >=1.2.5 <1.3.0" excludes 1.2.6-0 - parse(">=1.2.3 <1.2.5 || >=1.2.5 <1.3.0").to_s includes 1.2.3 - ">=1.2.3 <1.2.5 || >=1.2.5 <1.3.0" excludes 1.2.3-0 - parse(">=1.2.3 <1.2.5 || >=1.2.5 <1.3.0").to_s excludes 1.2.6-0 - parse(">=1.2.3 <1.2.5 || >=1.2.5 <1.3.0").to_s includes 1.2.6 - returns nil on exclude_begin? - parse("1.2.3 || 1.2.4 || 1.2.5").to_s includes 1.2.3 - returns nil on end - returns expected begin - parse("1.2.3 || 1.2.4 || 1.2.5").to_s includes 1.2.5 - ">=1.2.3 <1.2.5 || >=1.2.5 <1.3.0" includes 1.2.6 - ">=1.2.3 <1.2.5 || >=1.2.5 <1.3.0" includes 1.2.3 - parse(">=1.2.3 <1.2.5 || >=1.2.5 <1.3.0").to_s excludes 1.2.3-0 - parse("1.2.3 || 1.2.4 || 1.2.5").to_s excludes 1.2.3-0 - "1.2.3 || 1.2.4 || 1.2.5" excludes 1.2.3-0 - "1.2.3 || 1.2.4 || 1.2.5" excludes 1.2.5-0 - "1.2.3 || 1.2.4 || 1.2.5" includes 1.2.5 - non-overlapping - returns nil on exclude_begin? - returns nil on end - parse("1.2.3 || 1.2.5").to_s includes 1.2.5 - "1.2.3 || 1.2.5" includes 1.2.3 - "1.2.3 || 1.2.5" excludes 1.2.4 - "1.2.3 || 1.2.5" excludes 1.2.5-0 - parse("1.2.3 || 1.2.5").to_s excludes 1.2.4 - "1.2.3 || 1.2.5" stringifies as 1.2.3 || 1.2.5 - returns nil on exclude_end? - "1.2.3 || 1.2.5" excludes 1.2.3-0 - parse("1.2.3 || 1.2.5").to_s excludes 1.2.5-0 - returns nil on begin - "1.2.3 || 1.2.5" includes 1.2.5 - parse("1.2.3 || 1.2.5").to_s excludes 1.2.3-0 - parse("1.2.3 || 1.2.5").to_s includes 1.2.3 - overlapping - ">=1.2.3 <=1.2.5 || >=1.2.5 <1.3.0" includes 1.2.6 - ">=1.2.3 || 1.2.5" stringifies as >=1.2.3 - ">=1.2.3 || 1.2.5" excludes 1.2.3-0 - parse(">=1.2.3 <=1.2.5 || >=1.2.5 <1.3.0").to_s excludes 1.2.6-0 - parse(">=1.2.3 <=1.2.5 || >=1.2.5 <1.3.0").to_s includes 1.2.6 - ">=1.2.3 <=1.2.5 || >=1.2.5 <1.3.0" excludes 1.2.6-0 - parse(">=1.2.3 <=1.2.5 || >=1.2.5 <1.3.0").to_s includes 1.2.3 - ">=1.2.3 <=1.2.5 || >=1.2.5 <1.3.0" stringifies as >=1.2.3 <1.3.0 - ">=1.2.3 <=1.2.5 || >=1.2.5 <1.3.0" excludes 1.2.3-0 - ">=1.2.3 || 1.2.5" includes 1.2.3 - parse(">=1.2.3 || 1.2.5").to_s excludes 1.2.4-0 - parse(">=1.2.3 <=1.2.5 || >=1.2.5 <1.3.0").to_s excludes 1.2.3-0 - ">=1.2.3 || 1.2.5" excludes 1.2.4-0 - parse(">=1.2.3 || 1.2.5").to_s includes 1.2.4 - ">=1.2.3 || 1.2.5" includes 1.2.4 - ">=1.2.3 <=1.2.5 || >=1.2.5 <1.3.0" includes 1.2.3 - parse(">=1.2.3 || 1.2.5").to_s includes 1.2.3 - parse(">=1.2.3 || 1.2.5").to_s excludes 1.2.3-0 - invalid expressions - raise an appropriate exception - "reasonably close" expressions - parse("~ 1.2.3").to_s includes 1.2.5 - "~1.2.3-alpha" excludes 1.2.4-0 - "~ 1.2.3" excludes 1.3.0-0 - parse("~ 1.2.3-alpha").to_s excludes 1.2.4-0 - "~1" includes 1.0.0 - "~1.2.3-alpha" includes 1.2.3 - "~ 1.2" excludes 1.3.0-0 - parse("~1.2").to_s includes 1.2.999 - parse("~1").to_s excludes 2.0.0-0 - "~ 1.2.3-alpha" stringifies as >=1.2.3-alpha <1.3.0 - "~1.2" excludes 1.2.0-0 - "~ 1.2" stringifies as >=1.2.0 <1.3.0 - parse("~1.2.3-alpha").to_s excludes 1.2.4-0 - "~ 1.2.3-alpha" excludes 1.2.3-alph - parse("~1").to_s includes 1.999.999 - "~1.2" stringifies as >=1.2.0 <1.3.0 - "~1" excludes 1.0.0-0 - parse("~ 1.2.3-alpha").to_s includes 1.2.3 - parse("~ 1.2").to_s includes 1.2.999 - parse("~1.2").to_s excludes 1.1.999 - "~1" includes 1.999.999 - parse("~1.2.3-alpha").to_s excludes 1.2.3-alph - parse("~ 1").to_s includes 1.0.0 - parse("~ 1").to_s excludes 0.999.999 - parse("~ 1.2").to_s excludes 1.1.999 - parse("~ 1.2.3").to_s includes 1.2.3 - "~1.2.3-alpha" excludes 1.2.3-alph - "~ 1.2.3" excludes 1.2.3-0 - "~1.2" excludes 1.3.0-0 - parse("~1").to_s includes 1.0.0 - parse("~1.2.3").to_s includes 1.2.3 - parse("~1.2").to_s excludes 1.2.0-0 - parse("~1.2.3").to_s excludes 1.3.0-0 - "~ 1" includes 1.999.999 - "~ 1.2.3" includes 1.2.5 - parse("~ 1.2.3").to_s excludes 1.2.3-0 - parse("~1.2.3").to_s excludes 1.2.2 - "~1" excludes 0.999.999 - parse("~1.2").to_s excludes 1.3.0-0 - "~ 1" excludes 0.999.999 - "~1.2" includes 1.2.999 - "~1" stringifies as >=1.0.0 <2.0.0 - "~ 1.2" includes 1.2.999 - "~ 1" excludes 1.0.0-0 - parse("~ 1").to_s excludes 2.0.0-0 - parse("~ 1.2").to_s excludes 1.3.0-0 - "~ 1" excludes 2.0.0-0 - "~ 1.2" includes 1.2.0 - "~ 1.2.3" stringifies as >=1.2.3 <1.3.0 - "~ 1.2.3-alpha" includes 1.2.3 - "~1.2.3" stringifies as >=1.2.3 <1.3.0 - "~1.2" excludes 1.1.999 - parse("~1.2.3").to_s excludes 1.2.3-0 - "~ 1" stringifies as >=1.0.0 <2.0.0 - "~ 1" includes 1.0.0 - parse("~1").to_s excludes 0.999.999 - "~ 1.2" excludes 1.2.0-0 - parse("~ 1.2.3-alpha").to_s includes 1.2.3-alpha - parse("~1").to_s excludes 1.0.0-0 - "~ 1.2.3" includes 1.2.3 - parse("~1.2.3-alpha").to_s includes 1.2.3 - parse("~ 1.2").to_s includes 1.2.0 - "~1.2.3" includes 1.2.3 - "~1.2" includes 1.2.0 - parse("~ 1.2.3-alpha").to_s excludes 1.2.3-alph - parse("~ 1").to_s includes 1.999.999 - "~ 1.2.3-alpha" includes 1.2.3-alpha - "~1.2.3" excludes 1.2.3-0 - parse("~1.2.3").to_s includes 1.2.5 - "~1.2.3-alpha" stringifies as >=1.2.3-alpha <1.3.0 - "~1" excludes 2.0.0-0 - parse("~ 1.2").to_s excludes 1.2.0-0 - "~ 1.2" excludes 1.1.999 - "~1.2.3-alpha" includes 1.2.3-alpha - parse("~1.2.3-alpha").to_s includes 1.2.3-alpha - parse("~1.2").to_s includes 1.2.0 - "~1.2.3" excludes 1.2.2 - parse("~ 1").to_s excludes 1.0.0-0 - "~ 1.2.3" excludes 1.2.2 - parse("~ 1.2.3").to_s excludes 1.2.2 - "~1.2.3" includes 1.2.5 - "~1.2.3" excludes 1.3.0-0 - "~ 1.2.3-alpha" excludes 1.2.4-0 - parse("~ 1.2.3").to_s excludes 1.3.0-0 - unioned expressions - "1.2 <1.2.5" excludes 1.2.5-0 - parse("1 <=1.2.5").to_s includes 1.0.0 - parse("1 <=1.2.5").to_s excludes 0.999.999 - "1 <=1.2.5" includes 1.0.0 - "<1.0.0 >2.0.0" stringifies as <0.0.0 - parse("1 <=1.2.5").to_s excludes 1.0.0-0 - parse("1.2 <1.2.5").to_s excludes 1.2.5-0 - "1 <=1.2.5" excludes 0.999.999 - parse("<1.0.0 >2.0.0").to_s excludes 0.0.0-0 - parse("1 <=1.2.5").to_s excludes 1.2.6-0 - ">1.0.0 >2.0.0 >=3.0.0 <5.0.0" excludes 5.0.0-0 - "1.2 <1.2.5" includes 1.2.0 - ">1.0.0 >2.0.0 >=3.0.0 <5.0.0" stringifies as >=3.0.0 <5.0.0 - "<1.0.0 >2.0.0" excludes 0.0.0-0 - "1.2 <1.2.5" excludes 1.1.999 - "1.2 <1.2.5" excludes 1.9.0 - "1 <=1.2.5" includes 1.2.5 - "1 <=1.2.5" excludes 1.0.0-0 - ">1.0.0 >2.0.0 >=3.0.0 <5.0.0" includes 3.0.0 - "<1.0.0 >2.0.0" excludes 0.0.0 - parse(">1.0.0 >2.0.0 >=3.0.0 <5.0.0").to_s excludes 5.0.0-0 - parse(">1.0.0 >2.0.0 >=3.0.0 <5.0.0").to_s includes 4.999.999 - parse("<1.0.0 >2.0.0").to_s excludes 0.0.0 - parse("1.2 <1.2.5").to_s includes 1.2.0 - "1.2 <1.2.5" excludes 1.2.0-0 - parse("1 <=1.2.5").to_s excludes 1.9.0 - parse("1 <=1.2.5").to_s includes 1.2.5 - parse("1.2 <1.2.5").to_s excludes 1.2.0-0 - parse(">1.0.0 >2.0.0 >=3.0.0 <5.0.0").to_s excludes 2.999.999 - ">1.0.0 >2.0.0 >=3.0.0 <5.0.0" includes 4.999.999 - "1.2 <1.2.5" includes 1.2.4 - parse("1.2 <1.2.5").to_s includes 1.2.4 - "1.2 <1.2.5" stringifies as >=1.2.0 <1.2.5 - "1 <=1.2.5" excludes 1.9.0 - parse(">1.0.0 >2.0.0 >=3.0.0 <5.0.0").to_s includes 3.0.0 - ">1.0.0 >2.0.0 >=3.0.0 <5.0.0" excludes 3.0.0-0 - parse("1.2 <1.2.5").to_s excludes 1.1.999 - "1 <=1.2.5" excludes 1.2.6-0 - parse(">1.0.0 >2.0.0 >=3.0.0 <5.0.0").to_s excludes 3.0.0-0 - ">1.0.0 >2.0.0 >=3.0.0 <5.0.0" excludes 2.999.999 - parse("1.2 <1.2.5").to_s excludes 1.9.0 - "1 <=1.2.5" stringifies as >=1.0.0 <=1.2.5 open-ended expressions - ">= 1.2.3-alpha" includes 1.2.3-alpha0 - "> 1.2.3-alpha" includes 999.0.0 - "<=1.2.3-alpha" excludes 1.2.3-alpha.0 - parse("<1.2.3-alpha").to_s excludes 1.2.3-alpha + parse(">1.2.3").to_s includes 999.0.0 + parse("< 1.2.3").to_s includes 0.0.0 + parse(">1.2.3-alpha").to_s includes 1.2.3-alpha.0 + parse("< 1.2.3-alpha").to_s excludes 2.0.0 "<=1.2.3-alpha" excludes 1.2.3-alphb - parse("<=1.2.3").to_s excludes 0.0.0-0 - ">=1.2.3" stringifies as >=1.2.3 - "< 1.2.3-alpha" excludes 2.0.0 - parse("> 1.2.3").to_s excludes 1.2.3 - "> 1.2.3-alpha" includes 1.2.3-alpha.0 - "<1.2.3-alpha" excludes 1.2.3-alpha - "<=1.2.3-alpha" excludes 1.2.3-alpha0 + "< 1.2.3" excludes 2.0.0 + parse("<=1.2.3-alpha").to_s excludes 1.2.3-alpha0 + parse("< 1.2.3-alpha").to_s includes 1.2.3-alph parse("<1.2.3-alpha").to_s includes 0.0.0 - parse("<= 1.2.3").to_s includes 1.2.3 - parse(">= 1.2.3-alpha").to_s excludes 1.2.4-alpha - parse("<= 1.2.3-alpha").to_s excludes 1.2.3-alpha0 - parse("<1.2.3-alpha").to_s excludes 0.0.0-0 - parse(">1.2.3-alpha").to_s excludes 1.2.3-alpha - parse(">1.2.3-alpha").to_s includes 1.2.3-alpha0 - parse("<= 1.2.3").to_s excludes 1.2.3-0 - ">1.2.3-alpha" stringifies as >1.2.3-alpha - parse("<1.2.3-alpha").to_s includes 1.2.3-alph - "<=1.2.3-alpha" includes 1.2.3-alpha + ">1.2.3-alpha" includes 1.2.3-alpha0 + parse("<=1.2.3-alpha").to_s includes 1.2.3-alpha + parse(">= 1.2.3-alpha").to_s includes 1.2.3-alpha0 "<=1.2.3-alpha" includes 0.0.0 - parse("<=1.2.3-alpha").to_s excludes 1.2.3-alpha0 + parse(">=1.2.3-alpha").to_s includes 1.2.3-alpha + "<=1.2.3" excludes 1.2.3-0 + parse("<1.2.3").to_s excludes 2.0.0 "<1.2.3" excludes 1.2.3-0 - "<= 1.2.3-alpha" excludes 0.0.0-0 + ">=1.2.3-alpha" stringifies as >=1.2.3-alpha + "<1.2.3" excludes 0.0.0-0 + parse("<=1.2.3").to_s excludes 0.0.0-0 + parse("<= 1.2.3-alpha").to_s excludes 0.0.0-0 + ">=1.2.3-alpha" includes 999.0.0 + "<= 1.2.3" excludes 0.0.0-0 + ">1.2.3" stringifies as >1.2.3 + "<1.2.3" stringifies as <1.2.3 + "<1.2.3-alpha" includes 0.0.0 + ">= 1.2.3" excludes 1.2.3-0 + "<1.2.3-alpha" excludes 2.0.0 + parse(">= 1.2.3").to_s excludes 1.2.2 + ">=1.2.3" stringifies as >=1.2.3 ">=1.2.3" excludes 1.2.2 - "<1.2.3" excludes 2.0.0 - "< 1.2.3-alpha" excludes 1.2.3-alpha - "<1.2.3-alpha" excludes 0.0.0-0 parse("<=1.2.3-alpha").to_s excludes 1.2.3-alpha.0 - ">1.2.3" excludes 1.2.4-0 - parse("<1.2.3").to_s excludes 0.0.0-0 - parse("<=1.2.3-alpha").to_s includes 0.0.0 - "< 1.2.3" excludes 1.2.3-0 - parse("<1.2.3-alpha").to_s excludes 2.0.0 - "> 1.2.3" includes 999.0.0 - "<= 1.2.3" includes 1.2.3 - parse("> 1.2.3-alpha").to_s includes 1.2.3-alpha.0 - ">1.2.3" excludes 1.2.3 - parse("<1.2.3").to_s excludes 1.2.3-0 - "<= 1.2.3-alpha" stringifies as <=1.2.3-alpha + "<1.2.3-alpha" excludes 1.2.3-alpha + parse("<= 1.2.3").to_s excludes 0.0.0-0 + ">= 1.2.3" stringifies as >=1.2.3 + "< 1.2.3-alpha" excludes 2.0.0 + "<1.2.3-alpha" stringifies as <1.2.3-alpha "<= 1.2.3-alpha" excludes 1.2.3-alphb - parse("<=1.2.3").to_s includes 0.0.0 + "> 1.2.3" excludes 1.2.4-0 + parse("<= 1.2.3-alpha").to_s includes 0.0.0 + ">1.2.3" includes 999.0.0 + "<=1.2.3-alpha" includes 1.2.3-alpha + ">= 1.2.3-alpha" includes 999.0.0 + parse("< 1.2.3").to_s excludes 1.2.3-0 + parse(">= 1.2.3").to_s excludes 1.2.3-0 + parse(">=1.2.3").to_s excludes 1.2.2 + "< 1.2.3-alpha" excludes 0.0.0-0 + parse("<1.2.3-alpha").to_s excludes 1.2.3-alpha + "> 1.2.3-alpha" includes 1.2.3-alpha.0 + ">= 1.2.3-alpha" includes 1.2.3-alpha + "<= 1.2.3-alpha" includes 0.0.0 + "< 1.2.3" excludes 1.2.3-0 + "> 1.2.3-alpha" stringifies as >1.2.3-alpha + ">= 1.2.3-alpha" excludes 1.2.4-alpha + parse("<1.2.3-alpha").to_s excludes 0.0.0-0 + parse(">= 1.2.3-alpha").to_s includes 1.2.3-alpha + ">1.2.3-alpha" excludes 1.2.3-alpha + parse("> 1.2.3-alpha").to_s includes 999.0.0 + parse("> 1.2.3").to_s excludes 1.2.3 + "< 1.2.3" stringifies as <1.2.3 + parse(">=1.2.3-alpha").to_s includes 1.2.3-alpha0 + ">=1.2.3" includes 999.0.0 + ">= 1.2.3" includes 999.0.0 + ">=1.2.3" excludes 1.2.3-0 "<=1.2.3" excludes 0.0.0-0 - parse("<= 1.2.3").to_s includes 0.0.0 + parse(">=1.2.3-alpha").to_s excludes 1.2.3-alph + "<=1.2.3" includes 1.2.3 + "<=1.2.3-alpha" excludes 1.2.3-alpha.0 + "<=1.2.3-alpha" excludes 0.0.0-0 + "< 1.2.3" includes 0.0.0 ">=1.2.3-alpha" includes 1.2.3-alpha - "<= 1.2.3" includes 0.0.0 - parse("<=1.2.3-alpha").to_s includes 1.2.3-alpha + ">= 1.2.3-alpha" includes 1.2.3-alpha0 parse("<=1.2.3").to_s excludes 1.2.3-0 - parse("<=1.2.3-alpha").to_s excludes 0.0.0-0 - "< 1.2.3-alpha" includes 0.0.0 - parse(">1.2.3").to_s includes 999.0.0 - parse(">=1.2.3").to_s excludes 1.2.3-0 - "< 1.2.3" includes 1.2.2 - parse(">= 1.2.3").to_s excludes 1.2.3-0 - parse(">1.2.3").to_s excludes 1.2.4-0 - ">1.2.3" stringifies as >1.2.3 + "> 1.2.3-alpha" includes 1.2.3-alpha0 + "> 1.2.3" stringifies as >1.2.3 + parse(">= 1.2.3-alpha").to_s excludes 1.2.4-alpha + parse("> 1.2.3-alpha").to_s includes 1.2.3-alpha.0 + parse("<1.2.3").to_s excludes 1.2.3-0 + "<1.2.3" excludes 2.0.0 + parse("< 1.2.3").to_s includes 1.2.2 + parse(">= 1.2.3-alpha").to_s excludes 1.2.3-alph + ">1.2.3" excludes 1.2.3 "< 1.2.3-alpha" includes 1.2.3-alph + parse("<=1.2.3-alpha").to_s excludes 0.0.0-0 + parse(">= 1.2.3").to_s includes 999.0.0 + ">1.2.3-alpha" includes 1.2.3-alpha.0 ">=1.2.3-alpha" includes 1.2.3-alpha0 - parse("> 1.2.3-alpha").to_s includes 999.0.0 - parse("> 1.2.3").to_s includes 999.0.0 - ">1.2.3" includes 999.0.0 - ">1.2.3-alpha" includes 999.0.0 - "<=1.2.3" includes 1.2.3 - parse(">1.2.3").to_s excludes 1.2.3 - parse(">=1.2.3-alpha").to_s includes 1.2.3-alpha0 - "< 1.2.3" excludes 0.0.0-0 - "> 1.2.3" excludes 1.2.4-0 - ">= 1.2.3-alpha" excludes 1.2.3-alph - "<1.2.3" includes 0.0.0 - parse("<= 1.2.3-alpha").to_s includes 1.2.3-alpha - "<=1.2.3-alpha" stringifies as <=1.2.3-alpha - "< 1.2.3-alpha" stringifies as <1.2.3-alpha - "<= 1.2.3-alpha" excludes 1.2.3-alpha0 - "<1.2.3" excludes 0.0.0-0 - parse(">= 1.2.3-alpha").to_s includes 1.2.3-alpha0 + parse("<=1.2.3").to_s includes 1.2.3 + "> 1.2.3" includes 999.0.0 + "> 1.2.3-alpha" includes 999.0.0 + parse("<= 1.2.3-alpha").to_s excludes 1.2.3-alpha0 + parse(">1.2.3-alpha").to_s excludes 1.2.3-alpha + parse("< 1.2.3").to_s excludes 2.0.0 + parse("<=1.2.3-alpha").to_s includes 0.0.0 parse(">=1.2.3-alpha").to_s excludes 1.2.4-alpha - "> 1.2.3-alpha" excludes 1.2.3-alpha - ">= 1.2.3" stringifies as >=1.2.3 - "<= 1.2.3" excludes 0.0.0-0 + "<=1.2.3-alpha" excludes 1.2.3-alpha0 + "< 1.2.3-alpha" excludes 1.2.3-alpha + parse("<= 1.2.3-alpha").to_s excludes 1.2.3-alphb + parse("> 1.2.3").to_s excludes 1.2.4-0 + "<1.2.3-alpha" excludes 0.0.0-0 + "<= 1.2.3" stringifies as <=1.2.3 + "<= 1.2.3" excludes 1.2.3-0 + parse("> 1.2.3-alpha").to_s excludes 1.2.3-alpha + parse("< 1.2.3-alpha").to_s includes 0.0.0 ">=1.2.3-alpha" excludes 1.2.4-alpha - parse(">=1.2.3-alpha").to_s includes 1.2.3-alpha + "<= 1.2.3-alpha" excludes 1.2.3-alpha0 + "< 1.2.3-alpha" includes 0.0.0 + ">1.2.3-alpha" includes 999.0.0 parse("< 1.2.3").to_s excludes 0.0.0-0 - "<1.2.3-alpha" excludes 2.0.0 - "<1.2.3" stringifies as <1.2.3 - parse(">= 1.2.3").to_s includes 999.0.0 - "> 1.2.3" excludes 1.2.3 - "< 1.2.3" stringifies as <1.2.3 - ">=1.2.3-alpha" excludes 1.2.3-alph - ">=1.2.3" excludes 1.2.3-0 + parse(">1.2.3-alpha").to_s includes 1.2.3-alpha0 + parse(">= 1.2.3-alpha").to_s includes 999.0.0 "<= 1.2.3-alpha" excludes 1.2.3-alpha.0 + ">= 1.2.3-alpha" stringifies as >=1.2.3-alpha + parse("> 1.2.3").to_s includes 999.0.0 + ">= 1.2.3-alpha" excludes 1.2.3-alph "<1.2.3-alpha" includes 1.2.3-alph - ">= 1.2.3" includes 999.0.0 - parse(">=1.2.3-alpha").to_s includes 999.0.0 - "< 1.2.3" includes 0.0.0 - parse("<= 1.2.3-alpha").to_s includes 0.0.0 + "< 1.2.3-alpha" stringifies as <1.2.3-alpha + parse("<1.2.3-alpha").to_s includes 1.2.3-alph + "< 1.2.3" includes 1.2.2 + "<= 1.2.3-alpha" stringifies as <=1.2.3-alpha + "<1.2.3" includes 0.0.0 + parse(">=1.2.3").to_s excludes 1.2.3-0 + "<=1.2.3" stringifies as <=1.2.3 + parse("<= 1.2.3-alpha").to_s includes 1.2.3-alpha parse("> 1.2.3-alpha").to_s includes 1.2.3-alpha0 - parse("> 1.2.3-alpha").to_s excludes 1.2.3-alpha - parse("<=1.2.3").to_s includes 1.2.3 - parse("< 1.2.3").to_s excludes 2.0.0 - ">=1.2.3-alpha" stringifies as >=1.2.3-alpha - ">1.2.3-alpha" includes 1.2.3-alpha.0 - "<=1.2.3-alpha" excludes 0.0.0-0 - "<1.2.3-alpha" includes 0.0.0 - ">= 1.2.3" excludes 1.2.3-0 - parse("<= 1.2.3-alpha").to_s excludes 1.2.3-alphb - parse("<= 1.2.3").to_s excludes 0.0.0-0 - "<= 1.2.3" stringifies as <=1.2.3 - parse(">1.2.3-alpha").to_s includes 1.2.3-alpha.0 - ">= 1.2.3-alpha" stringifies as >=1.2.3-alpha - "<1.2.3-alpha" stringifies as <1.2.3-alpha - parse("<1.2.3").to_s excludes 2.0.0 - parse(">=1.2.3").to_s excludes 1.2.2 - ">= 1.2.3-alpha" excludes 1.2.4-alpha - parse("> 1.2.3").to_s excludes 1.2.4-0 - ">=1.2.3-alpha" includes 999.0.0 + "> 1.2.3-alpha" excludes 1.2.3-alpha + parse(">1.2.3").to_s excludes 1.2.4-0 + ">1.2.3" excludes 1.2.4-0 + parse(">1.2.3").to_s excludes 1.2.3 + parse("< 1.2.3-alpha").to_s excludes 0.0.0-0 + parse("< 1.2.3-alpha").to_s excludes 1.2.3-alpha + "<= 1.2.3" includes 0.0.0 + "< 1.2.3" excludes 0.0.0-0 + parse(">=1.2.3-alpha").to_s includes 999.0.0 + ">= 1.2.3" excludes 1.2.2 + parse("<= 1.2.3").to_s includes 1.2.3 + "<=1.2.3" includes 0.0.0 + "<= 1.2.3" includes 1.2.3 parse(">1.2.3-alpha").to_s includes 999.0.0 - "< 1.2.3-alpha" excludes 0.0.0-0 - ">= 1.2.3-alpha" includes 1.2.3-alpha - parse("< 1.2.3-alpha").to_s includes 0.0.0 - parse("<= 1.2.3-alpha").to_s excludes 0.0.0-0 - parse(">= 1.2.3").to_s excludes 1.2.2 + parse("<=1.2.3").to_s includes 0.0.0 + "<=1.2.3-alpha" stringifies as <=1.2.3-alpha + parse("<1.2.3").to_s excludes 0.0.0-0 "<1.2.3" includes 1.2.2 - ">1.2.3-alpha" excludes 1.2.3-alpha - "<=1.2.3" stringifies as <=1.2.3 - parse(">= 1.2.3-alpha").to_s includes 999.0.0 - parse(">=1.2.3-alpha").to_s excludes 1.2.3-alph - "> 1.2.3-alpha" stringifies as >1.2.3-alpha - parse("<= 1.2.3-alpha").to_s excludes 1.2.3-alpha.0 - "< 1.2.3" excludes 2.0.0 - parse("<1.2.3").to_s includes 0.0.0 + parse("<=1.2.3-alpha").to_s excludes 1.2.3-alphb "<= 1.2.3-alpha" includes 1.2.3-alpha - parse("<1.2.3").to_s includes 1.2.2 + ">=1.2.3-alpha" excludes 1.2.3-alph + parse("<= 1.2.3").to_s includes 0.0.0 + parse("<1.2.3").to_s includes 0.0.0 + parse("<= 1.2.3-alpha").to_s excludes 1.2.3-alpha.0 parse(">=1.2.3").to_s includes 999.0.0 - ">= 1.2.3-alpha" includes 999.0.0 - parse("< 1.2.3-alpha").to_s excludes 1.2.3-alpha - parse("< 1.2.3").to_s excludes 1.2.3-0 - parse(">= 1.2.3-alpha").to_s excludes 1.2.3-alph - ">1.2.3-alpha" includes 1.2.3-alpha0 - "> 1.2.3" stringifies as >1.2.3 - "<=1.2.3" includes 0.0.0 - "<= 1.2.3" excludes 1.2.3-0 - ">=1.2.3" includes 999.0.0 - "<= 1.2.3-alpha" includes 0.0.0 - "> 1.2.3-alpha" includes 1.2.3-alpha0 - ">= 1.2.3" excludes 1.2.2 - parse(">= 1.2.3-alpha").to_s includes 1.2.3-alpha - parse("< 1.2.3").to_s includes 1.2.2 - parse("< 1.2.3-alpha").to_s includes 1.2.3-alph - parse("< 1.2.3").to_s includes 0.0.0 - parse("< 1.2.3-alpha").to_s excludes 0.0.0-0 - parse("<=1.2.3-alpha").to_s excludes 1.2.3-alphb - "<=1.2.3" excludes 1.2.3-0 - parse("< 1.2.3-alpha").to_s excludes 2.0.0 + "<= 1.2.3-alpha" excludes 0.0.0-0 + "> 1.2.3" excludes 1.2.3 + parse("<1.2.3-alpha").to_s excludes 2.0.0 + parse("<= 1.2.3").to_s excludes 1.2.3-0 + parse("<1.2.3").to_s includes 1.2.2 + ">1.2.3-alpha" stringifies as >1.2.3-alpha loose version expressions - parse("1.2.3").to_s excludes 1.2.3-alpha - parse("1.2.3-alpha").to_s excludes 1.2.3-beta + "1.X" includes 1.999.0 + parse("1.2.X").to_s includes 1.2.0 + parse("1").to_s includes 1.0.0 + "1.2.3-alpha" excludes 1.2.3-beta + parse("1").to_s includes 1.999.0 "1.2.x" excludes 1.3.0-0 - "1.2.3" excludes 1.2.3-alpha - parse("1.2").to_s excludes 1.1.999 - "1.2.X" includes 1.2.999 - parse("1.X").to_s includes 1.0.0 - parse("1.2.x").to_s excludes 1.1.999 + parse("1.X").to_s includes 1.999.0 + "1.2.x" includes 1.2.999 + parse("1.2.3").to_s excludes 1.2.4-alpha + parse("1.x").to_s excludes 2.0.0-0 + "1.x" stringifies as >=1.0.0 <2.0.0 + parse("1.2").to_s includes 1.2.999 + "1.2.X" excludes 1.2.0-alpha + "1.X" excludes 0.999.999 "1.2.3-alpha" stringifies as 1.2.3-alpha - parse("1.x").to_s excludes 1.0.0-alpha + "1.X" includes 1.0.0 + parse("1.2.3-alpha").to_s includes 1.2.3-alpha + "1.2.x" stringifies as >=1.2.0 <1.3.0 + parse("1.2").to_s excludes 1.2.0-alpha + "1.x" excludes 2.0.0-0 "1" excludes 2.0.0-0 - "1" stringifies as >=1.0.0 <2.0.0 - "1.x" includes 1.999.0 - parse("1.2.X").to_s excludes 1.2.0-alpha - "1.2" excludes 1.2.0-alpha - parse("1.x").to_s excludes 2.0.0-0 - parse("1").to_s excludes 2.0.0-0 - "1.2.3" includes 1.2.3 - parse("1.2.x").to_s includes 1.2.999 - parse("1").to_s excludes 0.999.999 - "1.2.3" excludes 1.2.4-alpha + parse("1.2.X").to_s includes 1.2.999 + "1.2.X" includes 1.2.999 + parse("1.2.3-alpha").to_s excludes 1.2.3-beta + "1" includes 1.0.0 parse("1.2.X").to_s excludes 1.1.999 - parse("1.2.3").to_s includes 1.2.3 "1.2.x" includes 1.2.0 - "1.2.3-alpha" excludes 1.2.3-beta - parse("1.2").to_s includes 1.2.0 - parse("1.2.3-alpha").to_s includes 1.2.3-alpha - "1.X" excludes 2.0.0-0 - parse("1.X").to_s includes 1.999.0 - "1.x" includes 1.0.0 - "1.X" excludes 0.999.999 + parse("1.X").to_s includes 1.0.0 + parse("1").to_s excludes 2.0.0-0 + parse("1.X").to_s excludes 1.0.0-alpha + parse("1.2.X").to_s excludes 1.3.0-0 + parse("1").to_s excludes 1.0.0-alpha "1.2.X" excludes 1.1.999 - parse("1.2").to_s excludes 1.3.0-0 - parse("1.X").to_s excludes 0.999.999 - "1.2" includes 1.2.0 - "1.2.X" includes 1.2.0 - "1.X" includes 1.999.0 - parse("1").to_s includes 1.0.0 - "1.X" excludes 1.0.0-alpha - "1.X" stringifies as >=1.0.0 <2.0.0 - "1.2" stringifies as >=1.2.0 <1.3.0 - "1.x" excludes 0.999.999 + parse("1.2.X").to_s excludes 1.2.0-alpha parse("1.X").to_s excludes 2.0.0-0 "1.2" includes 1.2.999 + "1" excludes 1.0.0-alpha + "1.x" includes 1.0.0 + parse("1.X").to_s excludes 0.999.999 + parse("1.2").to_s includes 1.2.0 parse("1.2.x").to_s excludes 1.2.0-alpha - "1.2.3" excludes 1.2.2 - parse("1.2.x").to_s includes 1.2.0 - parse("1.2").to_s excludes 1.2.0-alpha - parse("1.2").to_s includes 1.2.999 - "1" excludes 0.999.999 - "1.2.x" stringifies as >=1.2.0 <1.3.0 - "1.2.X" excludes 1.3.0-0 - "1.2.x" includes 1.2.999 - "1.2.3-alpha" excludes 1.2.3-999 - "1.2.3" stringifies as 1.2.3 - parse("1.x").to_s excludes 0.999.999 - "1.2.x" excludes 1.1.999 - parse("1.2.3").to_s excludes 1.2.4-alpha - "1.x" stringifies as >=1.0.0 <2.0.0 parse("1.x").to_s includes 1.0.0 - "1.2" excludes 1.3.0-0 - parse("1.2.3-alpha").to_s excludes 1.2.3-999 + "1.2.X" includes 1.2.0 + parse("1.2.3").to_s excludes 1.2.2 + "1.2.x" excludes 1.1.999 + parse("1").to_s excludes 0.999.999 "1.2.X" stringifies as >=1.2.0 <1.3.0 - parse("1.2.x").to_s excludes 1.3.0-0 - "1" includes 1.0.0 - parse("1.X").to_s excludes 1.0.0-alpha - "1" excludes 1.0.0-alpha + parse("1.2.x").to_s includes 1.2.999 + parse("1.2").to_s excludes 1.3.0-0 + parse("1.x").to_s excludes 1.0.0-alpha "1.x" excludes 1.0.0-alpha - "1.x" excludes 2.0.0-0 - "1.X" includes 1.0.0 - "1.2" excludes 1.1.999 + "1.X" stringifies as >=1.0.0 <2.0.0 parse("1.x").to_s includes 1.999.0 - "1.2.x" excludes 1.2.0-alpha - parse("1").to_s excludes 1.0.0-alpha - parse("1.2.X").to_s includes 1.2.999 - parse("1").to_s includes 1.999.0 + "1.2.3" excludes 1.2.3-alpha + "1.x" includes 1.999.0 + "1.2" includes 1.2.0 + "1.X" excludes 1.0.0-alpha + parse("1.2.3").to_s includes 1.2.3 + "1.2.3" excludes 1.2.2 "1" includes 1.999.0 - parse("1.2.3").to_s excludes 1.2.2 - parse("1.2.X").to_s excludes 1.3.0-0 + "1.2.X" excludes 1.3.0-0 + "1.2.3" excludes 1.2.4-alpha + "1.2" excludes 1.3.0-0 + parse("1.2.x").to_s excludes 1.3.0-0 + parse("1.2.3").to_s excludes 1.2.3-alpha + "1" excludes 0.999.999 + "1.2" excludes 1.2.0-alpha + "1.2" stringifies as >=1.2.0 <1.3.0 + "1" stringifies as >=1.0.0 <2.0.0 + parse("1.2.3-alpha").to_s excludes 1.2.3-999 + "1.X" excludes 2.0.0-0 + "1.2.x" excludes 1.2.0-alpha + "1.2.3" includes 1.2.3 + parse("1.x").to_s excludes 0.999.999 + "1.x" excludes 0.999.999 + parse("1.2.x").to_s includes 1.2.0 + "1.2" excludes 1.1.999 + parse("1.2").to_s excludes 1.1.999 + "1.2.3" stringifies as 1.2.3 + "1.2.3-alpha" excludes 1.2.3-999 "1.2.3-alpha" includes 1.2.3-alpha - "1.2.X" excludes 1.2.0-alpha - parse("1.2.X").to_s includes 1.2.0 + parse("1.2.x").to_s excludes 1.1.999 + unioned expressions + parse("1.2 <1.2.5").to_s excludes 1.9.0 + "1.2 <1.2.5" excludes 1.2.0-0 + "1 <=1.2.5" includes 1.2.5 + parse(">1.0.0 >2.0.0 >=3.0.0 <5.0.0").to_s excludes 3.0.0-0 + parse("1.2 <1.2.5").to_s excludes 1.2.0-0 + parse("1 <=1.2.5").to_s excludes 1.2.6-0 + "1 <=1.2.5" excludes 0.999.999 + parse("1.2 <1.2.5").to_s includes 1.2.4 + parse("1.2 <1.2.5").to_s includes 1.2.0 + parse("1 <=1.2.5").to_s excludes 0.999.999 + parse(">1.0.0 >2.0.0 >=3.0.0 <5.0.0").to_s includes 4.999.999 + ">1.0.0 >2.0.0 >=3.0.0 <5.0.0" includes 3.0.0 + "<1.0.0 >2.0.0" excludes 0.0.0 + parse("1.2 <1.2.5").to_s excludes 1.1.999 + "<1.0.0 >2.0.0" excludes 0.0.0-0 + parse(">1.0.0 >2.0.0 >=3.0.0 <5.0.0").to_s includes 3.0.0 + "<1.0.0 >2.0.0" stringifies as <0.0.0 + parse(">1.0.0 >2.0.0 >=3.0.0 <5.0.0").to_s excludes 5.0.0-0 + ">1.0.0 >2.0.0 >=3.0.0 <5.0.0" includes 4.999.999 + "1.2 <1.2.5" includes 1.2.0 + parse("1 <=1.2.5").to_s includes 1.0.0 + parse("1.2 <1.2.5").to_s excludes 1.2.5-0 + parse("<1.0.0 >2.0.0").to_s excludes 0.0.0-0 + "1 <=1.2.5" includes 1.0.0 + "1 <=1.2.5" excludes 1.0.0-0 + parse(">1.0.0 >2.0.0 >=3.0.0 <5.0.0").to_s excludes 2.999.999 + "1.2 <1.2.5" excludes 1.2.5-0 + parse("<1.0.0 >2.0.0").to_s excludes 0.0.0 + ">1.0.0 >2.0.0 >=3.0.0 <5.0.0" excludes 3.0.0-0 + parse("1 <=1.2.5").to_s excludes 1.9.0 + ">1.0.0 >2.0.0 >=3.0.0 <5.0.0" excludes 2.999.999 + "1.2 <1.2.5" excludes 1.9.0 + "1.2 <1.2.5" stringifies as >=1.2.0 <1.2.5 + parse("1 <=1.2.5").to_s includes 1.2.5 + "1 <=1.2.5" stringifies as >=1.0.0 <=1.2.5 + ">1.0.0 >2.0.0 >=3.0.0 <5.0.0" excludes 5.0.0-0 + "1.2 <1.2.5" excludes 1.1.999 + "1 <=1.2.5" excludes 1.2.6-0 + parse("1 <=1.2.5").to_s excludes 1.0.0-0 + ">1.0.0 >2.0.0 >=3.0.0 <5.0.0" stringifies as >=3.0.0 <5.0.0 + "1.2 <1.2.5" includes 1.2.4 + "1 <=1.2.5" excludes 1.9.0 + "reasonably close" expressions + "~ 1.2" excludes 1.1.999 + parse("~1.2.3-alpha").to_s excludes 1.2.4-0 + parse("~1.2").to_s includes 1.2.999 + parse("~ 1.2.3-alpha").to_s excludes 1.2.3-alph + "~ 1.2" includes 1.2.999 + "~1.2.3-alpha" excludes 1.2.3-alph + "~1.2" stringifies as >=1.2.0 <1.3.0 + parse("~1").to_s includes 1.0.0 + "~1.2" includes 1.2.999 + "~ 1.2.3" stringifies as >=1.2.3 <1.3.0 + "~ 1" excludes 1.0.0-0 + "~1" excludes 1.0.0-0 + parse("~1.2.3").to_s excludes 1.2.3-0 + parse("~ 1.2.3").to_s excludes 1.2.3-0 + "~ 1.2.3-alpha" includes 1.2.3 + "~1.2.3-alpha" excludes 1.2.4-0 + "~ 1.2" excludes 1.3.0-0 + parse("~ 1").to_s includes 1.999.999 + parse("~1.2.3-alpha").to_s excludes 1.2.3-alph + parse("~ 1.2.3-alpha").to_s includes 1.2.3 + "~ 1.2.3-alpha" includes 1.2.3-alpha + parse("~1").to_s excludes 1.0.0-0 + parse("~ 1").to_s excludes 1.0.0-0 + parse("~1.2").to_s excludes 1.2.0-0 + parse("~ 1.2").to_s excludes 1.1.999 + "~1.2.3-alpha" stringifies as >=1.2.3-alpha <1.3.0 + "~1.2.3" includes 1.2.5 + parse("~ 1").to_s includes 1.0.0 + "~ 1.2" includes 1.2.0 + "~ 1.2.3-alpha" excludes 1.2.3-alph + "~1.2" includes 1.2.0 + "~1.2.3-alpha" includes 1.2.3 + "~1.2" excludes 1.1.999 + parse("~1.2.3").to_s excludes 1.2.2 + "~ 1.2" stringifies as >=1.2.0 <1.3.0 + parse("~1.2.3").to_s excludes 1.3.0-0 + parse("~ 1.2").to_s excludes 1.2.0-0 + "~ 1.2.3" includes 1.2.5 + "~1.2.3" excludes 1.2.3-0 + parse("~ 1.2.3-alpha").to_s excludes 1.2.4-0 + parse("~1.2").to_s excludes 1.3.0-0 + "~ 1.2.3" excludes 1.2.3-0 + "~1.2" excludes 1.3.0-0 + "~1.2.3-alpha" includes 1.2.3-alpha + "~1.2.3" excludes 1.2.2 + "~1.2.3" excludes 1.3.0-0 + parse("~1").to_s includes 1.999.999 + parse("~1.2").to_s includes 1.2.0 + parse("~ 1.2.3").to_s includes 1.2.5 + parse("~ 1.2.3").to_s includes 1.2.3 + "~ 1" excludes 0.999.999 + parse("~1").to_s excludes 0.999.999 + parse("~1.2.3-alpha").to_s includes 1.2.3-alpha + parse("~ 1.2.3-alpha").to_s includes 1.2.3-alpha + parse("~1.2.3-alpha").to_s includes 1.2.3 + "~1" stringifies as >=1.0.0 <2.0.0 + parse("~ 1").to_s excludes 0.999.999 + "~1.2" excludes 1.2.0-0 + "~1" excludes 2.0.0-0 + "~1.2.3" includes 1.2.3 + "~ 1.2.3-alpha" excludes 1.2.4-0 + parse("~ 1.2.3").to_s excludes 1.3.0-0 + "~1.2.3" stringifies as >=1.2.3 <1.3.0 + parse("~1.2.3").to_s includes 1.2.5 + "~1" excludes 0.999.999 + "~1" includes 1.0.0 + parse("~ 1.2").to_s includes 1.2.0 + "~ 1.2.3" includes 1.2.3 + parse("~ 1").to_s excludes 2.0.0-0 + "~1" includes 1.999.999 + parse("~1").to_s excludes 2.0.0-0 + "~ 1" includes 1.0.0 + parse("~1.2.3").to_s includes 1.2.3 + parse("~ 1.2").to_s includes 1.2.999 + "~ 1.2" excludes 1.2.0-0 + parse("~ 1.2.3").to_s excludes 1.2.2 + "~ 1" stringifies as >=1.0.0 <2.0.0 + "~ 1" includes 1.999.999 + "~ 1" excludes 2.0.0-0 + "~ 1.2.3-alpha" stringifies as >=1.2.3-alpha <1.3.0 + "~ 1.2.3" excludes 1.2.2 + parse("~1.2").to_s excludes 1.1.999 + parse("~ 1.2").to_s excludes 1.3.0-0 + "~ 1.2.3" excludes 1.3.0-0 + inclusive range expressions + parse("1.2.3 - 1.3.4").to_s includes 1.3.4 + parse("1.2.3 - 1.3.4-alpha").to_s excludes 1.2.2 + "1.2.3-alpha - 1.3.4" excludes 1.2.3-alph + "1.2.3 - 1.3.4" stringifies as >=1.2.3 <=1.3.4 + "1.2.3 - 1.3.4-alpha" includes 1.3.4-alpha + "1.2.3-alpha - 1.3.4-alpha" excludes 1.3.5 + "1.2.3 - 1.3.4" excludes 1.2.3-0 + parse("1.2.3 - 1.3.4-alpha").to_s excludes 1.3.4-alpha0 + "1.2.3-alpha - 1.3.4-alpha" excludes 1.3.4-alpha0 + parse("1.2.3-alpha - 1.3.4").to_s includes 1.2.3-alpha + parse("1.2.3 - 1.3.4").to_s excludes 1.3.5-0 + "1.2.3-alpha - 1.3.4" includes 1.2.3-alpha + parse("1.2.3-alpha - 1.3.4").to_s includes 1.3.4 + parse("1.2.3 - 1.3.4-alpha").to_s includes 1.3.4-alpha + "1.2.3 - 1.3.4-alpha" stringifies as >=1.2.3 <=1.3.4-alpha + "1.2.3 - 1.3.4" includes 1.2.3 + parse("1.2.3-alpha - 1.3.4-alpha").to_s includes 1.2.3-alpha + parse("1.2.3-alpha - 1.3.4").to_s excludes 1.2.3-alph + "1.2.3-alpha - 1.3.4-alpha" includes 1.3.4-alpha + "1.2.3-alpha - 1.3.4" excludes 1.3.5-0 + parse("1.2.3-alpha - 1.3.4").to_s excludes 1.3.5-0 + "1.2.3-alpha - 1.3.4-alpha" stringifies as >=1.2.3-alpha <=1.3.4-alpha + "1.2.3 - 1.3.4-alpha" includes 1.2.3 + parse("1.2.3-alpha - 1.3.4-alpha").to_s excludes 1.2.3-alph + "1.2.3 - 1.3.4" includes 1.3.4 + parse("1.2.3-alpha - 1.3.4-alpha").to_s includes 1.3.4-alpha + "1.2.3-alpha - 1.3.4" includes 1.3.4 + "1.2.3 - 1.3.4-alpha" excludes 1.2.3-0 + parse("1.2.3 - 1.3.4-alpha").to_s includes 1.2.3 + parse("1.2.3 - 1.3.4-alpha").to_s excludes 1.3.5 + "1.2.3 - 1.3.4" excludes 1.3.5-0 + "1.2.3 - 1.3.4-alpha" excludes 1.3.4-alpha0 + parse("1.2.3 - 1.3.4").to_s includes 1.2.3 + "1.2.3-alpha - 1.3.4-alpha" excludes 1.2.3-alph + parse("1.2.3 - 1.3.4").to_s excludes 1.2.3-0 + parse("1.2.3 - 1.3.4").to_s excludes 1.2.2 + "1.2.3-alpha - 1.3.4-alpha" includes 1.2.3-alpha + "1.2.3 - 1.3.4-alpha" excludes 1.2.2 + "1.2.3 - 1.3.4-alpha" excludes 1.3.5 + "1.2.3-alpha - 1.3.4" stringifies as >=1.2.3-alpha <=1.3.4 + "1.2.3 - 1.3.4" excludes 1.2.2 + parse("1.2.3-alpha - 1.3.4-alpha").to_s excludes 1.3.5 + parse("1.2.3 - 1.3.4-alpha").to_s excludes 1.2.3-0 + parse("1.2.3-alpha - 1.3.4-alpha").to_s excludes 1.3.4-alpha0 + ored expressions + non-overlapping + parse("1.2.3 || 1.2.5").to_s excludes 1.2.5-0 + "1.2.3 || 1.2.5" excludes 1.2.3-0 + parse("1.2.3 || 1.2.5").to_s excludes 1.2.3-0 + "1.2.3 || 1.2.5" stringifies as 1.2.3 || 1.2.5 + returns nil on end + "1.2.3 || 1.2.5" excludes 1.2.4 + "1.2.3 || 1.2.5" includes 1.2.5 + parse("1.2.3 || 1.2.5").to_s includes 1.2.3 + parse("1.2.3 || 1.2.5").to_s includes 1.2.5 + returns nil on exclude_end? + "1.2.3 || 1.2.5" includes 1.2.3 + returns nil on begin + "1.2.3 || 1.2.5" excludes 1.2.5-0 + returns nil on exclude_begin? + parse("1.2.3 || 1.2.5").to_s excludes 1.2.4 + overlapping + ">=1.2.3 || 1.2.5" includes 1.2.4 + parse(">=1.2.3 || 1.2.5").to_s excludes 1.2.4-0 + parse(">=1.2.3 <=1.2.5 || >=1.2.5 <1.3.0").to_s excludes 1.2.3-0 + ">=1.2.3 <=1.2.5 || >=1.2.5 <1.3.0" stringifies as >=1.2.3 <1.3.0 + parse(">=1.2.3 || 1.2.5").to_s excludes 1.2.3-0 + ">=1.2.3 || 1.2.5" excludes 1.2.4-0 + ">=1.2.3 <=1.2.5 || >=1.2.5 <1.3.0" includes 1.2.6 + ">=1.2.3 <=1.2.5 || >=1.2.5 <1.3.0" excludes 1.2.6-0 + parse(">=1.2.3 || 1.2.5").to_s includes 1.2.3 + parse(">=1.2.3 <=1.2.5 || >=1.2.5 <1.3.0").to_s includes 1.2.3 + parse(">=1.2.3 <=1.2.5 || >=1.2.5 <1.3.0").to_s includes 1.2.6 + ">=1.2.3 || 1.2.5" excludes 1.2.3-0 + ">=1.2.3 <=1.2.5 || >=1.2.5 <1.3.0" excludes 1.2.3-0 + ">=1.2.3 || 1.2.5" includes 1.2.3 + parse(">=1.2.3 || 1.2.5").to_s includes 1.2.4 + ">=1.2.3 || 1.2.5" stringifies as >=1.2.3 + ">=1.2.3 <=1.2.5 || >=1.2.5 <1.3.0" includes 1.2.3 + parse(">=1.2.3 <=1.2.5 || >=1.2.5 <1.3.0").to_s excludes 1.2.6-0 + adjacent + ">=1.2.3 <1.2.5 || >=1.2.5 <1.3.0" excludes 1.2.3-0 + parse("1.2.3 || 1.2.4 || 1.2.5").to_s excludes 1.2.5-0 + ">=1.2.3 <1.2.5 || >=1.2.5 <1.3.0" stringifies as >=1.2.3 <1.3.0 + parse(">=1.2.3 <1.2.5 || >=1.2.5 <1.3.0").to_s includes 1.2.3 + "1.2.3 || 1.2.4 || 1.2.5" includes 1.2.5 + returns nil on exclude_end? + parse(">=1.2.3 <1.2.5 || >=1.2.5 <1.3.0").to_s excludes 1.2.3-0 + ">=1.2.3 <1.2.5 || >=1.2.5 <1.3.0" includes 1.2.6 + "1.2.3 || 1.2.4 || 1.2.5" stringifies as >=1.2.3 <=1.2.5 + parse("1.2.3 || 1.2.4 || 1.2.5").to_s excludes 1.2.3-0 + returns nil on end + "1.2.3 || 1.2.4 || 1.2.5" excludes 1.2.3-0 + "1.2.3 || 1.2.4 || 1.2.5" excludes 1.2.5-0 + parse(">=1.2.3 <1.2.5 || >=1.2.5 <1.3.0").to_s excludes 1.2.6-0 + parse(">=1.2.3 <1.2.5 || >=1.2.5 <1.3.0").to_s includes 1.2.6 + returns expected begin + returns nil on exclude_begin? + parse("1.2.3 || 1.2.4 || 1.2.5").to_s includes 1.2.3 + parse("1.2.3 || 1.2.4 || 1.2.5").to_s includes 1.2.5 + "1.2.3 || 1.2.4 || 1.2.5" includes 1.2.3 + ">=1.2.3 <1.2.5 || >=1.2.5 <1.3.0" includes 1.2.3 + ">=1.2.3 <1.2.5 || >=1.2.5 <1.3.0" excludes 1.2.6-0 + invalid expressions + raise an appropriate exception The version - 1.0.0 should not be above range (*) - 0.2.9 should not be below range <=2.0.0 - 3.1.3 should be above range 1.2.* || 2.* - 0.2.3 should be below range ~1 - 2.0.0 should not be below range <=2.0.0 - 3.0.0 should be above range <=2.0.0 - 0.5.5 should not be above range ~v0.5.4-pre(>=0.5.4-pre <0.6.0) - 1.2.3 should not be below range ~1 - 1.2.3 should not be below range ~> 1 - 3.0.0 should be above range 2.x.x - 0.1.2 should be below range ~1.0 - 1.2.4 should not be below range 0.1.20 || 1.2.4 + 0.6.2 should be below range >=0.7.x + 0.2.4 should not be below range >=0.2.3 <=0.2.4 + 3.1.3 should be above range 2.x.x + 0.2.4 should not be above range >=0.2.3 || <0.0.1(>=0.2.3 || <0.0.1) + 3.2.0 should not be above range ^0.1.0 || ~3.0.1 || 5.0.0(>=0.1.0 <0.2.0 || >=3.0.1 <3.1.0 || 5.0.0) + 0.1.20 should not be above range 0.1.20 || 1.2.4(0.1.20 || 1.2.4) + 0.6.2 should not be below range <=0.7.x + 1.0.0 should not be below range >=1 + 0.7.0-asdf should not be above range >=0.7.x(>=0.7.0) + 1.2.3 should not be below range 1.2.* + 1.2.9 should be below range >=2.0.0 + 1.3.4 should not be above range ||(*) + 0.6.0-asdf should be below range =0.7.x + 2.4.0 should not be above range ~2.4(>=2.4.0 <2.5.0) 1.1.3 should be below range 1.2.* || 2.* + 1.2.4 should not be above range 0.1.20 || >1.2.4(0.1.20 || >1.2.4) + 1.2.1 should be below range ~1.2.2 + 0.2.3 should be below range ~1 + 2.0.0 should not be above range ^1.0.0 || ~2.0.1(>=1.0.0 <2.0.0 || >=2.0.1 <2.1.0) 0.0.0-0 should not be above range ^1(>=1.0.0 <2.0.0) - 2.0.0 should be below range >2.0.0 - 1.2.3-foo should not be above range *(*) - 1.1.1 should not be below range < 1.2 - 1.0.1 should be above range 1.0.0 - 1.0.1 should not be above range > 1.0.0(>1.0.0) - 1.2.3 should not be below range * - 0.2.5 should not be below range >0.2.3 >0.2.4 <=0.2.5 - 0.1.20 should not be below range 0.1.20 || 1.2.4 - 1.9999.9999 should not be below range <2.0.0 - 3.2.0 should not be below range ^0.1.0 || ~3.0.1 || 5.0.0 - 1.1.0 should be above range ~1.0 - 1.2.9 should be below range >=2.0.0 - 2.1.3 should not be above range 1.2.x || 2.x(>=1.2.0 <1.3.0 || >=2.0.0 <3.0.0) - 1.9999.9999 should be below range >=2.0.0 + 2.3.5 should be below range ~2.4 + 2.2.9 should be above range <=2.0.0 + 1.9999.9999 should not be above range <= 2.0.0(<=2.0.0) + 0.0.0 should be below range 1.0.0 + 3.5.0 should not be below range ^0.1.0 || ~3.0.1 || >4 <=5.0.0 + 1.0.0 should not be above range 1.0.0(1.0.0) 0.2.3 should be below range ~>1 - 1.0.1 should not be above range >=1.0.0(>=1.0.0) - 0.2.4 should not be above range >=0.2.3 <=0.2.4(>=0.2.3 <=0.2.4) - 2.0.0 should be above range 1.0.0 - 1.3.3 should be above range 1.2.x - 2.0.0 should not be above range 1.0.0 - 2.0.0(>=1.0.0 <=2.0.0) - 3.2.9 should be above range <=2.0.0 - 1.2.3 should not be below range 1.0.0 - 2.0.0 - 0.7.0 should be above range <0.7.x - 1.2.4 should not be above range 0.1.20 || 1.2.4(0.1.20 || 1.2.4) - 1.2.9 should be below range >=2.0.0 - 0.1.97 should not be above range >=0.1.97(>=0.1.97) + 1.0.1 should not be below range >= 1.0.0 + 0.1.20 should not be below range 0.1.20 || 1.2.4 + 0.2.9 should not be below range <=2.0.0 + 1.2.3 should not be below range ~1 + 1.0.1 should not be below range >=1.0.0 2.4.1 should be above range 2.3 + 1.0.0 should not be below range >= 1.0.0 + 1.0.2 should not be below range ~1.0 + 2.2.3 should be above range ~>1 + 1.0.1 should not be below range >1.0.0 + 1.2.3 should not be below range 1.2.* || 2.* + 2.4.5 should not be below range ~2.4 + 2.4.5 should not be above range ~2.4(>=2.4.0 <2.5.0) + 2.3.0 should be below range ~2.4 + 1.2.4 should not be below range 0.1.20 || 1.2.4 + 1.1.3 should be below range 1.2.* + 0.6.0 should be above range ~v0.5.4-pre + 1.2.3 should not be above range 1.2.*(>=1.2.0 <1.3.0) + 1.2.3 should not be above range 1.2.* || 2.*(>=1.2.0 <1.3.0 || >=2.0.0 <3.0.0) + 0.2.9 should not be below range <2.0.0 + 1.3.0 should be above range 1.2.x + 1.2.3 should not be above range 1.2.x(>=1.2.0 <1.3.0) + 0.6.1-1 should not be below range ~0.6.1-1 1.2.3 should not be below range 0.1.20 || 1.2.4 - 0.1.97 should not be above range >=0.1.97(>=0.1.97) - 1.0.0 should be below range 2 - 0.0.0-beta should be below range 1 - 0.2.3 should not be above range >=0.2.3 || <0.0.1(>=0.2.3 || <0.0.1) - 1.0.0 should not be below range >=1.0.0 - 3.1.3 should be above range 2.x.x - 2.1.3 should not be above range 2.*.*(>=2.0.0 <3.0.0) - 1.3.0 should be above range ~1.2.2 - 2.1.3 should not be below range 1.2.* || 2.* - 1.0.0 should not be above range >= 1.0.0(>=1.0.0) - 1.1.0 should not be below range >= 1.0.0 - 1.0.0-beta should be below range > 1 - 1.0.0 should be below range >=2.0.0 - 1.2.3 should not be above range 1.2.x || 2.x(>=1.2.0 <1.3.0 || >=2.0.0 <3.0.0) - 1.0.0 should not be below range >=1 - 1.0.0-beta should not be above range ^0.1.0 || ~3.0.1 || 5.0.0(>=0.1.0 <0.2.0 || >=3.0.1 <3.1.0 || 5.0.0) - 1.0.0-beta should not be below range ~1.0.0-alpha 5.0.1 should be above range 2.*.* + 2.1.3 should not be above range 2.*.*(>=2.0.0 <3.0.0) + 0.2.9 should not be above range < 2.0.0(<2.0.0) + 1.1.0 should be above range ~1.0 + 1.0.0 should be below range >1 2.9999.9999 should be above range <=2.0.0 + 1.0.0-beta should not be below range ^0.1.0 || ~3.0.1 || 5.0.0 + 0.2.4 should not be above range >=0.2.3 <=0.2.4(>=0.2.3 <=0.2.4) 1.2.0 should be below range >1.2 + 3.2.0 should be below range ~>3.2.1 + 3.2.3 should be above range ~> 1 + 2.4.0 should not be below range ~2.4 + 2.2.2 should be below range 2.3 + 0.1.0 should be below range ~ 1.0 + 1.0.0 should be above range <1 + 3.5.0 should not be above range ^0.1.0 || ~3.0.1 || >4 <=5.0.0(>=0.1.0 <0.2.0 || >=3.0.1 <3.1.0 || 5.0.0) + 0.2.9 should not be above range <= 2.0.0(<=2.0.0) + 3.0.0 should be above range 1.2.x || 2.x + 1.0.1 should not be above range > 1.0.0(>1.0.0) + 0.5.4-alpha should be below range ~v0.5.4-pre + 1.2.3 should not be above range 0.1.20 || 1.2.4(0.1.20 || 1.2.4) + 1.0.1-beta1 should be above range 1.0.0 + 1.1.0 should not be below range ~ 1.0 + 5.0.0-0 should not be below range ^0.1.0 || ~3.0.1 || 5.0.0 + 1.3.3 should be above range 1.2.* + 2.0.0 should not be below range 1.0.0 - 2.0.0 + 0.7.0-asdf should be below range >=0.7.x 2.1.2 should not be above range 2(>=2.0.0 <3.0.0) - 0.2.4 should be below range ~>1 + 0.6.0 should be below range >=0.7.x + 2.1.3 should not be above range 1.2.* || 2.*(>=1.2.0 <1.3.0 || >=2.0.0 <3.0.0) + 0.2.4 should not be above range >=*(>=0.0.0) + 1.1.0 should not be below range >1.0.0 + 1.0.0 should be below range 2.x.x + 0.0.0-beta should be below range 1 + 4.0.0 should not be below range ^3.0.0 + 0.5.4 should not be below range ~v0.5.4-pre + 2.0.0 should not be above range <=2.0.0(<=2.0.0) + 1.2.3 should not be below range 1.2.x + 1.0.0 should not be above range >=1(>=1.0.0) 1.1.0 should not be above range > 1.0.0(>1.0.0) - 0.6.2 should not be below range <=0.7.x - 0.1.5 should be below range 0.1.20 || 1.2.4 - 1.9999.9999 should not be above range < 2.0.0(<2.0.0) - 0.8.2 should be above range =0.7.x - 1.0.0 should not be below range >= 1 - 0.2.9 should not be below range <= 2.0.0 - 1.3.0 should be above range ~1.2.2 - 1.0.1 should not be below range > 1.0.0 - 0.2.9 should not be below range < 2.0.0 - 1.2.3 should not be above range 1.2.*(>=1.2.0 <1.3.0) + 1.0.0 should not be above range >= 1.0.0(>=1.0.0) + 1.1.3 should be below range 2.*.* + 0.6.2 should be below range =0.7.x + 1.1.0 should not be above range >=1.0.0(>=1.0.0) + 2.0.0 should be below range >2.0.0 + 0.2.9 should not be above range <2.0.0(<2.0.0) + 2.5.0 should be above range ~2.4 + 1.9999.9999 should be below range 2 + 1.9999.9999 should not be above range <2.0.0(<2.0.0) + 1.2.3 should not be below range * + 2.0.0 should not be above range ^3.0.0(>=3.0.0 <4.0.0) + 1.0.0 should be below range 1.2.x || 2.x + 1.1.0 should be above range ~ 1.0 + 1.2.9 should be below range >=2.0.0 + 2.0.0 should not be above range <= 2.0.0(<=2.0.0) + 1.0.0-beta should be below range 1 + 1.0.0 should be below range >=2.0.0 + 3.1.2 should be above range 2 0.2.3 should be below range ~> 1 - 2.3.1 should not be above range 2.3(>=2.3.0 <2.4.0) - 1.2.3 should not be above range ~>1(>=1.0.0 <2.0.0) - 0.6.1-1 should not be below range ~0.6.1-1 - 1.0.2 should not be above range ~ 1.0(>=1.0.0 <1.1.0) - 3.2.2 should not be above range ~>3.2.1(>=3.2.1 <3.3.0) + 0.7.2 should not be above range >=0.7.x(>=0.7.0) + 1.0.2 should not be above range ~1.0(>=1.0.0 <1.1.0) + 1.0.0 should be below range 2 + 1.2.3 should not be above range ~1(>=1.0.0 <2.0.0) + 2.0.1 should be above range 1.0.0 - 2.0.0 + 1.1.3 should be below range 1.2.x || 2.x + 1.2.3 should not be below range * + 0.2.9 should not be below range < 2.0.0 2.0.0-beta should be above range 1 - 2.3.5 should be below range ~2.4 - 1.0.0 should be below range 1.2.x || 2.x - 1.0.0 should not be above range >=1(>=1.0.0) - 3.2.2 should not be below range ~>3.2.1 - 2.1.1 should be above range <=2.0.0 - 1.2.3 should not be below range ~>1 - 1.9999.9999 should not be above range <2.0.0(<2.0.0) - 1.0.0-beta should be above range <1 - 1.0.0 should not be below range >= 1.0.0 - 2.4.0 should not be above range ~2.4(>=2.4.0 <2.5.0) - 0.7.1-1 should be above range ~0.6.1-1 - 1.0.0 should be below range 2.x.x - 1.2.3 should not be below range 1.2.* + 2.1.3 should not be below range 2.x.x + 2.1.3 should not be below range 2.*.* + 0.6.1-1 should not be above range ~0.6.1-1(>=0.6.1-1 <0.7.0) + 2.1.2 should not be below range 2 1.1.3 should be below range 1.2.* - 0.0.0 should be below range 1.0.0 - 1.9999.9999 should not be below range < 2.0.0 - 0.2.9 should not be above range <= 2.0.0(<=2.0.0) - 0.2.4 should not be below range >=* - 3.1.3 should be above range 1.2.x || 2.x - 1.1.1 should not be below range <1.2 - 2.3.1 should not be below range 2.3 - 2.9.9 should not be below range 1.0.0 - 2.0.0 - 1.0.0 should be below range >1 - 1.0.0 should not be above range >=1.0.0(>=1.0.0) - 0.8.0 should be above range =0.7.x - 0.2.5 should not be above range >0.2.3 >0.2.4 <=0.2.5(>0.2.4 <=0.2.5) - 1.1.1 should not be above range < 1.2(<1.2.0) - 0.7.0-asdf should not be above range >=0.7.x(>=0.7.0) - 1.1.1 should be below range >=2.0.0 - 1.0.1 should not be below range >1.0.0 - 0.6.2 should not be above range <=0.7.x(<0.8.0) - 2.4.5 should not be above range ~2.4(>=2.4.0 <2.5.0) + 2.1.3 should not be below range 1.2.x || 2.x + 1.1.0 should be below range 1.2.x + 2.1.3 should not be below range 1.2.* || 2.* 2.0.0-beta should be above range 1 - 0.5.4 should not be above range ~v0.5.4-pre(>=0.5.4-pre <0.6.0) - 1.1.3 should be below range 1.2.* - 2.9999.9999 should be above range <2.0.0 + 0.0.1 should be below range 1.0.0 2.3.0 should be below range ~2.4 - 1.1.0 should be above range ~ 1.0 - 0.6.0-asdf should be below range =0.7.x - 2.0.0 should not be above range <= 2.0.0(<=2.0.0) - 1.1.3 should be below range 2.*.* + 3.0.0 should be above range <=2.0.0 + 1.0.0-0 should be below range ^1 + 1.1.1 should not be below range < 1.2 + 0.2.3 should not be below range >=0.2.3 || <0.0.1 + 0.7.2 should not be below range >=0.7.x + 1.0.0-beta.1 should be below range 1.0.0-beta.2 + 2.5.0 should be above range ~2.4 + 2.0.0 should not be below range ^1.0.0 || ~2.0.1 + 2.0.0 should not be above range 1.0.0 - 2.0.0(>=1.0.0 <=2.0.0) + 1.0.2 should not be above range ~ 1.0(>=1.0.0 <1.1.0) + 0.0.1 should be below range 1.0.0 - 2.0.0 + 0.2.3 should not be above range >=0.2.3 || <0.0.1(>=0.2.3 || <0.0.1) + 0.0.0 should not be below range >=0.2.3 || <0.0.1 1.2.3 should not be below range 1.2.* || 2.* - 3.0.0 should be above range 2 - 0.5.5 should not be below range ~v0.5.4-pre - 1.3.0 should be above range 1.2.x + 3.3.2 should be above range ~>3.2.1 + 0.7.0-asdf should not be above range =0.7.x(>=0.7.0 <0.8.0) 1.3.4 should not be below range || + 0.0.0 should be below range ~1.0 3.3.0 should be above range ~>3.2.1 1.2.3 should not be above range 1.2.* || 2.*(>=1.2.0 <1.3.0 || >=2.0.0 <3.0.0) - 2.2.3 should be above range 1.0.0 - 2.0.0 - 2.1.3 should not be below range 2.*.* - 0.2.9 should not be above range < 2.0.0(<2.0.0) - 3.1.2 should be above range 2 - 1.0.0-beta should not be below range ^0.1.0 || ~3.0.1 || 5.0.0 - 1.2.1 should be below range > 1.2 - 2.0.1 should be above range 1.0.0 - 2.0.0 - 1.0.1-beta1 should be above range 1.0.0 - 1.2.1 should be below range ~1.2.2 - 1.0.0 should not be above range 1.0.0(1.0.0) - 4.0.0 should not be below range ^3.0.0 - 0.7.0-asdf should be below range >=0.7.x - 1.1.0 should not be below range >=1.0.0 - 1.1.1 should not be above range <1.2(<1.2.0) - 1.1.2 should be above range ~1.0 - 0.2.3 should be below range ~1 - 0.2.4 should not be below range >=0.2.3 <=0.2.4 - 2.5.5 should be above range ~2.4 + 0.7.2 should not be above range =0.7.x(>=0.7.0 <0.8.0) 0.7.2 should be above range <0.7.x - 1.9999.9999 should not be below range <=2.0.0 - 1.0.1 should not be below range >= 1.0.0 - 2.4.5 should not be below range ~2.4 - 1.2.3 should not be above range 1.2.* || 2.*(>=1.2.0 <1.3.0 || >=2.0.0 <3.0.0) - 0.5.4-alpha should be below range ~v0.5.4-pre - 0.1.20 should not be above range 0.1.20 || 1.2.4(0.1.20 || 1.2.4) 1.2.3 should not be above range *(*) - 0.2.9 should not be above range <2.0.0(<2.0.0) - 2.2.9 should be above range <2.0.0 - 0.6.1-pre should be above range ~v0.5.4-pre - 1.1.0 should be below range 1.2.x - 1.2.3 should not be above range 1.2.x(>=1.2.0 <1.3.0) - 0.1.97 should not be below range >=0.1.97 - 1.2.3 should not be above range ~> 1(>=1.0.0 <2.0.0) - 2.4.2 should be above range 2.3 - 1.0.0 should not be above range >= 1(>=1.0.0) - 1.3.3 should be above range 1.2.* - 3.5.0 should not be above range ^0.1.0 || ~3.0.1 || >4 <=5.0.0(>=0.1.0 <0.2.0 || >=3.0.1 <3.1.0 || 5.0.0) - 1.3.3 should be above range 1.2.* - 0.6.1-1 should not be above range ~0.6.1-1(>=0.6.1-1 <0.7.0) - 1.0.1 should not be below range >=1.0.0 - 2.0.0 should not be above range ^1.0.0 || ~2.0.1(>=1.0.0 <2.0.0 || >=2.0.1 <2.1.0) - 1.0.0 should not be below range =0.1.0 - 0.6.0 should be above range ~v0.5.4-pre - 1.2.3 should not be below range 1.2.x - 1.2.3 should not be below range 1.2.x || 2.x - 1.0.0 should be above range <1 - 1.0.0 should not be below range + 2.3.1 should not be below range 2.3 + 0.1.5 should be below range 0.1.20 || 1.2.4 + 1.3.0 should be above range ~1.2.2 + 1.2.3 should not be above range 1.2.x || 2.x(>=1.2.0 <1.3.0 || >=2.0.0 <3.0.0) + 1.9999.9999 should not be above range <=2.0.0(<=2.0.0) + 1.2.3 should not be below range ~>1 + 1.9999.9999 should not be above range < 2.0.0(<2.0.0) + 3.2.2 should not be above range ~>3.2.1(>=3.2.1 <3.3.0) + 0.7.2 should not be below range =0.7.x + 0.2.9 should not be above range <=2.0.0(<=2.0.0) + 4.0.0 should be above range 1.2.* || 2.* + 2.9999.9999 should be above range <2.0.0 1.0.0-beta should be below range >1 - 2.0.0 should be above range <2.0.0 - 0.6.2 should be below range =0.7.x - 3.5.0 should not be below range ^0.1.0 || ~3.0.1 || >4 <=5.0.0 - 0.8.0-asdf should be above range =0.7.x - 1.2.3 should not be above range ~1(>=1.0.0 <2.0.0) - 1.0.2 should not be below range ~1.0 - 0.2.9 should not be below range <2.0.0 - 1.2.1 should be below range ~1.2.2 - 0.5.4-alpha should be below range ~v0.5.4-pre - 2.5.0 should be above range ~2.4 - 1.9999.9999 should be below range 2 - 0.5.4 should not be below range ~v0.5.4-pre - 0.7.0-asdf should not be above range =0.7.x(>=0.7.0 <0.8.0) - 1.1.0 should not be below range >1.0.0 - 1.0.1 should not be above range >1.0.0(>1.0.0) - 2.4.0 should not be below range ~2.4 - 1.0.0-beta.1 should be below range 1.0.0-beta.2 - 1.0.0-beta should not be above range 1(>=1.0.0 <2.0.0) - 0.2.3 should be below range 1.0.0 - 2.0.0 - 2.2.4 should be above range ~>1 - 0.7.2 should not be above range =0.7.x(>=0.7.0 <0.8.0) - 2.2.1 should be below range 2.3 - 0.0.0 should be below range ~1.0 - 1.0.0 should not be below range 1.0.0 - 1.0.0-beta should not be below range ^1.0.0-alpha - 1.2.3 should not be below range x + 1.2.1 should be above range < 1.2 + 1.2.4 should not be above range 0.1.20 || 1.2.4(0.1.20 || 1.2.4) + 2.1.3 should not be above range 1.2.x || 2.x(>=1.2.0 <1.3.0 || >=2.0.0 <3.0.0) + 0.7.1-1 should be above range ~0.6.1-1 + 1.2.9 should be below range >2.0.0 + 1.0.0-beta should be above range <1 1.1.0 should not be below range > 1.0.0 - 3.2.3 should be above range ~> 1 - 1.9999.9999 should not be below range <= 2.0.0 - 0.9.9 should not be above range 1.0.0 - 2.0.0(>=1.0.0 <=2.0.0) - 0.0.0 should not be above range >=0.2.3 || <0.0.1(>=0.2.3 || <0.0.1) - 2.0.0 should not be above range <=2.0.0(<=2.0.0) 1.1.9999 should be below range 1.2.* || 2.* - 2.1.2 should not be below range 2 - 2.1.3 should not be below range 2.x.x - 3.0.0 should be above range 1.2.x || 2.x - 2.3.2 should be below range ~>3.2.1 - 0.6.0 should be below range =0.7.x - 1.0.0-beta should be above range < 1 - 0.6.2 should be below range >=0.7.x - 3.3.2 should be above range ~>3.2.1 - 0.2.4 should not be above range >=*(>=0.0.0) - 0.0.1 should be below range 1.0.0 - 2.0.0 - 1.1.0 should not be above range >=1.0.0(>=1.0.0) - 2.1.3 should not be above range 1.2.* || 2.*(>=1.2.0 <1.3.0 || >=2.0.0 <3.0.0) - 1.1.3 should be below range 1.2.x + 1.9999.9999 should not be below range < 2.0.0 + 2.2.1 should be below range 2.3 + 1.0.0 should not be above range (*) 2.1.3 should not be above range 2.x.x(>=2.0.0 <3.0.0) - 0.7.2 should not be below range >=0.7.x - 1.0.0-beta should be below range 1 - 0.2.4 should not be above range >=0.2.3 || <0.0.1(>=0.2.3 || <0.0.1) - 2.1.3 should not be below range 1.2.x || 2.x - 2.0.0 should not be below range ^1.0.0 || ~2.0.1 - 1.2.3 should not be above range *(*) - 3.2.0 should not be above range ^0.1.0 || ~3.0.1 || 5.0.0(>=0.1.0 <0.2.0 || >=3.0.1 <3.1.0 || 5.0.0) - 1.2.3 should not be above range x(*) - 2.0.0 should not be above range ^3.0.0(>=3.0.0 <4.0.0) - 2.0.0 should not be below range 1.0.0 - 2.0.0 - 1.2.4 should not be below range 0.1.20 || >1.2.4 - 1.1.3 should be below range 2.x.x - 0.1.0 should be below range ~ 1.0 - 0.6.0 should be below range >=0.7.x - 2.3.0 should be below range ~2.4 - 1.2.3 should not be below range 1.2.* || 2.* - 1.2.5 should be above range 0.1.20 || 1.2.4 - 1.2.1 should be above range < 1.2 + 0.2.4 should not be below range >=0.2.3 || <0.0.1 + 0.7.0 should be above range <0.7.x + 5.0.0-0 should not be above range ^0.1.0 || ~3.0.1 || 5.0.0(>=0.1.0 <0.2.0 || >=3.0.1 <3.1.0 || 5.0.0) + 0.5.5 should not be below range ~v0.5.4-pre + 1.0.1 should be below range 2.*.* + 2.0.0 should be above range 1.0.0 2.2.3 should be above range ~1 - 1.1.0 should not be below range ~ 1.0 - 2.0.0 should not be below range <= 2.0.0 - 0.0.0 should not be below range >=0.2.3 || <0.0.1 + 2.4.2 should be above range 2.3 + 1.0.0-beta should not be above range ^0.1.0 || ~3.0.1 || 5.0.0(>=0.1.0 <0.2.0 || >=3.0.1 <3.1.0 || 5.0.0) + 0.2.3 should be below range 1.0.0 - 2.0.0 + 1.0.1 should not be above range >1.0.0(>1.0.0) 1.2.0 should be above range <1.2 + 0.1.97 should not be below range >=0.1.97 + 0.2.5 should not be above range >0.2.3 >0.2.4 <=0.2.5(>0.2.4 <=0.2.5) + 3.0.0 should be above range 2.x.x + 2.1.1 should be above range <=2.0.0 + 1.0.1 should not be above range >= 1.0.0(>=1.0.0) + 2.2.9 should be above range <2.0.0 + 2.0.0 should not be below range <= 2.0.0 + 0.5.5 should not be above range ~v0.5.4-pre(>=0.5.4-pre <0.6.0) + 1.2.3 should not be below range 1.0.0 - 2.0.0 1.1.0 should not be above range >1.0.0(>1.0.0) + 2.2.3 should be above range ~1 + 1.2.1 should be below range > 1.2 + 1.0.0-beta should not be below range ~1.0.0-alpha + 1.1.2 should be above range ~1.0 + 0.5.4-alpha should be below range ~v0.5.4-pre + 1.0.0-beta should not be below range ^1.0.0-alpha + 1.1.1 should not be above range <1.2(<1.2.0) 1.2.3 should not be above range 1.0.0 - 2.0.0(>=1.0.0 <=2.0.0) - 2.2.3 should be above range ~>1 + 1.2.3 should not be below range x + 1.2.3-foo should not be above range *(*) + 0.2.4 should be below range ~>1 + 0.8.2 should be above range =0.7.x + 1.0.0-beta should be below range 2 + 1.2.3 should not be below range 1.2.x || 2.x + 2.0.0 should not be below range <=2.0.0 + 1.0.0 should not be below range >=1.0.0 + 3.1.3 should be above range 1.2.x || 2.x + 0.1.97 should not be above range >=0.1.97(>=0.1.97) + 0.1.97 should not be above range >=0.1.97(>=0.1.97) + 0.6.0 should be below range =0.7.x + 1.3.3 should be above range 1.2.* + 1.2.5 should be above range 0.1.20 || 1.2.4 + 1.0.0 should not be below range 1.0.0 + 0.8.0-asdf should be above range =0.7.x + 2.2.4 should be above range ~>1 + 1.2.3 should not be below range ~> 1 + 2.9.9 should not be below range 1.0.0 - 2.0.0 + 1.2.1 should be below range ~1.2.2 + 3.0.0 should be above range 2 + 1.9999.9999 should be below range >=2.0.0 + 3.2.2 should not be below range ~>3.2.1 + 0.2.4 should not be below range >=* + 1.1.1 should not be above range < 1.2(<1.2.0) + 0.6.2 should not be above range <=0.7.x(<0.8.0) + 3.2.0 should not be below range ^0.1.0 || ~3.0.1 || 5.0.0 + 1.0.1 should be above range 1.0.0 + 2.2.3 should be above range 1.0.0 - 2.0.0 + 2.3.1 should not be above range 2.3(>=2.3.0 <2.4.0) + 1.1.0 should not be below range >= 1.0.0 + 1.1.1 should not be below range <1.2 + 1.9999.9999 should not be below range <=2.0.0 + 1.2.3 should not be above range *(*) + 1.1.1 should be below range >=2.0.0 + 0.7.0-asdf should be below range =0.7.x + 1.0.1 should not be below range > 1.0.0 + 2.3.2 should be below range ~>3.2.1 + 1.2.3 should not be above range x(*) 1.1.0 should not be above range >= 1.0.0(>=1.0.0) - 5.0.0-0 should not be below range ^0.1.0 || ~3.0.1 || 5.0.0 - 0.7.2 should not be above range >=0.7.x(>=0.7.0) - 1.9999.9999 should not be above range <=2.0.0(<=2.0.0) - 1.2.3 should not be above range 0.1.20 || 1.2.4(0.1.20 || 1.2.4) - 1.0.1 should not be above range >= 1.0.0(>=1.0.0) - 1.2.9 should be below range >2.0.0 - 0.2.9 should not be above range <=2.0.0(<=2.0.0) - 0.0.1 should be below range 1.0.0 - 1.0.2 should not be below range ~ 1.0 - 1.2.4 should not be above range 0.1.20 || >1.2.4(0.1.20 || >1.2.4) - 5.0.0-0 should not be above range ^0.1.0 || ~3.0.1 || 5.0.0(>=0.1.0 <0.2.0 || >=3.0.1 <3.1.0 || 5.0.0) - 2.0.0 should be below range >2.0.0 - 1.2.3 should not be below range * - 2.2.3 should be above range ~1 - 1.0.0-0 should be below range ^1 - 1.0.2 should not be above range ~1.0(>=1.0.0 <1.1.0) 0.6.1-0 should be below range ~0.6.1-1 - 1.3.4 should not be above range ||(*) - 0.7.0-asdf should be below range =0.7.x - 2.5.0 should be above range ~2.4 - 2.2.2 should be below range 2.3 - 1.0.1 should be below range 2.*.* - 2.2.9 should be above range <=2.0.0 - 1.9999.9999 should not be above range <= 2.0.0(<=2.0.0) + 1.0.0-beta should not be above range 1(>=1.0.0 <2.0.0) + 1.2.3 should not be above range ~> 1(>=1.0.0 <2.0.0) + 1.3.0 should be above range ~1.2.2 + 1.0.2 should not be below range ~ 1.0 + 0.2.5 should not be below range >0.2.3 >0.2.4 <=0.2.5 + 3.2.9 should be above range <=2.0.0 + 1.0.0-beta should be below range > 1 + 1.0.0 should not be below range =0.1.0 + 1.0.0 should not be above range >=1.0.0(>=1.0.0) + 0.5.4 should not be above range ~v0.5.4-pre(>=0.5.4-pre <0.6.0) + 1.1.0 should not be below range >=1.0.0 + 0.2.3 should be below range ~1 + 1.1.3 should be below range 2.x.x + 1.1.3 should be below range 1.2.x 3.1.3 should be above range 2.*.* - 0.7.2 should not be below range =0.7.x - 1.1.3 should be below range 1.2.x || 2.x - 3.2.0 should be below range ~>3.2.1 - 0.2.4 should not be below range >=0.2.3 || <0.0.1 - 1.0.0-beta should be below range 2 - 0.2.3 should not be below range >=0.2.3 || <0.0.1 - 4.0.0 should be above range 1.2.* || 2.* - #intersection - cannot intersect with non-VersionRanges - is commutative - between 10.0.0 - 5.0.0 & 5.0.0 - 1.0.0 - between >=10.0.0 <5.0.0 & 15.0.0 - 10.0.0 - between 10.0.0 - 5.0.0 & >=7.0.0 <1.0.0 - between >=10.0.0 <5.0.0 & 15.0.0 - 9.0.0 - between 10.0.0 - 5.0.0 & >=5.0.0 <1.0.0 - between 10.0.0 - 5.0.0 & 15.0.0 - 11.0.0 - between >=10.0.0 <5.0.0 & 5.0.0 - 1.0.0 - between 10.0.0 - 5.0.0 & 9.0.0 - 6.0.0 - between >=10.0.0 <5.0.0 & 6.0.0 - 1.0.0 - between >=10.0.0 <5.0.0 & >=7.0.0 <1.0.0 - between 10.0.0 - 5.0.0 & 11.0.0 - 4.0.0 - between >=10.0.0 <5.0.0 & >=10.0.0 <5.0.0 - between 10.0.0 - 5.0.0 & 4.0.0 - 1.0.0 - between >=10.0.0 <5.0.0 & 11.0.0 - 4.0.0 - between 10.0.0 - 5.0.0 & 15.0.0 - 9.0.0 - between >=10.0.0 <5.0.0 & 15.0.0 - 11.0.0 - between 10.0.0 - 5.0.0 & >=10.0.0 <5.0.0 - between >=10.0.0 <5.0.0 & 4.0.0 - 1.0.0 - between 10.0.0 - 5.0.0 & 10.0.0 - 5.0.0 - between >=10.0.0 <5.0.0 & >=5.0.0 <1.0.0 - between 10.0.0 - 5.0.0 & 15.0.0 - 10.0.0 - between >=10.0.0 <5.0.0 & 9.0.0 - 6.0.0 - between >=10.0.0 <5.0.0 & 10.0.0 - 5.0.0 - between 10.0.0 - 5.0.0 & 6.0.0 - 1.0.0 - between 10.0.0 - 5.0.0 & - 15.0.0 - 10.0.0 - >=10.0.0 <5.0.0 - 5.0.0 - 1.0.0 - 6.0.0 - 1.0.0 - 9.0.0 - 6.0.0 - >=7.0.0 <1.0.0 - 10.0.0 - 5.0.0 - 15.0.0 - 11.0.0 - 4.0.0 - 1.0.0 - >=5.0.0 <1.0.0 - 11.0.0 - 4.0.0 - 15.0.0 - 9.0.0 - between >=10.0.0 <5.0.0 & - 10.0.0 - 5.0.0 - >=7.0.0 <1.0.0 - 15.0.0 - 9.0.0 - >=5.0.0 <1.0.0 - 5.0.0 - 1.0.0 - 11.0.0 - 4.0.0 - 4.0.0 - 1.0.0 - 6.0.0 - 1.0.0 - 15.0.0 - 10.0.0 - >=10.0.0 <5.0.0 - 9.0.0 - 6.0.0 - 15.0.0 - 11.0.0 - -SemanticPuppet::Dependency::ModuleRelease - #satisfies_dependency? - returns false when the release does not match the dependency name - returns false when there are no dependencies to satisfy - returns true when the release matches the dependency - returns false when the release does not match the dependency version - #== - considers two equal releases to be equal - considers a release different from something that is not a release - considers two releases with different names to be different - considers two releases with different versions to be different - can compare a release with something that is not a release - #<=> - orders releases with different names lexographically - considers releases with greater version numbers greater - considers releases with lesser version numbers lesser - orders releases by name first - #<< - does not mark mis-matching dependency versions as satisfied - marks matching dependencies as satisfied - does not mark mis-matching dependency names as satisfied - #satisfied? - returns false when no dependencies have been satisified - returns false when not all dependencies have been satisified - returns true when all dependencies have been satisified - returns true when there are no dependencies to satisfy - returns false when not all dependency versions have been satisified - #to_s - is expected to =~ /foobarbaz/ - is expected to =~ /1.2.3/ - #dependency_names - lists the names of all the release's dependencies - -SemanticPuppet::Version - #<=> - Spec v1.0.0 - Section 4 - sorted order - Spec v2.0.0 - Section 11 - comparisons against prereleases - prereleases have lower precedence - comparisons without prereleases - sorted order - comparisions between prereleases - identifiers are parsed left-to-right - larger identifier sets have precendence - identical prereleases are equal - numeric identifiers sort numerically - non-numeric identifiers sort ASCIIbetically - sorted order - build metadata does not figure into precendence - non-numeric identifiers have a higher precendence - build metadata does figure into equality - #== - should yield false when compared to something that is not a Version - should yield false when the prerelease differs - should yield false when the patch differs - should yield true when comparing two equal instances - should yield false when the major differs - should yield false when the minor differs - .valid? - Spec v2.0.0 - Section 10 - permits numeric build identifiers of zero - rejects empty build identifiers - rejects empty build metadata - permits non-numeric build identifiers with leading zeroes - permits numeric build identifiers with leading zeroes - rejects build identifiers with non-alphanumerics - Section 2 - rejects versions that contain too few parts - rejects versions that contain too many parts - permits zeroes in version number parts - rejects version numbers containing leading zeroes - rejects versions that contain negative integers - rejects versions that contain non-integers - Section 9 - permits non-numeric prerelease identifiers with leading zeroes - permits non-numeric prerelease identifiers - rejects empty prerelease versions - rejects empty prerelease version identifiers - rejects prerelease identifiers with non-alphanumerics - permits numeric prerelease identifiers of zero - rejects numeric prerelease identifiers with leading zeroes - Spec v1.0.0 - Section 4 - permits numeric prerelease identifiers of zero - rejects numeric prerelease identifiers with leading zeroes - permits non-numeric prerelease identifiers with leading zeroes - rejects prerelease identifiers with non-alphanumerics - rejects empty prerelease versions - Section 2 - rejects versions that contain too few parts - permits zeroes in version number parts - rejects versions that contain too many parts - rejects versions that contain non-integers - .parse - Spec v1.0.0 - Section 4 - rejects empty prerelease versions - permits numeric prerelease identifiers of zero - rejects prerelease identifiers with non-alphanumerics - permits non-numeric prerelease identifiers with leading zeroes - rejects numeric prerelease identifiers with leading zeroes - examples - 1.0.0-beta1 - 1.0.0-beta2 - 1.0.0-alpha1 - 1.0.0-rc1 - Section 2 - rejects versions that contain non-integers - rejects versions that contain too many parts - permits zeroes in version number parts - rejects versions that contain too few parts - examples - 1.11.0 - 1.9.0 - 1.10.0 - Spec v2.0.0 - Section 9 - rejects empty prerelease versions - permits numeric prerelease identifiers of zero - permits non-numeric prerelease identifiers with leading zeroes - rejects empty prerelease version identifiers - rejects numeric prerelease identifiers with leading zeroes - rejects prerelease identifiers with non-alphanumerics - examples - 1.0.0-0.3.7 - 1.0.0-alpha.1 - 1.0.0-alpha - 1.0.0-x.7.z.92 - Section 2 - rejects versions that contain too few parts - rejects versions that contain too many parts - rejects versions that contain non-integers - rejects versions that contain negative integers - permits zeroes in version number parts - rejects version numbers containing leading zeroes - examples - 1.10.0 - 1.9.0 - 1.11.0 - Section 10 - permits numeric build identifiers of zero - permits numeric build identifiers with leading zeroes - rejects empty build identifiers - permits non-numeric build identifiers with leading zeroes - rejects build identifiers with non-alphanumerics - rejects empty build metadata - examples - 1.0.0-alpha+001 - 1.0.0+20130313144700 - 1.0.0-beta+exp.sha.5114f85 - #next - with :patch - does not modify the original version - removes any prerelease information - removes any build information - returns the next patch version - with :major - removes any prerelease information - resets the minor and patch versions to 0 - does not modify the original version - removes any build information - returns the next major version - with :minor - does not modify the original version - returns the next minor version - resets the patch version to 0 - removes any build information - removes any prerelease information + 1.9999.9999 should not be below range <2.0.0 + 0.0.0 should not be above range >=0.2.3 || <0.0.1(>=0.2.3 || <0.0.1) + 2.0.0 should be below range >2.0.0 + 0.6.1-pre should be above range ~v0.5.4-pre + 0.1.2 should be below range ~1.0 + 1.2.4 should not be below range 0.1.20 || >1.2.4 + 1.0.1 should not be above range >=1.0.0(>=1.0.0) + 1.0.0 should not be below range >= 1 + 0.9.9 should not be above range 1.0.0 - 2.0.0(>=1.0.0 <=2.0.0) + 1.9999.9999 should not be below range <= 2.0.0 + 1.0.0 should not be above range >= 1(>=1.0.0) + 2.5.5 should be above range ~2.4 + 0.2.9 should not be below range <= 2.0.0 + 2.0.0 should be above range <2.0.0 + 0.8.0 should be above range =0.7.x + 1.3.3 should be above range 1.2.x + 3.1.3 should be above range 1.2.* || 2.* + 1.0.0-beta should be above range < 1 + 1.2.3 should not be above range ~>1(>=1.0.0 <2.0.0) + 1.0.0 should not be below range -Finished in 0.55351 seconds (files took 0.43369 seconds to load) +Finished in 0.42837 seconds (files took 0.23079 seconds to load) 988 examples, 0 failures -Randomized with seed 10490 +Randomized with seed 56506 /usr/bin/ruby3.3 /usr/bin/gem2deb-test-runner @@ -2065,1114 +2101,1114 @@ All examples were filtered out; ignoring {:focus=>true} -Randomized with seed 41121 - -SemanticPuppet::Dependency::GraphNode - #satisfied - is unsatisfied when any dependencies are missing - is unsatisfied when no nodes have been appended - is satisfied when all dependencies are fulfilled - #<=> - can be compared - dependencies - are maintained in the #dependencies Hash - are added by #add_dependency - #populate_children - saves all relevant nodes as its children - accepts a graph solution and populates it across all nodes - #<< - sorts the dependencies for each addition to the same node - does not append unsatisfying nodes - does not append nodes with unknown names - sorts once the dependencies for a specific node - appends satisfying nodes to the dependencies - -SemanticPuppet::Dependency::Graph - #add_constraint - permits multiple constraints against the same module name - can create a new constraint on a module - #initialize - can be called without arguments - implements the GraphNode protocol - adds constraints for every key in the passed hash - adds the named dependencies for every key in the passed hash - #satisfies_graph? - returns false if the solution violates any graph constraint - returns false if the solution violates a graph constraint - returns true if the solution violates no graph constraints - #add_graph_constraint - can create a new constraint on a graph - permits multiple graph constraints - #satisfies_dependency? - is not satisfied by modules that do not fulfill all the constraints - is not satisfied by modules that do not fulfill the constraint - is not satisfied by modules it does not depend on - is satisfied by modules that do fulfill all the constraints - -SemanticPuppet::Dependency - .sources - can be emptied by using #clear_sources - defaults to an empty list - can be modified by using #add_source - is frozen - .resolve - for a module without dependencies - returns the greatest release matching the version range - when the query omits all stable versions - returns the greatest prerelease version matching the range - when the query omits all versions - fails with an appropriate message - when the query includes both stable and prerelease versions - returns the greatest stable release matching the range - for a module with dependencies - returns the greatest releases matching the dependency range - when the dependency cannot be satisfied - sets unsatisfiable - fails with an appropriate message - when the dependency has both stable and prerelease versions - returns the greatest stable release matching the range - when the dependency has no stable versions - returns the greatest prerelease version matching the range - that violate graph constraints - that can be resolved - terminates - that cannot be resolved - fails with an appropriate message - for a module with dependencies - that violate module constraints on the graph - that cannot be resolved - fails with an appropriate message - that can be resolved - terminates - for a module with competing dependencies - that overlap - returns the greatest release satisfying all dependencies - that do not overlap - fails with an appropriate message - for a module with circular dependencies - that cannot be resolved - fails with an appropriate message - that can be resolved - terminates - .query - with multiple sources - resolves all dependencies against all sources - queries each source in turn - with one source - queries the source for each dependency only once - queries the source for release information - populates the returned ModuleRelease with related dependencies - queries the source for each dependency - populates all returned ModuleReleases with related dependencies - returns a ModuleRelease with the requested dependencies - without sources - returns an unsatisfied ModuleRelease - -SemanticPuppet::Dependency::UnsatisfiableGraph - #message - is expected to match /foo, bar, and baz/ - #sentence_from_list - with a list of three items - is expected to eql "foo, bar, and baz" - with a list of one item - is expected to eql "foo" - with a list of more than three items - is expected to eql "foo, bar, baz, and quux" - with a list of two items - is expected to eql "foo and bar" +Randomized with seed 50268 SemanticPuppet::VersionRange + #intersection + cannot intersect with non-VersionRanges + between 10.0.0 - 5.0.0 & + 15.0.0 - 11.0.0 + >=10.0.0 <5.0.0 + 4.0.0 - 1.0.0 + 15.0.0 - 10.0.0 + >=5.0.0 <1.0.0 + 10.0.0 - 5.0.0 + 9.0.0 - 6.0.0 + 11.0.0 - 4.0.0 + 5.0.0 - 1.0.0 + 6.0.0 - 1.0.0 + 15.0.0 - 9.0.0 + >=7.0.0 <1.0.0 + between >=10.0.0 <5.0.0 & + 9.0.0 - 6.0.0 + 15.0.0 - 10.0.0 + >=7.0.0 <1.0.0 + 11.0.0 - 4.0.0 + 10.0.0 - 5.0.0 + 15.0.0 - 9.0.0 + 5.0.0 - 1.0.0 + >=10.0.0 <5.0.0 + >=5.0.0 <1.0.0 + 6.0.0 - 1.0.0 + 4.0.0 - 1.0.0 + 15.0.0 - 11.0.0 + is commutative + between 10.0.0 - 5.0.0 & 6.0.0 - 1.0.0 + between 10.0.0 - 5.0.0 & 4.0.0 - 1.0.0 + between 10.0.0 - 5.0.0 & 5.0.0 - 1.0.0 + between 10.0.0 - 5.0.0 & 15.0.0 - 9.0.0 + between 10.0.0 - 5.0.0 & 10.0.0 - 5.0.0 + between >=10.0.0 <5.0.0 & 5.0.0 - 1.0.0 + between >=10.0.0 <5.0.0 & 15.0.0 - 11.0.0 + between >=10.0.0 <5.0.0 & 4.0.0 - 1.0.0 + between >=10.0.0 <5.0.0 & >=5.0.0 <1.0.0 + between >=10.0.0 <5.0.0 & 10.0.0 - 5.0.0 + between >=10.0.0 <5.0.0 & 9.0.0 - 6.0.0 + between 10.0.0 - 5.0.0 & 11.0.0 - 4.0.0 + between 10.0.0 - 5.0.0 & >=10.0.0 <5.0.0 + between >=10.0.0 <5.0.0 & 11.0.0 - 4.0.0 + between 10.0.0 - 5.0.0 & 9.0.0 - 6.0.0 + between >=10.0.0 <5.0.0 & 15.0.0 - 10.0.0 + between 10.0.0 - 5.0.0 & 15.0.0 - 11.0.0 + between >=10.0.0 <5.0.0 & 15.0.0 - 9.0.0 + between 10.0.0 - 5.0.0 & >=7.0.0 <1.0.0 + between >=10.0.0 <5.0.0 & 6.0.0 - 1.0.0 + between >=10.0.0 <5.0.0 & >=10.0.0 <5.0.0 + between >=10.0.0 <5.0.0 & >=7.0.0 <1.0.0 + between 10.0.0 - 5.0.0 & >=5.0.0 <1.0.0 + between 10.0.0 - 5.0.0 & 15.0.0 - 10.0.0 The version - 0.0.0-beta should be below range 1 - 3.0.0 should be above range 2.x.x - 0.2.4 should not be below range >=* - 1.1.0 should not be below range >=1.0.0 - 1.0.0-beta should not be above range 1(>=1.0.0 <2.0.0) - 1.2.4 should not be above range 0.1.20 || 1.2.4(0.1.20 || 1.2.4) - 1.0.0 should be below range 2.x.x - 1.0.0 should be below range 2 - 0.7.0-asdf should not be above range =0.7.x(>=0.7.0 <0.8.0) - 1.9999.9999 should not be above range <= 2.0.0(<=2.0.0) - 0.2.3 should not be above range >=0.2.3 || <0.0.1(>=0.2.3 || <0.0.1) - 1.0.0 should not be below range + 2.0.0 should not be below range ^1.0.0 || ~2.0.1 + 0.6.1-1 should not be below range ~0.6.1-1 + 2.0.0 should be below range >2.0.0 + 5.0.0-0 should not be below range ^0.1.0 || ~3.0.1 || 5.0.0 + 3.5.0 should not be below range ^0.1.0 || ~3.0.1 || >4 <=5.0.0 + 1.2.3 should not be above range 0.1.20 || 1.2.4(0.1.20 || 1.2.4) + 1.2.3 should not be below range 1.2.* || 2.* + 0.6.2 should not be above range <=0.7.x(<0.8.0) + 2.3.1 should not be above range 2.3(>=2.3.0 <2.4.0) + 0.6.0 should be below range =0.7.x 0.2.5 should not be above range >0.2.3 >0.2.4 <=0.2.5(>0.2.4 <=0.2.5) - 1.1.0 should be below range 1.2.x - 2.0.0 should not be below range 1.0.0 - 2.0.0 - 0.2.9 should not be below range < 2.0.0 - 3.2.0 should not be above range ^0.1.0 || ~3.0.1 || 5.0.0(>=0.1.0 <0.2.0 || >=3.0.1 <3.1.0 || 5.0.0) - 1.1.0 should not be above range >= 1.0.0(>=1.0.0) - 1.0.0-beta.1 should be below range 1.0.0-beta.2 - 1.9999.9999 should be below range 2 - 1.0.0 should not be below range =0.1.0 - 1.3.0 should be above range ~1.2.2 - 0.8.2 should be above range =0.7.x - 1.0.0-0 should be below range ^1 - 3.1.3 should be above range 1.2.x || 2.x - 2.3.0 should be below range ~2.4 + 1.1.0 should be above range ~1.0 + 3.2.2 should not be above range ~>3.2.1(>=3.2.1 <3.3.0) + 1.0.0-beta should be below range 2 + 2.1.3 should not be below range 2.x.x 2.0.0 should not be above range ^3.0.0(>=3.0.0 <4.0.0) - 2.3.1 should not be below range 2.3 - 0.7.1-1 should be above range ~0.6.1-1 - 1.2.1 should be below range ~1.2.2 - 0.6.2 should not be below range <=0.7.x 1.2.3 should not be below range 1.2.* || 2.* - 1.1.0 should be above range ~1.0 - 1.0.2 should not be above range ~1.0(>=1.0.0 <1.1.0) - 0.2.9 should not be below range <=2.0.0 - 1.1.1 should be below range >=2.0.0 - 1.2.3 should not be above range 1.2.* || 2.*(>=1.2.0 <1.3.0 || >=2.0.0 <3.0.0) - 0.2.3 should be below range ~> 1 + 0.7.2 should not be below range =0.7.x 2.1.2 should not be above range 2(>=2.0.0 <3.0.0) - 1.3.3 should be above range 1.2.x + 1.2.9 should be below range >=2.0.0 + 0.7.2 should not be below range >=0.7.x + 1.1.3 should be below range 1.2.x + 1.0.2 should not be below range ~ 1.0 + 0.1.97 should not be below range >=0.1.97 + 0.2.5 should not be below range >0.2.3 >0.2.4 <=0.2.5 + 2.1.3 should not be above range 2.*.*(>=2.0.0 <3.0.0) + 1.1.3 should be below range 2.*.* + 0.7.2 should not be above range =0.7.x(>=0.7.0 <0.8.0) + 0.1.2 should be below range ~1.0 + 1.1.0 should not be above range >=1.0.0(>=1.0.0) + 2.2.2 should be below range 2.3 + 0.2.9 should not be below range <=2.0.0 + 1.1.1 should not be above range < 1.2(<1.2.0) + 1.1.3 should be below range 1.2.* + 3.3.0 should be above range ~>3.2.1 + 1.2.3 should not be above range 1.2.*(>=1.2.0 <1.3.0) + 1.9999.9999 should be below range 2 + 2.0.1 should be above range 1.0.0 - 2.0.0 + 1.9999.9999 should not be above range < 2.0.0(<2.0.0) + 1.1.9999 should be below range 1.2.* || 2.* + 0.6.1-pre should be above range ~v0.5.4-pre + 2.0.0 should not be below range 1.0.0 - 2.0.0 + 1.2.1 should be below range ~1.2.2 + 1.1.1 should not be below range <1.2 + 1.9999.9999 should not be above range <2.0.0(<2.0.0) 0.8.0 should be above range =0.7.x - 0.7.2 should not be above range >=0.7.x(>=0.7.0) - 0.6.0 should be above range ~v0.5.4-pre - 0.6.1-1 should not be below range ~0.6.1-1 - 0.0.0 should be below range 1.0.0 - 1.0.0 should not be below range >= 1 + 0.5.4-alpha should be below range ~v0.5.4-pre + 1.0.0 should not be below range >=1.0.0 0.2.4 should be below range ~>1 - 0.1.5 should be below range 0.1.20 || 1.2.4 - 0.2.3 should be below range 1.0.0 - 2.0.0 - 2.1.3 should not be above range 2.x.x(>=2.0.0 <3.0.0) - 1.2.3 should not be above range ~> 1(>=1.0.0 <2.0.0) - 0.2.3 should be below range ~1 - 1.0.1 should be above range 1.0.0 - 2.0.1 should be above range 1.0.0 - 2.0.0 - 1.1.2 should be above range ~1.0 - 0.0.1 should be below range 1.0.0 - 2.0.0 - 0.2.3 should be below range ~1 + 1.0.0-beta should not be below range ~1.0.0-alpha + 1.3.4 should not be above range ||(*) + 3.2.9 should be above range <=2.0.0 + 3.2.0 should not be above range ^0.1.0 || ~3.0.1 || 5.0.0(>=0.1.0 <0.2.0 || >=3.0.1 <3.1.0 || 5.0.0) + 2.0.0 should not be below range <=2.0.0 + 0.2.3 should not be below range >=0.2.3 || <0.0.1 + 0.7.1-1 should be above range ~0.6.1-1 + 1.1.1 should not be below range < 1.2 + 0.5.5 should not be below range ~v0.5.4-pre + 1.2.3 should not be below range 1.2.* + 1.2.3 should not be above range ~>1(>=1.0.0 <2.0.0) + 1.0.0 should be below range 2 + 3.0.0 should be above range 2.x.x + 5.0.1 should be above range 2.*.* + 2.1.3 should not be above range 1.2.x || 2.x(>=1.2.0 <1.3.0 || >=2.0.0 <3.0.0) + 2.2.1 should be below range 2.3 + 1.0.0 should be below range >=2.0.0 + 0.2.4 should not be below range >=0.2.3 || <0.0.1 + 2.9999.9999 should be above range <2.0.0 + 1.3.0 should be above range 1.2.x + 1.1.0 should not be below range > 1.0.0 + 1.2.3 should not be above range 1.2.x(>=1.2.0 <1.3.0) + 1.2.5 should be above range 0.1.20 || 1.2.4 + 1.0.0-beta should be below range 1 + 1.0.1 should not be above range > 1.0.0(>1.0.0) + 0.6.0-asdf should be below range =0.7.x + 1.2.3 should not be below range 0.1.20 || 1.2.4 + 1.2.3 should not be above range 1.2.x || 2.x(>=1.2.0 <1.3.0 || >=2.0.0 <3.0.0) + 0.2.9 should not be below range <2.0.0 + 1.3.0 should be above range ~1.2.2 + 2.0.0 should not be above range ^1.0.0 || ~2.0.1(>=1.0.0 <2.0.0 || >=2.0.1 <2.1.0) + 1.2.0 should be above range <1.2 + 3.2.0 should be below range ~>3.2.1 + 3.2.2 should not be below range ~>3.2.1 + 0.9.9 should not be above range 1.0.0 - 2.0.0(>=1.0.0 <=2.0.0) + 0.2.4 should not be below range >=* + 1.0.1 should be below range 2.*.* + 3.0.0 should be above range 2 1.2.3 should not be above range *(*) - 3.2.0 should not be below range ^0.1.0 || ~3.0.1 || 5.0.0 + 2.0.0 should not be above range 1.0.0 - 2.0.0(>=1.0.0 <=2.0.0) + 1.3.4 should not be below range || + 1.9999.9999 should not be below range <2.0.0 + 0.1.20 should not be below range 0.1.20 || 1.2.4 + 2.4.2 should be above range 2.3 + 2.2.3 should be above range ~1 + 1.2.3 should not be below range 1.2.x + 3.1.3 should be above range 2.*.* + 0.7.2 should not be above range >=0.7.x(>=0.7.0) + 1.2.3 should not be above range x(*) + 1.0.0 should not be above range >= 1.0.0(>=1.0.0) + 3.0.0 should be above range 1.2.x || 2.x + 2.2.4 should be above range ~>1 + 2.0.0-beta should be above range 1 + 1.2.4 should not be above range 0.1.20 || 1.2.4(0.1.20 || 1.2.4) + 1.0.1 should not be above range >=1.0.0(>=1.0.0) + 2.1.3 should not be above range 2.x.x(>=2.0.0 <3.0.0) 1.0.1 should not be below range >1.0.0 - 1.2.3 should not be above range *(*) - 2.3.0 should be below range ~2.4 - 1.2.5 should be above range 0.1.20 || 1.2.4 - 1.2.1 should be above range < 1.2 - 1.1.9999 should be below range 1.2.* || 2.* - 1.1.0 should not be below range ~ 1.0 1.1.3 should be below range 1.2.* - 2.1.3 should not be above range 1.2.x || 2.x(>=1.2.0 <1.3.0 || >=2.0.0 <3.0.0) - 1.0.2 should not be above range ~ 1.0(>=1.0.0 <1.1.0) - 2.1.1 should be above range <=2.0.0 - 0.6.0-asdf should be below range =0.7.x - 0.7.0-asdf should be below range >=0.7.x - 0.1.20 should not be above range 0.1.20 || 1.2.4(0.1.20 || 1.2.4) - 1.0.0-beta should not be below range ^0.1.0 || ~3.0.1 || 5.0.0 - 1.0.0 should not be above range >= 1(>=1.0.0) - 1.0.2 should not be below range ~1.0 0.2.9 should not be above range < 2.0.0(<2.0.0) - 1.0.0 should not be below range >= 1.0.0 - 0.2.3 should not be below range >=0.2.3 || <0.0.1 - 2.2.3 should be above range ~>1 - 1.0.2 should not be below range ~ 1.0 - 0.2.4 should not be above range >=*(>=0.0.0) - 1.0.0-beta should be above range < 1 - 0.6.1-0 should be below range ~0.6.1-1 + 0.6.2 should be below range >=0.7.x + 1.0.1 should not be above range >1.0.0(>1.0.0) + 2.1.1 should be above range <=2.0.0 + 2.0.0 should be below range >2.0.0 + 2.4.1 should be above range 2.3 + 1.2.9 should be below range >2.0.0 + 1.2.3 should not be below range 1.2.x || 2.x + 0.2.9 should not be above range <2.0.0(<2.0.0) + 2.3.0 should be below range ~2.4 2.1.3 should not be below range 2.*.* - 1.2.3 should not be above range ~1(>=1.0.0 <2.0.0) - 2.3.2 should be below range ~>3.2.1 - 1.0.0 should not be below range >=1.0.0 - 1.2.3 should not be above range ~>1(>=1.0.0 <2.0.0) - 1.1.0 should not be below range > 1.0.0 - 0.2.4 should not be above range >=0.2.3 <=0.2.4(>=0.2.3 <=0.2.4) - 1.9999.9999 should not be above range < 2.0.0(<2.0.0) - 2.3.1 should not be above range 2.3(>=2.3.0 <2.4.0) - 3.2.3 should be above range ~> 1 - 2.5.0 should be above range ~2.4 - 1.0.0-beta should be below range >1 - 1.2.4 should not be below range 0.1.20 || 1.2.4 + 0.2.3 should be below range ~1 + 1.2.3 should not be below range ~> 1 + 1.0.0-beta.1 should be below range 1.0.0-beta.2 + 2.0.0 should be above range <2.0.0 + 2.3.0 should be below range ~2.4 + 1.0.1 should be above range 1.0.0 + 2.1.3 should not be below range 1.2.* || 2.* + 1.0.0-beta should be above range <1 + 1.0.0-beta should be above range < 1 + 1.0.0 should be below range 1.2.x || 2.x + 2.0.0 should not be above range <= 2.0.0(<=2.0.0) + 0.1.5 should be below range 0.1.20 || 1.2.4 + 1.2.1 should be below range ~1.2.2 + 0.1.20 should not be above range 0.1.20 || 1.2.4(0.1.20 || 1.2.4) + 0.0.0-beta should be below range 1 1.9999.9999 should not be below range <= 2.0.0 - 1.2.3 should not be below range * - 0.1.20 should not be below range 0.1.20 || 1.2.4 - 1.0.0 should not be above range >=1.0.0(>=1.0.0) - 3.1.3 should be above range 1.2.* || 2.* 0.1.97 should not be above range >=0.1.97(>=0.1.97) - 1.1.0 should not be above range >1.0.0(>1.0.0) - 1.2.3 should not be below range 1.2.* || 2.* - 2.1.2 should not be below range 2 - 1.0.0-beta should be below range 2 - 2.0.0 should not be above range <= 2.0.0(<=2.0.0) - 2.5.5 should be above range ~2.4 - 0.1.97 should not be below range >=0.1.97 - 1.2.4 should not be below range 0.1.20 || >1.2.4 - 2.2.4 should be above range ~>1 - 1.0.0 should not be below range >=1 - 0.0.0 should not be above range >=0.2.3 || <0.0.1(>=0.2.3 || <0.0.1) - 1.9999.9999 should be below range >=2.0.0 - 1.3.0 should be above range 1.2.x + 1.0.0 should not be above range >= 1(>=1.0.0) + 2.5.0 should be above range ~2.4 1.2.0 should be below range >1.2 - 0.0.0-0 should not be above range ^1(>=1.0.0 <2.0.0) - 1.0.0 should not be above range >=1(>=1.0.0) - 1.3.4 should not be above range ||(*) - 1.0.1 should be below range 2.*.* - 2.2.3 should be above range ~1 - 1.2.3-foo should not be above range *(*) - 5.0.0-0 should not be above range ^0.1.0 || ~3.0.1 || 5.0.0(>=0.1.0 <0.2.0 || >=3.0.1 <3.1.0 || 5.0.0) - 1.2.3 should not be below range ~1 - 1.2.3 should not be above range 1.2.x || 2.x(>=1.2.0 <1.3.0 || >=2.0.0 <3.0.0) - 1.0.0 should not be above range 1.0.0(1.0.0) 0.2.9 should not be above range <= 2.0.0(<=2.0.0) - 2.1.3 should not be above range 1.2.* || 2.*(>=1.2.0 <1.3.0 || >=2.0.0 <3.0.0) + 1.0.0 should not be above range (*) + 1.0.0 should not be below range >=1 + 1.2.3-foo should not be above range *(*) + 0.5.5 should not be above range ~v0.5.4-pre(>=0.5.4-pre <0.6.0) + 0.0.0 should be below range ~1.0 1.3.3 should be above range 1.2.* - 1.1.3 should be below range 1.2.x - 0.0.1 should be below range 1.0.0 + 1.2.3 should not be above range *(*) + 0.7.0-asdf should not be above range >=0.7.x(>=0.7.0) + 0.0.1 should be below range 1.0.0 - 2.0.0 + 1.0.0 should not be above range >=1.0.0(>=1.0.0) + 2.4.0 should not be below range ~2.4 + 1.2.3 should not be below range * + 2.9.9 should not be below range 1.0.0 - 2.0.0 + 0.6.2 should not be below range <=0.7.x + 1.0.0 should not be below range + 1.2.3 should not be below range ~>1 + 0.2.4 should not be above range >=*(>=0.0.0) 1.2.3 should not be above range 1.2.* || 2.*(>=1.2.0 <1.3.0 || >=2.0.0 <3.0.0) - 0.2.4 should not be below range >=0.2.3 <=0.2.4 - 2.0.0-beta should be above range 1 + 1.0.0 should be below range 2.x.x + 1.0.0 should not be below range =0.1.0 + 1.0.2 should not be above range ~ 1.0(>=1.0.0 <1.1.0) + 0.1.97 should not be above range >=0.1.97(>=0.1.97) + 1.1.1 should be below range >=2.0.0 + 2.4.5 should not be above range ~2.4(>=2.4.0 <2.5.0) + 1.1.3 should be below range 1.2.* || 2.* + 1.0.1 should not be above range >= 1.0.0(>=1.0.0) 0.5.4 should not be below range ~v0.5.4-pre - 0.6.2 should be below range >=0.7.x - 3.3.2 should be above range ~>3.2.1 - 2.0.0 should be above range <2.0.0 - 5.0.1 should be above range 2.*.* - 1.2.3 should not be below range 1.0.0 - 2.0.0 + 0.8.0-asdf should be above range =0.7.x + 0.5.4 should not be above range ~v0.5.4-pre(>=0.5.4-pre <0.6.0) 0.6.0 should be below range >=0.7.x - 0.6.0 should be below range =0.7.x - 0.7.2 should be above range <0.7.x - 0.7.0-asdf should be below range =0.7.x + 1.2.3 should not be above range ~1(>=1.0.0 <2.0.0) + 1.0.0-beta should not be above range ^0.1.0 || ~3.0.1 || 5.0.0(>=0.1.0 <0.2.0 || >=3.0.1 <3.1.0 || 5.0.0) + 1.2.4 should not be below range 0.1.20 || 1.2.4 + 2.1.3 should not be above range 1.2.* || 2.*(>=1.2.0 <1.3.0 || >=2.0.0 <3.0.0) + 1.1.1 should not be above range <1.2(<1.2.0) + 2.1.3 should not be below range 1.2.x || 2.x + 0.6.1-0 should be below range ~0.6.1-1 1.0.0 should not be below range 1.0.0 - 0.2.9 should not be below range <2.0.0 - 0.2.5 should not be below range >0.2.3 >0.2.4 <=0.2.5 - 0.8.0-asdf should be above range =0.7.x - 2.0.0 should not be above range <=2.0.0(<=2.0.0) - 0.2.9 should not be above range <2.0.0(<2.0.0) - 1.2.9 should be below range >=2.0.0 - 2.4.0 should not be above range ~2.4(>=2.4.0 <2.5.0) - 1.0.1 should not be above range > 1.0.0(>1.0.0) - 0.2.9 should not be above range <=2.0.0(<=2.0.0) - 2.0.0 should not be below range <= 2.0.0 - 1.0.1 should not be above range >1.0.0(>1.0.0) - 1.9999.9999 should not be above range <=2.0.0(<=2.0.0) + 1.0.2 should not be above range ~1.0(>=1.0.0 <1.1.0) + 1.1.0 should be below range 1.2.x + 0.6.2 should be below range =0.7.x + 1.2.4 should not be below range 0.1.20 || >1.2.4 + 1.0.0 should not be above range >=1(>=1.0.0) + 2.5.5 should be above range ~2.4 + 1.0.2 should not be below range ~1.0 + 0.2.4 should not be below range >=0.2.3 <=0.2.4 + 0.0.0-0 should not be above range ^1(>=1.0.0 <2.0.0) 3.5.0 should not be above range ^0.1.0 || ~3.0.1 || >4 <=5.0.0(>=0.1.0 <0.2.0 || >=3.0.1 <3.1.0 || 5.0.0) - 1.0.1 should not be above range >=1.0.0(>=1.0.0) - 2.4.1 should be above range 2.3 - 1.0.0-beta should not be below range ~1.0.0-alpha - 1.0.1-beta1 should be above range 1.0.0 - 1.2.3 should not be below range 1.2.* - 2.0.0 should be below range >2.0.0 - 1.9999.9999 should not be below range <2.0.0 - 2.2.3 should be above range 1.0.0 - 2.0.0 - 2.0.0 should be above range 1.0.0 - 2.1.3 should not be above range 2.*.*(>=2.0.0 <3.0.0) - 1.1.1 should not be above range <1.2(<1.2.0) - 2.0.0 should not be below range ^1.0.0 || ~2.0.1 - 0.0.0 should not be below range >=0.2.3 || <0.0.1 - 1.0.0-beta should be below range 1 - 1.2.4 should not be above range 0.1.20 || >1.2.4(0.1.20 || >1.2.4) - 2.2.1 should be below range 2.3 - 2.2.9 should be above range <2.0.0 - 1.2.0 should be above range <1.2 - 2.3.5 should be below range ~2.4 - 2.1.3 should not be below range 2.x.x - 0.7.2 should not be below range >=0.7.x + 0.5.4-alpha should be below range ~v0.5.4-pre + 2.0.0 should not be below range <= 2.0.0 2.5.0 should be above range ~2.4 - 1.2.3 should not be below range ~> 1 - 1.2.3 should not be above range 1.2.*(>=1.2.0 <1.3.0) - 0.7.2 should not be below range =0.7.x - 1.1.0 should be above range ~ 1.0 + 1.0.0-beta should not be above range 1(>=1.0.0 <2.0.0) + 0.0.0 should not be above range >=0.2.3 || <0.0.1(>=0.2.3 || <0.0.1) + 2.2.3 should be above range ~>1 + 2.9999.9999 should be above range <=2.0.0 + 0.2.3 should be below range ~1 3.1.2 should be above range 2 - 1.2.3 should not be below range 1.2.x || 2.x - 2.9999.9999 should be above range <2.0.0 - 2.2.3 should be above range ~1 - 0.7.0 should be above range <0.7.x - 1.9999.9999 should not be below range < 2.0.0 + 1.2.1 should be below range > 1.2 + 0.7.0-asdf should not be above range =0.7.x(>=0.7.0 <0.8.0) 1.2.9 should be below range >=2.0.0 - 1.1.3 should be below range 1.2.* + 2.2.3 should be above range ~1 + 2.0.0 should be above range 1.0.0 2.2.9 should be above range <=2.0.0 + 3.2.0 should not be below range ^0.1.0 || ~3.0.1 || 5.0.0 + 0.7.0-asdf should be below range =0.7.x + 2.3.1 should not be below range 2.3 + 1.1.0 should not be above range >1.0.0(>1.0.0) + 1.1.0 should be above range ~ 1.0 + 1.1.0 should not be above range >= 1.0.0(>=1.0.0) + 1.0.0-beta should be below range > 1 + 1.1.2 should be above range ~1.0 + 1.2.3 should not be above range 1.2.* || 2.*(>=1.2.0 <1.3.0 || >=2.0.0 <3.0.0) + 0.7.0 should be above range <0.7.x 2.4.5 should not be below range ~2.4 - 4.0.0 should not be below range ^3.0.0 - 1.0.0-beta should not be above range ^0.1.0 || ~3.0.1 || 5.0.0(>=0.1.0 <0.2.0 || >=3.0.1 <3.1.0 || 5.0.0) - 1.1.3 should be below range 2.x.x - 0.7.2 should not be above range =0.7.x(>=0.7.0 <0.8.0) - 2.0.0 should not be above range 1.0.0 - 2.0.0(>=1.0.0 <=2.0.0) - 0.9.9 should not be above range 1.0.0 - 2.0.0(>=1.0.0 <=2.0.0) + 0.2.3 should not be above range >=0.2.3 || <0.0.1(>=0.2.3 || <0.0.1) + 3.1.3 should be above range 2.x.x + 1.2.1 should be above range < 1.2 + 1.1.3 should be below range 1.2.x || 2.x + 1.1.0 should not be below range ~ 1.0 + 0.2.4 should not be above range >=0.2.3 || <0.0.1(>=0.2.3 || <0.0.1) + 1.9999.9999 should not be above range <= 2.0.0(<=2.0.0) + 1.0.1 should not be below range >=1.0.0 1.0.0 should be below range >1 + 3.3.2 should be above range ~>3.2.1 + 1.2.3 should not be below range x + 1.0.1 should not be below range >= 1.0.0 + 5.0.0-0 should not be above range ^0.1.0 || ~3.0.1 || 5.0.0(>=0.1.0 <0.2.0 || >=3.0.1 <3.1.0 || 5.0.0) + 1.2.3 should not be below range * + 1.3.3 should be above range 1.2.x + 1.9999.9999 should not be below range <=2.0.0 1.1.0 should not be above range > 1.0.0(>1.0.0) - 1.1.1 should not be below range <1.2 - 2.0.0 should not be below range <=2.0.0 - 0.0.0 should be below range ~1.0 - 0.1.97 should not be above range >=0.1.97(>=0.1.97) - 2.2.2 should be below range 2.3 - 3.2.2 should not be below range ~>3.2.1 - 0.5.4-alpha should be below range ~v0.5.4-pre - 1.1.1 should not be below range < 1.2 - 2.4.0 should not be below range ~2.4 - 1.2.1 should be below range ~1.2.2 - 0.5.4-alpha should be below range ~v0.5.4-pre + 0.7.0-asdf should be below range >=0.7.x + 1.1.0 should not be below range >= 1.0.0 + 1.0.0 should not be below range >= 1.0.0 + 3.1.3 should be above range 1.2.* || 2.* + 0.2.3 should be below range ~>1 + 0.6.0 should be above range ~v0.5.4-pre + 2.3.2 should be below range ~>3.2.1 + 0.8.2 should be above range =0.7.x + 1.0.0-beta should not be below range ^0.1.0 || ~3.0.1 || 5.0.0 + 1.0.0-0 should be below range ^1 + 0.2.3 should be below range 1.0.0 - 2.0.0 + 0.0.1 should be below range 1.0.0 + 1.9999.9999 should not be above range <=2.0.0(<=2.0.0) + 2.1.2 should not be below range 2 + 1.9999.9999 should be below range >=2.0.0 + 1.1.0 should not be below range >=1.0.0 + 1.2.3 should not be below range 1.0.0 - 2.0.0 + 0.2.9 should not be below range < 2.0.0 + 2.4.0 should not be above range ~2.4(>=2.4.0 <2.5.0) 1.2.3 should not be above range 1.0.0 - 2.0.0(>=1.0.0 <=2.0.0) - 3.5.0 should not be below range ^0.1.0 || ~3.0.1 || >4 <=5.0.0 - 3.0.0 should be above range 2 - 1.2.3 should not be above range x(*) - 1.0.0-beta should be above range <1 - 0.6.2 should not be above range <=0.7.x(<0.8.0) - 2.1.3 should not be below range 1.2.x || 2.x - 1.0.0 should not be above range >= 1.0.0(>=1.0.0) - 1.1.0 should not be below range >1.0.0 - 1.0.0 should be below range 1.2.x || 2.x - 2.9.9 should not be below range 1.0.0 - 2.0.0 - 0.5.5 should not be below range ~v0.5.4-pre - 3.1.3 should be above range 2.x.x - 2.0.0 should not be above range ^1.0.0 || ~2.0.1(>=1.0.0 <2.0.0 || >=2.0.1 <2.1.0) - 1.0.0 should not be above range (*) - 4.0.0 should be above range 1.2.* || 2.* - 0.1.2 should be below range ~1.0 - 3.2.9 should be above range <=2.0.0 - 1.2.3 should not be below range 0.1.20 || 1.2.4 - 1.2.3 should not be above range 1.2.x(>=1.2.0 <1.3.0) - 3.1.3 should be above range 2.*.* - 1.9999.9999 should not be below range <=2.0.0 - 0.6.1-pre should be above range ~v0.5.4-pre + 1.2.3 should not be below range ~1 + 1.0.0 should not be below range >= 1 + 3.1.3 should be above range 1.2.x || 2.x + 1.0.1 should not be below range > 1.0.0 0.6.1-1 should not be above range ~0.6.1-1(>=0.6.1-1 <0.7.0) - 1.2.3 should not be below range ~>1 - 1.2.3 should not be above range 0.1.20 || 1.2.4(0.1.20 || 1.2.4) - 1.2.1 should be below range > 1.2 - 1.2.3 should not be below range * - 1.3.3 should be above range 1.2.* - 0.6.2 should be below range =0.7.x - 0.2.9 should not be below range <= 2.0.0 - 1.0.1 should not be below range >= 1.0.0 - 1.0.0 should be below range >=2.0.0 - 3.0.0 should be above range <=2.0.0 - 1.0.0-beta should be below range > 1 - 1.3.4 should not be below range || - 1.9999.9999 should not be above range <2.0.0(<2.0.0) - 1.1.0 should not be above range >=1.0.0(>=1.0.0) - 2.0.0 should be below range >2.0.0 - 0.5.5 should not be above range ~v0.5.4-pre(>=0.5.4-pre <0.6.0) - 3.2.2 should not be above range ~>3.2.1(>=3.2.1 <3.3.0) - 0.7.0-asdf should not be above range >=0.7.x(>=0.7.0) - 1.1.3 should be below range 1.2.* || 2.* - 1.0.0-beta should not be below range ^1.0.0-alpha - 5.0.0-0 should not be below range ^0.1.0 || ~3.0.1 || 5.0.0 - 3.2.0 should be below range ~>3.2.1 - 0.5.4 should not be above range ~v0.5.4-pre(>=0.5.4-pre <0.6.0) - 0.2.4 should not be below range >=0.2.3 || <0.0.1 + 0.2.9 should not be above range <=2.0.0(<=2.0.0) + 1.1.0 should not be below range >1.0.0 + 1.0.0-beta should be below range >1 1.0.0 should be above range <1 - 1.2.3 should not be below range x - 2.4.2 should be above range 2.3 - 0.2.4 should not be above range >=0.2.3 || <0.0.1(>=0.2.3 || <0.0.1) + 0.2.3 should be below range ~> 1 + 0.0.0 should not be below range >=0.2.3 || <0.0.1 + 2.2.3 should be above range 1.0.0 - 2.0.0 + 0.7.2 should be above range <0.7.x + 0.2.9 should not be below range <= 2.0.0 + 2.0.0 should not be above range <=2.0.0(<=2.0.0) 2.0.0-beta should be above range 1 - 1.2.9 should be below range >2.0.0 - 0.2.3 should be below range ~>1 - 3.0.0 should be above range 1.2.x || 2.x - 0.1.0 should be below range ~ 1.0 - 2.9999.9999 should be above range <=2.0.0 - 2.1.3 should not be below range 1.2.* || 2.* - 1.1.0 should not be below range >= 1.0.0 - 1.0.1 should not be below range >=1.0.0 - 3.3.0 should be above range ~>3.2.1 - 1.1.3 should be below range 1.2.x || 2.x - 1.0.1 should not be above range >= 1.0.0(>=1.0.0) + 4.0.0 should not be below range ^3.0.0 + 0.0.0 should be below range 1.0.0 + 1.0.1-beta1 should be above range 1.0.0 + 1.2.4 should not be above range 0.1.20 || >1.2.4(0.1.20 || >1.2.4) + 1.0.0-beta should not be below range ^1.0.0-alpha + 1.2.3 should not be above range ~> 1(>=1.0.0 <2.0.0) 1.3.0 should be above range ~1.2.2 - 1.0.1 should not be below range > 1.0.0 - 1.2.3 should not be below range 1.2.x - 1.1.3 should be below range 2.*.* - 1.1.1 should not be above range < 1.2(<1.2.0) - 2.4.5 should not be above range ~2.4(>=2.4.0 <2.5.0) + 4.0.0 should be above range 1.2.* || 2.* + 3.2.3 should be above range ~> 1 + 3.0.0 should be above range <=2.0.0 + 1.0.0 should not be above range 1.0.0(1.0.0) + 1.3.3 should be above range 1.2.* + 0.1.0 should be below range ~ 1.0 + 0.2.4 should not be above range >=0.2.3 <=0.2.4(>=0.2.3 <=0.2.4) + 2.2.9 should be above range <2.0.0 + 2.3.5 should be below range ~2.4 + 1.1.3 should be below range 2.x.x + 1.9999.9999 should not be below range < 2.0.0 .parse - ored expressions - non-overlapping - parse("1.2.3 || 1.2.5").to_s includes 1.2.5 - "1.2.3 || 1.2.5" includes 1.2.3 - "1.2.3 || 1.2.5" stringifies as 1.2.3 || 1.2.5 - "1.2.3 || 1.2.5" includes 1.2.5 - returns nil on exclude_end? - "1.2.3 || 1.2.5" excludes 1.2.5-0 - parse("1.2.3 || 1.2.5").to_s excludes 1.2.3-0 - returns nil on begin - parse("1.2.3 || 1.2.5").to_s excludes 1.2.5-0 - parse("1.2.3 || 1.2.5").to_s includes 1.2.3 - "1.2.3 || 1.2.5" excludes 1.2.3-0 - returns nil on exclude_begin? - returns nil on end - parse("1.2.3 || 1.2.5").to_s excludes 1.2.4 - "1.2.3 || 1.2.5" excludes 1.2.4 - overlapping - ">=1.2.3 <=1.2.5 || >=1.2.5 <1.3.0" includes 1.2.3 - ">=1.2.3 || 1.2.5" stringifies as >=1.2.3 - ">=1.2.3 || 1.2.5" includes 1.2.4 - parse(">=1.2.3 <=1.2.5 || >=1.2.5 <1.3.0").to_s includes 1.2.6 - ">=1.2.3 || 1.2.5" excludes 1.2.3-0 - ">=1.2.3 <=1.2.5 || >=1.2.5 <1.3.0" stringifies as >=1.2.3 <1.3.0 - ">=1.2.3 <=1.2.5 || >=1.2.5 <1.3.0" excludes 1.2.3-0 - ">=1.2.3 <=1.2.5 || >=1.2.5 <1.3.0" excludes 1.2.6-0 - parse(">=1.2.3 || 1.2.5").to_s includes 1.2.4 - parse(">=1.2.3 <=1.2.5 || >=1.2.5 <1.3.0").to_s excludes 1.2.6-0 - parse(">=1.2.3 || 1.2.5").to_s excludes 1.2.4-0 - parse(">=1.2.3 || 1.2.5").to_s includes 1.2.3 - parse(">=1.2.3 <=1.2.5 || >=1.2.5 <1.3.0").to_s excludes 1.2.3-0 - parse(">=1.2.3 <=1.2.5 || >=1.2.5 <1.3.0").to_s includes 1.2.3 - ">=1.2.3 || 1.2.5" includes 1.2.3 - parse(">=1.2.3 || 1.2.5").to_s excludes 1.2.3-0 - ">=1.2.3 || 1.2.5" excludes 1.2.4-0 - ">=1.2.3 <=1.2.5 || >=1.2.5 <1.3.0" includes 1.2.6 - adjacent - "1.2.3 || 1.2.4 || 1.2.5" excludes 1.2.5-0 - parse(">=1.2.3 <1.2.5 || >=1.2.5 <1.3.0").to_s includes 1.2.6 - ">=1.2.3 <1.2.5 || >=1.2.5 <1.3.0" excludes 1.2.3-0 - ">=1.2.3 <1.2.5 || >=1.2.5 <1.3.0" excludes 1.2.6-0 - parse("1.2.3 || 1.2.4 || 1.2.5").to_s excludes 1.2.5-0 - "1.2.3 || 1.2.4 || 1.2.5" stringifies as >=1.2.3 <=1.2.5 - ">=1.2.3 <1.2.5 || >=1.2.5 <1.3.0" includes 1.2.3 - "1.2.3 || 1.2.4 || 1.2.5" includes 1.2.3 - parse("1.2.3 || 1.2.4 || 1.2.5").to_s includes 1.2.3 - returns nil on exclude_begin? - parse(">=1.2.3 <1.2.5 || >=1.2.5 <1.3.0").to_s includes 1.2.3 - returns nil on exclude_end? - returns nil on end - parse("1.2.3 || 1.2.4 || 1.2.5").to_s excludes 1.2.3-0 - returns expected begin - ">=1.2.3 <1.2.5 || >=1.2.5 <1.3.0" includes 1.2.6 - parse(">=1.2.3 <1.2.5 || >=1.2.5 <1.3.0").to_s excludes 1.2.6-0 - ">=1.2.3 <1.2.5 || >=1.2.5 <1.3.0" stringifies as >=1.2.3 <1.3.0 - "1.2.3 || 1.2.4 || 1.2.5" excludes 1.2.3-0 - parse("1.2.3 || 1.2.4 || 1.2.5").to_s includes 1.2.5 - "1.2.3 || 1.2.4 || 1.2.5" includes 1.2.5 - parse(">=1.2.3 <1.2.5 || >=1.2.5 <1.3.0").to_s excludes 1.2.3-0 + inclusive range expressions + parse("1.2.3-alpha - 1.3.4").to_s excludes 1.3.5-0 + "1.2.3 - 1.3.4" includes 1.3.4 + parse("1.2.3 - 1.3.4-alpha").to_s includes 1.2.3 + parse("1.2.3-alpha - 1.3.4-alpha").to_s excludes 1.3.5 + "1.2.3-alpha - 1.3.4" stringifies as >=1.2.3-alpha <=1.3.4 + parse("1.2.3 - 1.3.4-alpha").to_s excludes 1.3.4-alpha0 + "1.2.3-alpha - 1.3.4-alpha" stringifies as >=1.2.3-alpha <=1.3.4-alpha + parse("1.2.3 - 1.3.4-alpha").to_s includes 1.3.4-alpha + parse("1.2.3 - 1.3.4-alpha").to_s excludes 1.2.2 + "1.2.3-alpha - 1.3.4" excludes 1.2.3-alph + "1.2.3-alpha - 1.3.4" excludes 1.3.5-0 + parse("1.2.3 - 1.3.4").to_s excludes 1.3.5-0 + "1.2.3 - 1.3.4-alpha" excludes 1.2.3-0 + parse("1.2.3 - 1.3.4").to_s includes 1.3.4 + "1.2.3 - 1.3.4" excludes 1.2.3-0 + parse("1.2.3 - 1.3.4").to_s excludes 1.2.2 + parse("1.2.3-alpha - 1.3.4").to_s excludes 1.2.3-alph + "1.2.3 - 1.3.4" excludes 1.3.5-0 + parse("1.2.3 - 1.3.4-alpha").to_s excludes 1.3.5 + "1.2.3 - 1.3.4-alpha" stringifies as >=1.2.3 <=1.3.4-alpha + "1.2.3 - 1.3.4-alpha" includes 1.2.3 + "1.2.3 - 1.3.4" excludes 1.2.2 + "1.2.3 - 1.3.4" stringifies as >=1.2.3 <=1.3.4 + parse("1.2.3-alpha - 1.3.4-alpha").to_s includes 1.2.3-alpha + "1.2.3 - 1.3.4-alpha" includes 1.3.4-alpha + parse("1.2.3-alpha - 1.3.4").to_s includes 1.3.4 + "1.2.3 - 1.3.4" includes 1.2.3 + parse("1.2.3 - 1.3.4-alpha").to_s excludes 1.2.3-0 + parse("1.2.3 - 1.3.4").to_s includes 1.2.3 + "1.2.3-alpha - 1.3.4-alpha" excludes 1.2.3-alph + "1.2.3 - 1.3.4-alpha" excludes 1.3.4-alpha0 + "1.2.3-alpha - 1.3.4-alpha" includes 1.2.3-alpha + "1.2.3-alpha - 1.3.4" includes 1.3.4 + parse("1.2.3-alpha - 1.3.4-alpha").to_s excludes 1.3.4-alpha0 + parse("1.2.3-alpha - 1.3.4-alpha").to_s excludes 1.2.3-alph + parse("1.2.3-alpha - 1.3.4").to_s includes 1.2.3-alpha + "1.2.3-alpha - 1.3.4-alpha" includes 1.3.4-alpha + parse("1.2.3-alpha - 1.3.4-alpha").to_s includes 1.3.4-alpha + "1.2.3 - 1.3.4-alpha" excludes 1.2.2 + "1.2.3-alpha - 1.3.4-alpha" excludes 1.3.4-alpha0 + "1.2.3-alpha - 1.3.4" includes 1.2.3-alpha + "1.2.3 - 1.3.4-alpha" excludes 1.3.5 + parse("1.2.3 - 1.3.4").to_s excludes 1.2.3-0 + "1.2.3-alpha - 1.3.4-alpha" excludes 1.3.5 + open-ended expressions + ">= 1.2.3-alpha" includes 1.2.3-alpha + parse(">1.2.3-alpha").to_s excludes 1.2.3-alpha + "> 1.2.3-alpha" includes 1.2.3-alpha.0 + "<= 1.2.3-alpha" includes 0.0.0 + "<=1.2.3-alpha" includes 1.2.3-alpha + parse(">= 1.2.3-alpha").to_s includes 1.2.3-alpha + parse("< 1.2.3").to_s excludes 1.2.3-0 + parse("< 1.2.3").to_s includes 0.0.0 + parse("<= 1.2.3").to_s excludes 0.0.0-0 + "> 1.2.3-alpha" includes 1.2.3-alpha0 + parse("< 1.2.3-alpha").to_s excludes 1.2.3-alpha + parse(">1.2.3-alpha").to_s includes 1.2.3-alpha0 + "<= 1.2.3-alpha" includes 1.2.3-alpha + parse(">=1.2.3-alpha").to_s excludes 1.2.3-alph + parse("> 1.2.3").to_s excludes 1.2.4-0 + parse(">= 1.2.3").to_s excludes 1.2.3-0 + parse("<= 1.2.3-alpha").to_s includes 0.0.0 + "<= 1.2.3-alpha" excludes 1.2.3-alpha0 + parse("> 1.2.3").to_s excludes 1.2.3 + "< 1.2.3-alpha" includes 0.0.0 + parse("< 1.2.3-alpha").to_s excludes 2.0.0 + parse(">= 1.2.3").to_s excludes 1.2.2 + ">1.2.3" stringifies as >1.2.3 + "<1.2.3" excludes 0.0.0-0 + parse("<= 1.2.3").to_s includes 0.0.0 + "> 1.2.3" stringifies as >1.2.3 + ">1.2.3-alpha" excludes 1.2.3-alpha + parse("<1.2.3-alpha").to_s includes 0.0.0 + parse(">= 1.2.3").to_s includes 999.0.0 + "<1.2.3-alpha" excludes 1.2.3-alpha + parse("<1.2.3").to_s excludes 2.0.0 + parse(">=1.2.3").to_s includes 999.0.0 + parse(">1.2.3").to_s includes 999.0.0 + ">1.2.3-alpha" includes 1.2.3-alpha.0 + parse(">1.2.3").to_s excludes 1.2.4-0 + "<=1.2.3" excludes 1.2.3-0 + parse("> 1.2.3-alpha").to_s includes 1.2.3-alpha.0 + parse(">= 1.2.3-alpha").to_s excludes 1.2.3-alph + "<1.2.3" excludes 2.0.0 + "<= 1.2.3-alpha" excludes 1.2.3-alpha.0 + ">=1.2.3" includes 999.0.0 + "<= 1.2.3-alpha" excludes 0.0.0-0 + ">1.2.3-alpha" includes 1.2.3-alpha0 + ">= 1.2.3-alpha" excludes 1.2.3-alph + parse("<=1.2.3").to_s excludes 1.2.3-0 + ">= 1.2.3-alpha" excludes 1.2.4-alpha + parse("<= 1.2.3-alpha").to_s includes 1.2.3-alpha + ">1.2.3" excludes 1.2.4-0 + parse("<=1.2.3").to_s includes 1.2.3 + "<= 1.2.3" includes 0.0.0 + parse(">=1.2.3-alpha").to_s excludes 1.2.4-alpha + ">= 1.2.3" excludes 1.2.3-0 + parse(">= 1.2.3-alpha").to_s includes 999.0.0 + parse(">=1.2.3-alpha").to_s includes 999.0.0 + parse("<=1.2.3-alpha").to_s excludes 1.2.3-alpha.0 + "<=1.2.3" includes 0.0.0 + "<= 1.2.3-alpha" excludes 1.2.3-alphb + "< 1.2.3" includes 1.2.2 + parse("<=1.2.3").to_s excludes 0.0.0-0 + "<1.2.3-alpha" excludes 0.0.0-0 + parse("> 1.2.3-alpha").to_s includes 1.2.3-alpha0 + "<1.2.3" includes 0.0.0 + ">= 1.2.3-alpha" includes 999.0.0 + parse("<=1.2.3-alpha").to_s excludes 0.0.0-0 + ">=1.2.3-alpha" excludes 1.2.3-alph + parse("<= 1.2.3").to_s excludes 1.2.3-0 + parse("<=1.2.3").to_s includes 0.0.0 + parse("<1.2.3-alpha").to_s excludes 1.2.3-alpha + "< 1.2.3" excludes 1.2.3-0 + ">= 1.2.3" includes 999.0.0 + parse(">1.2.3").to_s excludes 1.2.3 + ">1.2.3-alpha" includes 999.0.0 + parse("<= 1.2.3-alpha").to_s excludes 1.2.3-alpha0 + parse("<1.2.3").to_s includes 0.0.0 + "<=1.2.3" stringifies as <=1.2.3 + parse("<=1.2.3-alpha").to_s includes 1.2.3-alpha + ">1.2.3" excludes 1.2.3 + parse("<1.2.3-alpha").to_s includes 1.2.3-alph + parse(">1.2.3-alpha").to_s includes 1.2.3-alpha.0 + parse("> 1.2.3-alpha").to_s includes 999.0.0 + "<1.2.3-alpha" includes 1.2.3-alph + parse("<= 1.2.3-alpha").to_s excludes 1.2.3-alphb + "< 1.2.3" excludes 0.0.0-0 + parse("<1.2.3-alpha").to_s excludes 2.0.0 + parse("<=1.2.3-alpha").to_s excludes 1.2.3-alphb + ">= 1.2.3-alpha" includes 1.2.3-alpha0 + "> 1.2.3" includes 999.0.0 + "< 1.2.3" stringifies as <1.2.3 + parse("<1.2.3-alpha").to_s excludes 0.0.0-0 + parse("<1.2.3").to_s excludes 1.2.3-0 + parse(">=1.2.3").to_s excludes 1.2.3-0 + "<1.2.3-alpha" stringifies as <1.2.3-alpha + parse("< 1.2.3-alpha").to_s includes 0.0.0 + parse(">1.2.3-alpha").to_s includes 999.0.0 + parse("< 1.2.3").to_s excludes 0.0.0-0 + "<=1.2.3-alpha" excludes 1.2.3-alpha0 + "<=1.2.3-alpha" includes 0.0.0 + ">1.2.3" includes 999.0.0 + parse(">= 1.2.3-alpha").to_s excludes 1.2.4-alpha + "< 1.2.3-alpha" excludes 2.0.0 + parse("> 1.2.3-alpha").to_s excludes 1.2.3-alpha + "<1.2.3-alpha" excludes 2.0.0 + "<=1.2.3" includes 1.2.3 + "> 1.2.3-alpha" includes 999.0.0 + ">= 1.2.3" stringifies as >=1.2.3 + ">=1.2.3" excludes 1.2.2 + parse("<= 1.2.3-alpha").to_s excludes 1.2.3-alpha.0 + ">= 1.2.3" excludes 1.2.2 + ">=1.2.3-alpha" includes 1.2.3-alpha + ">=1.2.3-alpha" excludes 1.2.4-alpha + parse(">=1.2.3").to_s excludes 1.2.2 + "<= 1.2.3-alpha" stringifies as <=1.2.3-alpha + "<= 1.2.3" excludes 1.2.3-0 + "> 1.2.3" excludes 1.2.3 + parse("<=1.2.3-alpha").to_s excludes 1.2.3-alpha0 + ">=1.2.3-alpha" stringifies as >=1.2.3-alpha + "< 1.2.3-alpha" excludes 0.0.0-0 + "< 1.2.3-alpha" stringifies as <1.2.3-alpha + "<=1.2.3" excludes 0.0.0-0 + parse("<= 1.2.3-alpha").to_s excludes 0.0.0-0 + parse("< 1.2.3-alpha").to_s excludes 0.0.0-0 + "<=1.2.3-alpha" stringifies as <=1.2.3-alpha + ">=1.2.3-alpha" includes 1.2.3-alpha0 + ">= 1.2.3-alpha" stringifies as >=1.2.3-alpha + ">=1.2.3" stringifies as >=1.2.3 + "> 1.2.3-alpha" stringifies as >1.2.3-alpha + "< 1.2.3" includes 0.0.0 + "> 1.2.3" excludes 1.2.4-0 + "<1.2.3-alpha" includes 0.0.0 + parse(">=1.2.3-alpha").to_s includes 1.2.3-alpha0 + ">1.2.3-alpha" stringifies as >1.2.3-alpha + "< 1.2.3-alpha" includes 1.2.3-alph + "<=1.2.3-alpha" excludes 1.2.3-alphb + "<=1.2.3-alpha" excludes 0.0.0-0 + parse("<=1.2.3-alpha").to_s includes 0.0.0 + parse("<= 1.2.3").to_s includes 1.2.3 + "< 1.2.3-alpha" excludes 1.2.3-alpha + parse("<1.2.3").to_s includes 1.2.2 + "< 1.2.3" excludes 2.0.0 + "> 1.2.3-alpha" excludes 1.2.3-alpha + ">=1.2.3-alpha" includes 999.0.0 + "<1.2.3" stringifies as <1.2.3 + parse("< 1.2.3").to_s excludes 2.0.0 + parse(">=1.2.3-alpha").to_s includes 1.2.3-alpha + parse("> 1.2.3").to_s includes 999.0.0 + "<1.2.3" excludes 1.2.3-0 + "<=1.2.3-alpha" excludes 1.2.3-alpha.0 + parse(">= 1.2.3-alpha").to_s includes 1.2.3-alpha0 + parse("<1.2.3").to_s excludes 0.0.0-0 + "<= 1.2.3" includes 1.2.3 + "<= 1.2.3" stringifies as <=1.2.3 + "<= 1.2.3" excludes 0.0.0-0 + parse("< 1.2.3").to_s includes 1.2.2 + ">=1.2.3" excludes 1.2.3-0 + "<1.2.3" includes 1.2.2 + parse("< 1.2.3-alpha").to_s includes 1.2.3-alph + loose version expressions + parse("1.2.3").to_s excludes 1.2.2 + parse("1").to_s excludes 0.999.999 + parse("1.X").to_s includes 1.0.0 + "1.2" includes 1.2.999 + "1.x" excludes 2.0.0-0 + "1" stringifies as >=1.0.0 <2.0.0 + "1.2" excludes 1.1.999 + parse("1.2.x").to_s excludes 1.1.999 + "1.2.x" includes 1.2.0 + parse("1.x").to_s excludes 1.0.0-alpha + parse("1.X").to_s excludes 2.0.0-0 + "1.2" stringifies as >=1.2.0 <1.3.0 + parse("1.2.X").to_s excludes 1.3.0-0 + "1.X" includes 1.0.0 + "1.2.x" excludes 1.1.999 + parse("1.2.x").to_s includes 1.2.0 + parse("1.x").to_s excludes 2.0.0-0 + "1.x" excludes 0.999.999 + "1.2.3" excludes 1.2.3-alpha + "1.2.3-alpha" includes 1.2.3-alpha + "1.x" stringifies as >=1.0.0 <2.0.0 + parse("1.2.3-alpha").to_s excludes 1.2.3-999 + "1.x" excludes 1.0.0-alpha + parse("1").to_s includes 1.0.0 + "1.2.3" excludes 1.2.4-alpha + parse("1").to_s excludes 2.0.0-0 + parse("1.2.3").to_s includes 1.2.3 + parse("1.2.X").to_s excludes 1.2.0-alpha + parse("1.2").to_s excludes 1.3.0-0 + parse("1.2.X").to_s includes 1.2.999 + parse("1.2.X").to_s includes 1.2.0 + "1.2.X" includes 1.2.0 + "1.X" excludes 0.999.999 + "1" excludes 0.999.999 + parse("1.2").to_s excludes 1.1.999 + "1.2.3" includes 1.2.3 + parse("1.2.3-alpha").to_s includes 1.2.3-alpha + parse("1.2").to_s includes 1.2.999 + "1.2.X" excludes 1.2.0-alpha + "1.2.X" stringifies as >=1.2.0 <1.3.0 + parse("1.X").to_s excludes 1.0.0-alpha + parse("1.X").to_s excludes 0.999.999 + "1.2.3" stringifies as 1.2.3 + "1.2" excludes 1.3.0-0 + "1.2.x" includes 1.2.999 + "1" includes 1.0.0 + parse("1.2").to_s excludes 1.2.0-alpha + parse("1.2.x").to_s excludes 1.3.0-0 + "1.2.X" excludes 1.3.0-0 + parse("1.x").to_s excludes 0.999.999 + "1.X" excludes 1.0.0-alpha + parse("1.2.x").to_s includes 1.2.999 + parse("1.x").to_s includes 1.0.0 + parse("1").to_s includes 1.999.0 + "1.2.X" includes 1.2.999 + "1.2" excludes 1.2.0-alpha + "1.2.x" stringifies as >=1.2.0 <1.3.0 + "1.X" includes 1.999.0 + "1.x" includes 1.999.0 + "1.X" excludes 2.0.0-0 + "1.2.3-alpha" stringifies as 1.2.3-alpha + parse("1.2.3-alpha").to_s excludes 1.2.3-beta + parse("1.2.3").to_s excludes 1.2.3-alpha + parse("1.x").to_s includes 1.999.0 + parse("1.2.3").to_s excludes 1.2.4-alpha + "1.2.3" excludes 1.2.2 + "1.X" stringifies as >=1.0.0 <2.0.0 + parse("1.2").to_s includes 1.2.0 + "1.2.x" excludes 1.2.0-alpha + "1.x" includes 1.0.0 + parse("1").to_s excludes 1.0.0-alpha + "1.2.X" excludes 1.1.999 + "1.2.3-alpha" excludes 1.2.3-999 + "1.2.3-alpha" excludes 1.2.3-beta + parse("1.2.X").to_s excludes 1.1.999 + "1.2.x" excludes 1.3.0-0 + "1" excludes 1.0.0-alpha + parse("1.2.x").to_s excludes 1.2.0-alpha + "1.2" includes 1.2.0 + "1" excludes 2.0.0-0 + parse("1.X").to_s includes 1.999.0 + "1" includes 1.999.0 + invalid expressions + raise an appropriate exception "reasonably close" expressions + "~1.2" excludes 1.1.999 + "~ 1" excludes 2.0.0-0 + "~ 1.2.3" excludes 1.2.3-0 + "~1.2.3-alpha" stringifies as >=1.2.3-alpha <1.3.0 + parse("~ 1.2.3").to_s includes 1.2.5 + "~ 1.2.3-alpha" includes 1.2.3-alpha "~ 1" stringifies as >=1.0.0 <2.0.0 - parse("~1.2.3").to_s includes 1.2.3 - parse("~1.2.3-alpha").to_s excludes 1.2.4-0 - "~1.2.3-alpha" excludes 1.2.3-alph - "~1.2.3-alpha" includes 1.2.3-alpha + "~ 1.2.3" includes 1.2.5 parse("~1.2").to_s includes 1.2.0 - "~1.2.3" excludes 1.3.0-0 - "~1.2.3-alpha" stringifies as >=1.2.3-alpha <1.3.0 - parse("~ 1.2.3-alpha").to_s excludes 1.2.4-0 - "~ 1.2.3" stringifies as >=1.2.3 <1.3.0 - "~1" excludes 0.999.999 + parse("~ 1.2").to_s excludes 1.1.999 parse("~1.2.3-alpha").to_s includes 1.2.3-alpha - parse("~1.2").to_s includes 1.2.999 - parse("~1").to_s includes 1.0.0 - "~ 1.2.3-alpha" excludes 1.2.3-alph - "~1" includes 1.0.0 - parse("~1.2.3").to_s includes 1.2.5 - "~1" excludes 2.0.0-0 - "~ 1.2" excludes 1.1.999 - "~ 1" includes 1.999.999 + parse("~ 1.2.3-alpha").to_s includes 1.2.3-alpha + parse("~1.2.3").to_s includes 1.2.3 parse("~ 1.2").to_s includes 1.2.999 - "~1.2.3" includes 1.2.3 - "~1.2" excludes 1.1.999 + "~1.2" excludes 1.3.0-0 + parse("~1.2.3").to_s excludes 1.2.3-0 + "~1.2" excludes 1.2.0-0 + parse("~1").to_s excludes 1.0.0-0 + parse("~ 1.2").to_s excludes 1.2.0-0 + "~1" excludes 2.0.0-0 + "~ 1.2" excludes 1.3.0-0 + parse("~1.2").to_s excludes 1.2.0-0 parse("~ 1.2.3").to_s includes 1.2.3 - parse("~ 1").to_s excludes 1.0.0-0 - "~1" includes 1.999.999 - parse("~ 1.2.3").to_s excludes 1.2.3-0 - parse("~1").to_s excludes 0.999.999 - "~ 1.2" stringifies as >=1.2.0 <1.3.0 + "~ 1.2.3" stringifies as >=1.2.3 <1.3.0 parse("~ 1").to_s excludes 0.999.999 + "~ 1.2" includes 1.2.999 + parse("~ 1.2.3-alpha").to_s excludes 1.2.3-alph parse("~ 1.2.3").to_s excludes 1.3.0-0 - parse("~1.2.3-alpha").to_s includes 1.2.3 - parse("~ 1").to_s includes 1.0.0 - "~1.2" excludes 1.3.0-0 - parse("~1").to_s excludes 1.0.0-0 - "~1.2.3-alpha" excludes 1.2.4-0 - "~ 1.2.3-alpha" includes 1.2.3-alpha - parse("~ 1").to_s excludes 2.0.0-0 - "~1.2" includes 1.2.999 - "~ 1" excludes 1.0.0-0 - parse("~ 1").to_s includes 1.999.999 - "~ 1.2.3" includes 1.2.3 - "~1.2.3" includes 1.2.5 - parse("~1.2.3").to_s excludes 1.2.2 - parse("~ 1.2.3-alpha").to_s includes 1.2.3-alpha - parse("~1.2.3-alpha").to_s excludes 1.2.3-alph - parse("~1.2").to_s excludes 1.1.999 parse("~1").to_s excludes 2.0.0-0 + parse("~1").to_s includes 1.999.999 + parse("~1.2.3-alpha").to_s excludes 1.2.4-0 + "~ 1" includes 1.0.0 + "~1.2.3-alpha" includes 1.2.3 + parse("~1").to_s excludes 0.999.999 + "~1.2" includes 1.2.999 + "~ 1.2" stringifies as >=1.2.0 <1.3.0 "~ 1.2.3-alpha" stringifies as >=1.2.3-alpha <1.3.0 - "~ 1" excludes 0.999.999 + "~1.2.3" excludes 1.2.3-0 "~1" stringifies as >=1.0.0 <2.0.0 - parse("~ 1.2").to_s includes 1.2.0 - parse("~ 1.2.3").to_s includes 1.2.5 + parse("~ 1.2.3").to_s excludes 1.2.2 + "~ 1.2.3" includes 1.2.3 + "~1.2.3-alpha" includes 1.2.3-alpha + parse("~ 1").to_s excludes 1.0.0-0 + "~ 1.2" excludes 1.1.999 + parse("~1.2").to_s excludes 1.1.999 + parse("~ 1.2.3-alpha").to_s excludes 1.2.4-0 parse("~ 1.2").to_s excludes 1.3.0-0 - "~ 1.2.3" excludes 1.2.2 - "~ 1" excludes 2.0.0-0 + "~1.2.3" includes 1.2.3 + parse("~1").to_s includes 1.0.0 + parse("~1.2").to_s excludes 1.3.0-0 + parse("~1.2.3-alpha").to_s excludes 1.2.3-alph + parse("~ 1.2.3").to_s excludes 1.2.3-0 + "~1" excludes 1.0.0-0 parse("~1.2.3").to_s excludes 1.3.0-0 - parse("~ 1.2").to_s excludes 1.1.999 - "~ 1.2" excludes 1.3.0-0 - parse("~ 1.2").to_s excludes 1.2.0-0 - "~ 1.2.3" includes 1.2.5 - parse("~ 1.2.3").to_s excludes 1.2.2 + parse("~ 1").to_s includes 1.0.0 + parse("~1.2.3").to_s excludes 1.2.2 + "~1.2.3-alpha" excludes 1.2.4-0 + "~ 1" excludes 0.999.999 + "~ 1.2" includes 1.2.0 + parse("~1.2.3").to_s includes 1.2.5 + "~1.2.3" excludes 1.3.0-0 + "~ 1" excludes 1.0.0-0 "~ 1.2" excludes 1.2.0-0 - "~ 1.2.3-alpha" excludes 1.2.4-0 - "~1.2" excludes 1.2.0-0 - "~1.2.3" stringifies as >=1.2.3 <1.3.0 - "~ 1.2.3" excludes 1.2.3-0 "~ 1.2.3-alpha" includes 1.2.3 "~1.2" includes 1.2.0 - "~1.2.3-alpha" includes 1.2.3 - "~ 1.2" includes 1.2.999 - "~1.2.3" excludes 1.2.3-0 - "~ 1.2.3" excludes 1.3.0-0 + parse("~ 1").to_s includes 1.999.999 + parse("~ 1.2").to_s includes 1.2.0 + "~ 1.2.3-alpha" excludes 1.2.3-alph "~1.2.3" excludes 1.2.2 - "~ 1.2" includes 1.2.0 - "~1" excludes 1.0.0-0 - parse("~1.2").to_s excludes 1.2.0-0 + "~1" includes 1.999.999 + parse("~ 1").to_s excludes 2.0.0-0 + parse("~1.2.3-alpha").to_s includes 1.2.3 + "~1.2.3-alpha" excludes 1.2.3-alph + parse("~1.2").to_s includes 1.2.999 "~1.2" stringifies as >=1.2.0 <1.3.0 - "~ 1" includes 1.0.0 - parse("~1.2").to_s excludes 1.3.0-0 + "~ 1" includes 1.999.999 + "~1.2.3" includes 1.2.5 + "~ 1.2.3" excludes 1.2.2 + "~1" includes 1.0.0 + "~1" excludes 0.999.999 + "~ 1.2.3-alpha" excludes 1.2.4-0 parse("~ 1.2.3-alpha").to_s includes 1.2.3 - parse("~ 1.2.3-alpha").to_s excludes 1.2.3-alph - parse("~1").to_s includes 1.999.999 - parse("~1.2.3").to_s excludes 1.2.3-0 + "~1.2.3" stringifies as >=1.2.3 <1.3.0 + "~ 1.2.3" excludes 1.3.0-0 + ored expressions + non-overlapping + "1.2.3 || 1.2.5" excludes 1.2.4 + parse("1.2.3 || 1.2.5").to_s excludes 1.2.4 + "1.2.3 || 1.2.5" excludes 1.2.5-0 + "1.2.3 || 1.2.5" excludes 1.2.3-0 + parse("1.2.3 || 1.2.5").to_s excludes 1.2.3-0 + returns nil on exclude_end? + returns nil on begin + parse("1.2.3 || 1.2.5").to_s excludes 1.2.5-0 + parse("1.2.3 || 1.2.5").to_s includes 1.2.3 + "1.2.3 || 1.2.5" includes 1.2.3 + returns nil on exclude_begin? + parse("1.2.3 || 1.2.5").to_s includes 1.2.5 + "1.2.3 || 1.2.5" includes 1.2.5 + "1.2.3 || 1.2.5" stringifies as 1.2.3 || 1.2.5 + returns nil on end + adjacent + returns nil on exclude_begin? + parse("1.2.3 || 1.2.4 || 1.2.5").to_s includes 1.2.3 + parse("1.2.3 || 1.2.4 || 1.2.5").to_s excludes 1.2.5-0 + parse(">=1.2.3 <1.2.5 || >=1.2.5 <1.3.0").to_s excludes 1.2.6-0 + "1.2.3 || 1.2.4 || 1.2.5" includes 1.2.3 + parse("1.2.3 || 1.2.4 || 1.2.5").to_s includes 1.2.5 + ">=1.2.3 <1.2.5 || >=1.2.5 <1.3.0" excludes 1.2.3-0 + "1.2.3 || 1.2.4 || 1.2.5" excludes 1.2.5-0 + ">=1.2.3 <1.2.5 || >=1.2.5 <1.3.0" includes 1.2.3 + returns expected begin + "1.2.3 || 1.2.4 || 1.2.5" stringifies as >=1.2.3 <=1.2.5 + parse(">=1.2.3 <1.2.5 || >=1.2.5 <1.3.0").to_s includes 1.2.6 + ">=1.2.3 <1.2.5 || >=1.2.5 <1.3.0" excludes 1.2.6-0 + "1.2.3 || 1.2.4 || 1.2.5" excludes 1.2.3-0 + "1.2.3 || 1.2.4 || 1.2.5" includes 1.2.5 + ">=1.2.3 <1.2.5 || >=1.2.5 <1.3.0" stringifies as >=1.2.3 <1.3.0 + returns nil on exclude_end? + ">=1.2.3 <1.2.5 || >=1.2.5 <1.3.0" includes 1.2.6 + parse(">=1.2.3 <1.2.5 || >=1.2.5 <1.3.0").to_s includes 1.2.3 + returns nil on end + parse("1.2.3 || 1.2.4 || 1.2.5").to_s excludes 1.2.3-0 + parse(">=1.2.3 <1.2.5 || >=1.2.5 <1.3.0").to_s excludes 1.2.3-0 + overlapping + parse(">=1.2.3 || 1.2.5").to_s includes 1.2.4 + ">=1.2.3 <=1.2.5 || >=1.2.5 <1.3.0" excludes 1.2.6-0 + ">=1.2.3 <=1.2.5 || >=1.2.5 <1.3.0" stringifies as >=1.2.3 <1.3.0 + parse(">=1.2.3 || 1.2.5").to_s includes 1.2.3 + parse(">=1.2.3 || 1.2.5").to_s excludes 1.2.4-0 + ">=1.2.3 <=1.2.5 || >=1.2.5 <1.3.0" includes 1.2.6 + ">=1.2.3 <=1.2.5 || >=1.2.5 <1.3.0" excludes 1.2.3-0 + ">=1.2.3 <=1.2.5 || >=1.2.5 <1.3.0" includes 1.2.3 + parse(">=1.2.3 <=1.2.5 || >=1.2.5 <1.3.0").to_s excludes 1.2.6-0 + parse(">=1.2.3 || 1.2.5").to_s excludes 1.2.3-0 + ">=1.2.3 || 1.2.5" excludes 1.2.4-0 + ">=1.2.3 || 1.2.5" includes 1.2.3 + parse(">=1.2.3 <=1.2.5 || >=1.2.5 <1.3.0").to_s includes 1.2.6 + ">=1.2.3 || 1.2.5" stringifies as >=1.2.3 + ">=1.2.3 || 1.2.5" excludes 1.2.3-0 + parse(">=1.2.3 <=1.2.5 || >=1.2.5 <1.3.0").to_s includes 1.2.3 + ">=1.2.3 || 1.2.5" includes 1.2.4 + parse(">=1.2.3 <=1.2.5 || >=1.2.5 <1.3.0").to_s excludes 1.2.3-0 unioned expressions - parse(">1.0.0 >2.0.0 >=3.0.0 <5.0.0").to_s includes 4.999.999 - "1 <=1.2.5" excludes 1.0.0-0 - "1 <=1.2.5" includes 1.2.5 - parse("1.2 <1.2.5").to_s excludes 1.9.0 - "1.2 <1.2.5" excludes 1.2.0-0 + parse("1.2 <1.2.5").to_s excludes 1.2.0-0 + parse(">1.0.0 >2.0.0 >=3.0.0 <5.0.0").to_s excludes 3.0.0-0 + "<1.0.0 >2.0.0" stringifies as <0.0.0 + parse("1.2 <1.2.5").to_s includes 1.2.4 + parse("1.2 <1.2.5").to_s includes 1.2.0 + parse(">1.0.0 >2.0.0 >=3.0.0 <5.0.0").to_s includes 3.0.0 ">1.0.0 >2.0.0 >=3.0.0 <5.0.0" excludes 3.0.0-0 - "1.2 <1.2.5" stringifies as >=1.2.0 <1.2.5 parse("1 <=1.2.5").to_s excludes 1.2.6-0 + "1 <=1.2.5" excludes 0.999.999 + parse("1.2 <1.2.5").to_s excludes 1.9.0 + "1.2 <1.2.5" excludes 1.1.999 + ">1.0.0 >2.0.0 >=3.0.0 <5.0.0" excludes 5.0.0-0 + ">1.0.0 >2.0.0 >=3.0.0 <5.0.0" stringifies as >=3.0.0 <5.0.0 + parse(">1.0.0 >2.0.0 >=3.0.0 <5.0.0").to_s excludes 2.999.999 + "1.2 <1.2.5" includes 1.2.0 + "1 <=1.2.5" includes 1.0.0 + ">1.0.0 >2.0.0 >=3.0.0 <5.0.0" includes 4.999.999 + "1 <=1.2.5" excludes 1.0.0-0 + parse("1 <=1.2.5").to_s excludes 1.0.0-0 + parse("1 <=1.2.5").to_s includes 1.0.0 parse("1 <=1.2.5").to_s excludes 0.999.999 - "1.2 <1.2.5" excludes 1.2.5-0 parse("1 <=1.2.5").to_s excludes 1.9.0 - "1.2 <1.2.5" includes 1.2.0 - "1 <=1.2.5" stringifies as >=1.0.0 <=1.2.5 - parse(">1.0.0 >2.0.0 >=3.0.0 <5.0.0").to_s excludes 2.999.999 + "1 <=1.2.5" excludes 1.2.6-0 + parse("1 <=1.2.5").to_s includes 1.2.5 + "1.2 <1.2.5" stringifies as >=1.2.0 <1.2.5 + "1.2 <1.2.5" excludes 1.2.5-0 + parse("1.2 <1.2.5").to_s excludes 1.1.999 + ">1.0.0 >2.0.0 >=3.0.0 <5.0.0" excludes 2.999.999 + ">1.0.0 >2.0.0 >=3.0.0 <5.0.0" includes 3.0.0 + "<1.0.0 >2.0.0" excludes 0.0.0-0 "1.2 <1.2.5" excludes 1.9.0 - parse(">1.0.0 >2.0.0 >=3.0.0 <5.0.0").to_s excludes 3.0.0-0 - parse("1.2 <1.2.5").to_s includes 1.2.0 + "1 <=1.2.5" includes 1.2.5 parse("1.2 <1.2.5").to_s excludes 1.2.5-0 + parse("<1.0.0 >2.0.0").to_s excludes 0.0.0 + "1 <=1.2.5" stringifies as >=1.0.0 <=1.2.5 "1 <=1.2.5" excludes 1.9.0 - "1 <=1.2.5" excludes 0.999.999 - parse("1 <=1.2.5").to_s excludes 1.0.0-0 - ">1.0.0 >2.0.0 >=3.0.0 <5.0.0" includes 3.0.0 - parse("1.2 <1.2.5").to_s excludes 1.2.0-0 - ">1.0.0 >2.0.0 >=3.0.0 <5.0.0" excludes 2.999.999 - parse(">1.0.0 >2.0.0 >=3.0.0 <5.0.0").to_s includes 3.0.0 - parse("1 <=1.2.5").to_s includes 1.2.5 - parse("1.2 <1.2.5").to_s includes 1.2.4 - "1.2 <1.2.5" excludes 1.1.999 - parse(">1.0.0 >2.0.0 >=3.0.0 <5.0.0").to_s excludes 5.0.0-0 "1.2 <1.2.5" includes 1.2.4 - "<1.0.0 >2.0.0" stringifies as <0.0.0 - parse("<1.0.0 >2.0.0").to_s excludes 0.0.0 - "1 <=1.2.5" includes 1.0.0 - parse("1.2 <1.2.5").to_s excludes 1.1.999 - ">1.0.0 >2.0.0 >=3.0.0 <5.0.0" stringifies as >=3.0.0 <5.0.0 + "1.2 <1.2.5" excludes 1.2.0-0 + parse(">1.0.0 >2.0.0 >=3.0.0 <5.0.0").to_s includes 4.999.999 "<1.0.0 >2.0.0" excludes 0.0.0 - "<1.0.0 >2.0.0" excludes 0.0.0-0 - "1 <=1.2.5" excludes 1.2.6-0 - parse("1 <=1.2.5").to_s includes 1.0.0 parse("<1.0.0 >2.0.0").to_s excludes 0.0.0-0 - ">1.0.0 >2.0.0 >=3.0.0 <5.0.0" excludes 5.0.0-0 - ">1.0.0 >2.0.0 >=3.0.0 <5.0.0" includes 4.999.999 - loose version expressions - "1.2.X" includes 1.2.0 - parse("1.2.3").to_s excludes 1.2.2 - "1" excludes 1.0.0-alpha - "1.x" includes 1.999.0 - "1.2.x" excludes 1.3.0-0 - parse("1.2.3-alpha").to_s includes 1.2.3-alpha - parse("1.2.3-alpha").to_s excludes 1.2.3-beta - parse("1.2.X").to_s includes 1.2.0 - "1.2" includes 1.2.0 - "1.2.x" excludes 1.1.999 - "1.x" includes 1.0.0 - "1.x" stringifies as >=1.0.0 <2.0.0 - parse("1.x").to_s excludes 2.0.0-0 - parse("1").to_s excludes 2.0.0-0 - "1.2.3" excludes 1.2.3-alpha - "1.X" stringifies as >=1.0.0 <2.0.0 - parse("1.2.x").to_s excludes 1.2.0-alpha - parse("1.2.x").to_s includes 1.2.999 - parse("1.2.3-alpha").to_s excludes 1.2.3-999 - "1.2.3-alpha" stringifies as 1.2.3-alpha - "1.2" excludes 1.1.999 - parse("1.2.X").to_s includes 1.2.999 - parse("1.2.3").to_s excludes 1.2.3-alpha - parse("1.2").to_s excludes 1.3.0-0 - "1.X" includes 1.0.0 - parse("1.X").to_s includes 1.0.0 - parse("1.2.3").to_s excludes 1.2.4-alpha - "1.2.x" stringifies as >=1.2.0 <1.3.0 - parse("1.2").to_s excludes 1.1.999 - "1.2.3-alpha" excludes 1.2.3-999 - parse("1.2").to_s includes 1.2.999 - parse("1.X").to_s excludes 2.0.0-0 - "1.X" excludes 1.0.0-alpha - "1.2.x" excludes 1.2.0-alpha - "1" excludes 0.999.999 - parse("1").to_s includes 1.999.0 - parse("1.2").to_s includes 1.2.0 - "1.x" excludes 2.0.0-0 - parse("1.x").to_s includes 1.0.0 - parse("1.2.X").to_s excludes 1.2.0-alpha - "1" excludes 2.0.0-0 - parse("1.2").to_s excludes 1.2.0-alpha - "1.2.X" excludes 1.2.0-alpha - "1" includes 1.999.0 - "1.2.X" excludes 1.3.0-0 - parse("1.2.x").to_s excludes 1.3.0-0 - "1.X" excludes 0.999.999 - "1.2.3" excludes 1.2.4-alpha - "1.2" excludes 1.3.0-0 - "1.2.x" includes 1.2.999 - parse("1.X").to_s excludes 1.0.0-alpha - parse("1.X").to_s excludes 0.999.999 - "1.2.3-alpha" includes 1.2.3-alpha - "1.2.3-alpha" excludes 1.2.3-beta - "1" stringifies as >=1.0.0 <2.0.0 - "1.2.3" includes 1.2.3 - "1" includes 1.0.0 - "1.2.X" includes 1.2.999 - "1.X" excludes 2.0.0-0 - parse("1.2.X").to_s excludes 1.1.999 - parse("1.2.3").to_s includes 1.2.3 - parse("1.x").to_s excludes 1.0.0-alpha - parse("1.x").to_s excludes 0.999.999 - parse("1.x").to_s includes 1.999.0 - parse("1.X").to_s includes 1.999.0 - parse("1").to_s excludes 0.999.999 - parse("1.2.x").to_s includes 1.2.0 - parse("1.2.x").to_s excludes 1.1.999 - parse("1").to_s excludes 1.0.0-alpha - "1.2.X" stringifies as >=1.2.0 <1.3.0 - "1.X" includes 1.999.0 - parse("1.2.X").to_s excludes 1.3.0-0 - "1.2.x" includes 1.2.0 - "1.2" stringifies as >=1.2.0 <1.3.0 - "1.x" excludes 1.0.0-alpha - "1.x" excludes 0.999.999 - "1.2.3" stringifies as 1.2.3 - "1.2" excludes 1.2.0-alpha - "1.2.3" excludes 1.2.2 - "1.2.X" excludes 1.1.999 - parse("1").to_s includes 1.0.0 - "1.2" includes 1.2.999 - invalid expressions - raise an appropriate exception - open-ended expressions - parse("<= 1.2.3-alpha").to_s excludes 1.2.3-alpha0 - parse("< 1.2.3").to_s includes 0.0.0 - parse("<=1.2.3-alpha").to_s excludes 1.2.3-alphb - ">=1.2.3-alpha" includes 1.2.3-alpha - ">= 1.2.3" excludes 1.2.3-0 - parse("<1.2.3-alpha").to_s excludes 0.0.0-0 - parse(">1.2.3").to_s excludes 1.2.3 - parse("> 1.2.3-alpha").to_s includes 999.0.0 - parse("<= 1.2.3").to_s includes 0.0.0 - parse(">=1.2.3-alpha").to_s excludes 1.2.4-alpha - "<1.2.3-alpha" stringifies as <1.2.3-alpha - "< 1.2.3-alpha" excludes 0.0.0-0 - ">=1.2.3-alpha" excludes 1.2.3-alph - parse(">= 1.2.3").to_s excludes 1.2.3-0 - ">1.2.3-alpha" includes 1.2.3-alpha0 - parse(">1.2.3").to_s includes 999.0.0 - parse("<1.2.3-alpha").to_s excludes 1.2.3-alpha - parse("<1.2.3").to_s excludes 0.0.0-0 - "< 1.2.3" excludes 2.0.0 - ">=1.2.3" excludes 1.2.3-0 - ">= 1.2.3" includes 999.0.0 - "< 1.2.3-alpha" stringifies as <1.2.3-alpha - "<= 1.2.3" includes 0.0.0 - "<=1.2.3" excludes 1.2.3-0 - parse("<=1.2.3-alpha").to_s excludes 1.2.3-alpha0 - "<=1.2.3-alpha" excludes 1.2.3-alphb - "<= 1.2.3" stringifies as <=1.2.3 - ">= 1.2.3-alpha" includes 999.0.0 - parse(">= 1.2.3").to_s includes 999.0.0 - parse("<1.2.3").to_s includes 1.2.2 - "<1.2.3-alpha" excludes 0.0.0-0 - ">= 1.2.3" stringifies as >=1.2.3 - parse("<=1.2.3-alpha").to_s excludes 1.2.3-alpha.0 - ">=1.2.3" stringifies as >=1.2.3 - parse("< 1.2.3-alpha").to_s excludes 1.2.3-alpha - "<=1.2.3-alpha" excludes 0.0.0-0 - "<1.2.3" excludes 2.0.0 - ">=1.2.3-alpha" includes 999.0.0 - "<1.2.3" stringifies as <1.2.3 - parse("< 1.2.3-alpha").to_s includes 1.2.3-alph - "> 1.2.3-alpha" excludes 1.2.3-alpha - ">1.2.3" includes 999.0.0 - ">=1.2.3-alpha" stringifies as >=1.2.3-alpha - "<=1.2.3-alpha" excludes 1.2.3-alpha.0 - ">1.2.3" excludes 1.2.3 - parse("<1.2.3").to_s excludes 1.2.3-0 - parse("<=1.2.3-alpha").to_s excludes 0.0.0-0 - "<=1.2.3" includes 1.2.3 - "< 1.2.3-alpha" includes 1.2.3-alph - "< 1.2.3" excludes 1.2.3-0 - parse("> 1.2.3").to_s excludes 1.2.3 - "< 1.2.3-alpha" includes 0.0.0 - parse(">= 1.2.3-alpha").to_s excludes 1.2.4-alpha - parse("< 1.2.3").to_s excludes 0.0.0-0 - "> 1.2.3-alpha" includes 999.0.0 - ">= 1.2.3-alpha" includes 1.2.3-alpha0 - "< 1.2.3" includes 1.2.2 - parse("<=1.2.3").to_s excludes 0.0.0-0 - "<= 1.2.3-alpha" excludes 1.2.3-alphb - "<1.2.3-alpha" includes 0.0.0 - parse("<= 1.2.3-alpha").to_s excludes 1.2.3-alpha.0 - parse(">= 1.2.3-alpha").to_s includes 999.0.0 - parse(">1.2.3-alpha").to_s includes 1.2.3-alpha.0 - "> 1.2.3-alpha" includes 1.2.3-alpha0 - "<= 1.2.3-alpha" includes 0.0.0 - ">=1.2.3" includes 999.0.0 - "<= 1.2.3-alpha" excludes 0.0.0-0 - ">1.2.3-alpha" includes 1.2.3-alpha.0 - "<1.2.3-alpha" includes 1.2.3-alph - parse("> 1.2.3").to_s includes 999.0.0 - parse(">1.2.3-alpha").to_s includes 999.0.0 - parse("<= 1.2.3").to_s excludes 0.0.0-0 - ">= 1.2.3-alpha" stringifies as >=1.2.3-alpha - parse("<=1.2.3").to_s excludes 1.2.3-0 - parse("<1.2.3").to_s excludes 2.0.0 - parse(">=1.2.3-alpha").to_s includes 1.2.3-alpha - ">= 1.2.3-alpha" excludes 1.2.4-alpha - "<= 1.2.3-alpha" excludes 1.2.3-alpha0 - parse(">=1.2.3-alpha").to_s excludes 1.2.3-alph - "> 1.2.3" excludes 1.2.4-0 - "<= 1.2.3-alpha" includes 1.2.3-alpha - parse("< 1.2.3").to_s excludes 2.0.0 - "<1.2.3" excludes 0.0.0-0 - parse("<= 1.2.3-alpha").to_s includes 1.2.3-alpha - "< 1.2.3" stringifies as <1.2.3 - "<= 1.2.3" excludes 0.0.0-0 - parse("<=1.2.3").to_s includes 1.2.3 - "< 1.2.3-alpha" excludes 2.0.0 - "<=1.2.3" excludes 0.0.0-0 - parse("<1.2.3").to_s includes 0.0.0 - parse(">1.2.3").to_s excludes 1.2.4-0 - "<= 1.2.3" excludes 1.2.3-0 - "<= 1.2.3" includes 1.2.3 - parse(">=1.2.3").to_s includes 999.0.0 - ">= 1.2.3" excludes 1.2.2 - ">=1.2.3" excludes 1.2.2 - parse("<= 1.2.3-alpha").to_s excludes 0.0.0-0 - ">= 1.2.3-alpha" includes 1.2.3-alpha - "<=1.2.3-alpha" includes 0.0.0 - "<=1.2.3" stringifies as <=1.2.3 - parse("<= 1.2.3").to_s excludes 1.2.3-0 - "< 1.2.3" includes 0.0.0 - parse(">=1.2.3-alpha").to_s includes 999.0.0 - parse("<= 1.2.3-alpha").to_s includes 0.0.0 - "> 1.2.3" includes 999.0.0 - parse("< 1.2.3-alpha").to_s excludes 0.0.0-0 - "<1.2.3" includes 1.2.2 - parse("<=1.2.3-alpha").to_s includes 0.0.0 - ">=1.2.3-alpha" excludes 1.2.4-alpha - "<1.2.3-alpha" excludes 1.2.3-alpha - parse("< 1.2.3-alpha").to_s includes 0.0.0 - "<1.2.3" excludes 1.2.3-0 - "> 1.2.3" stringifies as >1.2.3 - parse(">= 1.2.3").to_s excludes 1.2.2 - ">1.2.3-alpha" excludes 1.2.3-alpha - parse("> 1.2.3-alpha").to_s includes 1.2.3-alpha0 - ">1.2.3" stringifies as >1.2.3 - parse("<1.2.3-alpha").to_s includes 1.2.3-alph - parse("> 1.2.3").to_s excludes 1.2.4-0 - parse("<=1.2.3-alpha").to_s includes 1.2.3-alpha - parse("> 1.2.3-alpha").to_s excludes 1.2.3-alpha - ">= 1.2.3-alpha" excludes 1.2.3-alph - "> 1.2.3-alpha" stringifies as >1.2.3-alpha - parse("<1.2.3-alpha").to_s excludes 2.0.0 - "<=1.2.3-alpha" stringifies as <=1.2.3-alpha - ">=1.2.3-alpha" includes 1.2.3-alpha0 - parse(">1.2.3-alpha").to_s includes 1.2.3-alpha0 - parse(">1.2.3-alpha").to_s excludes 1.2.3-alpha - "<=1.2.3-alpha" includes 1.2.3-alpha - parse("<= 1.2.3-alpha").to_s excludes 1.2.3-alphb - "<= 1.2.3-alpha" stringifies as <=1.2.3-alpha - "<1.2.3" includes 0.0.0 - parse(">= 1.2.3-alpha").to_s excludes 1.2.3-alph - parse("<1.2.3-alpha").to_s includes 0.0.0 - ">1.2.3-alpha" includes 999.0.0 - parse("> 1.2.3-alpha").to_s includes 1.2.3-alpha.0 - ">1.2.3" excludes 1.2.4-0 - parse(">=1.2.3-alpha").to_s includes 1.2.3-alpha0 - "< 1.2.3-alpha" excludes 1.2.3-alpha - "<1.2.3-alpha" excludes 2.0.0 - "> 1.2.3-alpha" includes 1.2.3-alpha.0 - parse(">=1.2.3").to_s excludes 1.2.3-0 - parse("< 1.2.3").to_s excludes 1.2.3-0 - parse("<=1.2.3").to_s includes 0.0.0 - "< 1.2.3" excludes 0.0.0-0 - "<=1.2.3" includes 0.0.0 - ">1.2.3-alpha" stringifies as >1.2.3-alpha - "> 1.2.3" excludes 1.2.3 - parse(">=1.2.3").to_s excludes 1.2.2 - parse(">= 1.2.3-alpha").to_s includes 1.2.3-alpha0 - "<= 1.2.3-alpha" excludes 1.2.3-alpha.0 - parse("<= 1.2.3").to_s includes 1.2.3 - parse("< 1.2.3-alpha").to_s excludes 2.0.0 - parse("< 1.2.3").to_s includes 1.2.2 - parse(">= 1.2.3-alpha").to_s includes 1.2.3-alpha - "<=1.2.3-alpha" excludes 1.2.3-alpha0 - inclusive range expressions - parse("1.2.3 - 1.3.4-alpha").to_s includes 1.3.4-alpha - parse("1.2.3 - 1.3.4").to_s includes 1.2.3 - "1.2.3-alpha - 1.3.4-alpha" excludes 1.2.3-alph - "1.2.3 - 1.3.4" stringifies as >=1.2.3 <=1.3.4 - "1.2.3 - 1.3.4-alpha" stringifies as >=1.2.3 <=1.3.4-alpha - "1.2.3 - 1.3.4" excludes 1.3.5-0 - parse("1.2.3 - 1.3.4").to_s excludes 1.3.5-0 - parse("1.2.3-alpha - 1.3.4-alpha").to_s includes 1.3.4-alpha - parse("1.2.3-alpha - 1.3.4-alpha").to_s excludes 1.2.3-alph - "1.2.3-alpha - 1.3.4-alpha" includes 1.3.4-alpha - "1.2.3 - 1.3.4-alpha" excludes 1.2.2 - "1.2.3 - 1.3.4-alpha" excludes 1.2.3-0 - "1.2.3 - 1.3.4" includes 1.2.3 - parse("1.2.3 - 1.3.4-alpha").to_s excludes 1.3.5 - "1.2.3-alpha - 1.3.4" includes 1.3.4 - parse("1.2.3 - 1.3.4-alpha").to_s excludes 1.2.3-0 - parse("1.2.3 - 1.3.4").to_s excludes 1.2.3-0 - parse("1.2.3-alpha - 1.3.4-alpha").to_s excludes 1.3.4-alpha0 - parse("1.2.3-alpha - 1.3.4-alpha").to_s includes 1.2.3-alpha - parse("1.2.3-alpha - 1.3.4").to_s excludes 1.2.3-alph - "1.2.3 - 1.3.4" excludes 1.2.3-0 - "1.2.3-alpha - 1.3.4-alpha" excludes 1.3.5 - "1.2.3-alpha - 1.3.4" includes 1.2.3-alpha - "1.2.3 - 1.3.4" includes 1.3.4 - parse("1.2.3-alpha - 1.3.4").to_s includes 1.3.4 - "1.2.3-alpha - 1.3.4-alpha" excludes 1.3.4-alpha0 - "1.2.3-alpha - 1.3.4" excludes 1.3.5-0 - "1.2.3 - 1.3.4-alpha" excludes 1.3.4-alpha0 - parse("1.2.3 - 1.3.4-alpha").to_s includes 1.2.3 - "1.2.3 - 1.3.4-alpha" includes 1.2.3 - parse("1.2.3-alpha - 1.3.4-alpha").to_s excludes 1.3.5 - "1.2.3-alpha - 1.3.4-alpha" includes 1.2.3-alpha - parse("1.2.3 - 1.3.4").to_s includes 1.3.4 - parse("1.2.3-alpha - 1.3.4").to_s excludes 1.3.5-0 - "1.2.3 - 1.3.4-alpha" includes 1.3.4-alpha - "1.2.3-alpha - 1.3.4-alpha" stringifies as >=1.2.3-alpha <=1.3.4-alpha - parse("1.2.3 - 1.3.4").to_s excludes 1.2.2 - parse("1.2.3-alpha - 1.3.4").to_s includes 1.2.3-alpha - "1.2.3-alpha - 1.3.4" stringifies as >=1.2.3-alpha <=1.3.4 - parse("1.2.3 - 1.3.4-alpha").to_s excludes 1.2.2 - "1.2.3-alpha - 1.3.4" excludes 1.2.3-alph - "1.2.3 - 1.3.4-alpha" excludes 1.3.5 - "1.2.3 - 1.3.4" excludes 1.2.2 - parse("1.2.3 - 1.3.4-alpha").to_s excludes 1.3.4-alpha0 - #intersection - cannot intersect with non-VersionRanges - is commutative - between 10.0.0 - 5.0.0 & 4.0.0 - 1.0.0 - between >=10.0.0 <5.0.0 & 15.0.0 - 11.0.0 - between >=10.0.0 <5.0.0 & 9.0.0 - 6.0.0 - between 10.0.0 - 5.0.0 & 15.0.0 - 10.0.0 - between >=10.0.0 <5.0.0 & 15.0.0 - 10.0.0 - between 10.0.0 - 5.0.0 & 15.0.0 - 11.0.0 - between >=10.0.0 <5.0.0 & 4.0.0 - 1.0.0 - between 10.0.0 - 5.0.0 & 9.0.0 - 6.0.0 - between >=10.0.0 <5.0.0 & 5.0.0 - 1.0.0 - between >=10.0.0 <5.0.0 & 11.0.0 - 4.0.0 - between 10.0.0 - 5.0.0 & 5.0.0 - 1.0.0 - between 10.0.0 - 5.0.0 & 10.0.0 - 5.0.0 - between 10.0.0 - 5.0.0 & 15.0.0 - 9.0.0 - between >=10.0.0 <5.0.0 & >=7.0.0 <1.0.0 - between 10.0.0 - 5.0.0 & >=10.0.0 <5.0.0 - between 10.0.0 - 5.0.0 & 11.0.0 - 4.0.0 - between >=10.0.0 <5.0.0 & 10.0.0 - 5.0.0 - between 10.0.0 - 5.0.0 & >=7.0.0 <1.0.0 - between >=10.0.0 <5.0.0 & 6.0.0 - 1.0.0 - between 10.0.0 - 5.0.0 & 6.0.0 - 1.0.0 - between >=10.0.0 <5.0.0 & 15.0.0 - 9.0.0 - between 10.0.0 - 5.0.0 & >=5.0.0 <1.0.0 - between >=10.0.0 <5.0.0 & >=5.0.0 <1.0.0 - between >=10.0.0 <5.0.0 & >=10.0.0 <5.0.0 - between >=10.0.0 <5.0.0 & - 10.0.0 - 5.0.0 - >=10.0.0 <5.0.0 - 15.0.0 - 9.0.0 - 11.0.0 - 4.0.0 - >=5.0.0 <1.0.0 - 15.0.0 - 10.0.0 - 5.0.0 - 1.0.0 - 9.0.0 - 6.0.0 - >=7.0.0 <1.0.0 - 4.0.0 - 1.0.0 - 15.0.0 - 11.0.0 - 6.0.0 - 1.0.0 - between 10.0.0 - 5.0.0 & - 10.0.0 - 5.0.0 - >=10.0.0 <5.0.0 - 5.0.0 - 1.0.0 - 15.0.0 - 10.0.0 - 6.0.0 - 1.0.0 - >=5.0.0 <1.0.0 - 15.0.0 - 11.0.0 - 9.0.0 - 6.0.0 - 15.0.0 - 9.0.0 - 11.0.0 - 4.0.0 - 4.0.0 - 1.0.0 - >=7.0.0 <1.0.0 - -SemanticPuppet::Dependency::ModuleRelease - #satisfied? - returns false when no dependencies have been satisified - returns false when not all dependencies have been satisified - returns false when not all dependency versions have been satisified - returns true when all dependencies have been satisified - returns true when there are no dependencies to satisfy - #<< - marks matching dependencies as satisfied - does not mark mis-matching dependency names as satisfied - does not mark mis-matching dependency versions as satisfied - #satisfies_dependency? - returns false when the release does not match the dependency version - returns true when the release matches the dependency - returns false when there are no dependencies to satisfy - returns false when the release does not match the dependency name - #dependency_names - lists the names of all the release's dependencies - #<=> - considers releases with greater version numbers greater - orders releases by name first - considers releases with lesser version numbers lesser - orders releases with different names lexographically - #== - considers two equal releases to be equal - considers a release different from something that is not a release - can compare a release with something that is not a release - considers two releases with different names to be different - considers two releases with different versions to be different - #to_s - is expected to =~ /1.2.3/ - is expected to =~ /foobarbaz/ + parse(">1.0.0 >2.0.0 >=3.0.0 <5.0.0").to_s excludes 5.0.0-0 SemanticPuppet::Version - #== - should yield true when comparing two equal instances - should yield false when compared to something that is not a Version - should yield false when the prerelease differs - should yield false when the minor differs - should yield false when the major differs - should yield false when the patch differs - #<=> - Spec v2.0.0 - Section 11 - comparisions between prereleases - numeric identifiers sort numerically - build metadata does figure into equality - larger identifier sets have precendence - identifiers are parsed left-to-right - non-numeric identifiers sort ASCIIbetically - sorted order - non-numeric identifiers have a higher precendence - identical prereleases are equal - build metadata does not figure into precendence - comparisons against prereleases - prereleases have lower precedence - comparisons without prereleases - sorted order - Spec v1.0.0 - Section 4 - sorted order .valid? - Spec v1.0.0 - Section 2 - permits zeroes in version number parts - rejects versions that contain non-integers - rejects versions that contain too few parts - rejects versions that contain too many parts - Section 4 - permits numeric prerelease identifiers of zero - rejects empty prerelease versions - rejects prerelease identifiers with non-alphanumerics - rejects numeric prerelease identifiers with leading zeroes - permits non-numeric prerelease identifiers with leading zeroes Spec v2.0.0 Section 2 - rejects versions that contain non-integers - rejects versions that contain negative integers - permits zeroes in version number parts rejects version numbers containing leading zeroes rejects versions that contain too few parts + permits zeroes in version number parts + rejects versions that contain negative integers rejects versions that contain too many parts + rejects versions that contain non-integers Section 9 - rejects empty prerelease version identifiers permits numeric prerelease identifiers of zero + rejects prerelease identifiers with non-alphanumerics + permits non-numeric prerelease identifiers + rejects empty prerelease version identifiers + rejects numeric prerelease identifiers with leading zeroes rejects empty prerelease versions permits non-numeric prerelease identifiers with leading zeroes - rejects numeric prerelease identifiers with leading zeroes - permits non-numeric prerelease identifiers - rejects prerelease identifiers with non-alphanumerics Section 10 + rejects build identifiers with non-alphanumerics rejects empty build metadata - permits numeric build identifiers with leading zeroes - permits numeric build identifiers of zero permits non-numeric build identifiers with leading zeroes + permits numeric build identifiers of zero + permits numeric build identifiers with leading zeroes rejects empty build identifiers - rejects build identifiers with non-alphanumerics + Spec v1.0.0 + Section 4 + permits numeric prerelease identifiers of zero + rejects empty prerelease versions + rejects numeric prerelease identifiers with leading zeroes + permits non-numeric prerelease identifiers with leading zeroes + rejects prerelease identifiers with non-alphanumerics + Section 2 + rejects versions that contain too few parts + rejects versions that contain non-integers + rejects versions that contain too many parts + permits zeroes in version number parts #next - with :patch + with :minor + returns the next minor version + does not modify the original version removes any build information + resets the patch version to 0 removes any prerelease information - does not modify the original version - returns the next patch version - with :minor + with :major + resets the minor and patch versions to 0 removes any prerelease information - resets the patch version to 0 removes any build information + returns the next major version does not modify the original version - returns the next minor version - with :major + with :patch + removes any prerelease information does not modify the original version removes any build information - returns the next major version - resets the minor and patch versions to 0 - removes any prerelease information + returns the next patch version + #== + should yield false when compared to something that is not a Version + should yield false when the prerelease differs + should yield true when comparing two equal instances + should yield false when the major differs + should yield false when the patch differs + should yield false when the minor differs + #<=> + Spec v1.0.0 + Section 4 + sorted order + Spec v2.0.0 + Section 11 + comparisons without prereleases + sorted order + comparisions between prereleases + build metadata does not figure into precendence + sorted order + identical prereleases are equal + non-numeric identifiers have a higher precendence + identifiers are parsed left-to-right + larger identifier sets have precendence + numeric identifiers sort numerically + build metadata does figure into equality + non-numeric identifiers sort ASCIIbetically + comparisons against prereleases + prereleases have lower precedence .parse Spec v1.0.0 Section 2 - rejects versions that contain non-integers rejects versions that contain too many parts - rejects versions that contain too few parts permits zeroes in version number parts + rejects versions that contain too few parts + rejects versions that contain non-integers examples 1.9.0 - 1.10.0 1.11.0 + 1.10.0 Section 4 - rejects empty prerelease versions rejects numeric prerelease identifiers with leading zeroes + rejects empty prerelease versions permits numeric prerelease identifiers of zero permits non-numeric prerelease identifiers with leading zeroes rejects prerelease identifiers with non-alphanumerics examples + 1.0.0-rc1 1.0.0-beta1 1.0.0-alpha1 1.0.0-beta2 - 1.0.0-rc1 Spec v2.0.0 - Section 10 - permits numeric build identifiers of zero - rejects empty build metadata - permits numeric build identifiers with leading zeroes - rejects build identifiers with non-alphanumerics - permits non-numeric build identifiers with leading zeroes - rejects empty build identifiers + Section 9 + rejects empty prerelease versions + permits non-numeric prerelease identifiers with leading zeroes + rejects empty prerelease version identifiers + rejects numeric prerelease identifiers with leading zeroes + rejects prerelease identifiers with non-alphanumerics + permits numeric prerelease identifiers of zero examples - 1.0.0+20130313144700 - 1.0.0-beta+exp.sha.5114f85 - 1.0.0-alpha+001 + 1.0.0-0.3.7 + 1.0.0-alpha + 1.0.0-alpha.1 + 1.0.0-x.7.z.92 Section 2 + rejects version numbers containing leading zeroes rejects versions that contain too few parts rejects versions that contain too many parts + rejects versions that contain negative integers rejects versions that contain non-integers permits zeroes in version number parts - rejects versions that contain negative integers - rejects version numbers containing leading zeroes examples - 1.11.0 - 1.10.0 1.9.0 - Section 9 - rejects empty prerelease versions - rejects empty prerelease version identifiers - permits numeric prerelease identifiers of zero - permits non-numeric prerelease identifiers with leading zeroes - rejects numeric prerelease identifiers with leading zeroes - rejects prerelease identifiers with non-alphanumerics + 1.10.0 + 1.11.0 + Section 10 + permits numeric build identifiers of zero + permits numeric build identifiers with leading zeroes + rejects empty build identifiers + rejects empty build metadata + rejects build identifiers with non-alphanumerics + permits non-numeric build identifiers with leading zeroes examples - 1.0.0-alpha - 1.0.0-x.7.z.92 - 1.0.0-alpha.1 - 1.0.0-0.3.7 + 1.0.0-alpha+001 + 1.0.0-beta+exp.sha.5114f85 + 1.0.0+20130313144700 + +SemanticPuppet::Dependency + .query + without sources + returns an unsatisfied ModuleRelease + with one source + returns a ModuleRelease with the requested dependencies + queries the source for each dependency + populates the returned ModuleRelease with related dependencies + queries the source for each dependency only once + queries the source for release information + populates all returned ModuleReleases with related dependencies + with multiple sources + queries each source in turn + resolves all dependencies against all sources + .resolve + for a module with competing dependencies + that overlap + returns the greatest release satisfying all dependencies + that do not overlap + fails with an appropriate message + for a module without dependencies + returns the greatest release matching the version range + when the query omits all versions + fails with an appropriate message + when the query omits all stable versions + returns the greatest prerelease version matching the range + when the query includes both stable and prerelease versions + returns the greatest stable release matching the range + for a module with dependencies + that violate module constraints on the graph + that can be resolved + terminates + that cannot be resolved + fails with an appropriate message + for a module with circular dependencies + that cannot be resolved + fails with an appropriate message + that can be resolved + terminates + for a module with dependencies + returns the greatest releases matching the dependency range + when the dependency cannot be satisfied + sets unsatisfiable + fails with an appropriate message + when the dependency has no stable versions + returns the greatest prerelease version matching the range + when the dependency has both stable and prerelease versions + returns the greatest stable release matching the range + that violate graph constraints + that can be resolved + terminates + that cannot be resolved + fails with an appropriate message + .sources + can be emptied by using #clear_sources + defaults to an empty list + is frozen + can be modified by using #add_source + +SemanticPuppet::Dependency::ModuleRelease + #== + can compare a release with something that is not a release + considers two releases with different versions to be different + considers a release different from something that is not a release + considers two equal releases to be equal + considers two releases with different names to be different + #to_s + is expected to =~ /foobarbaz/ + is expected to =~ /1.2.3/ + #<< + does not mark mis-matching dependency names as satisfied + marks matching dependencies as satisfied + does not mark mis-matching dependency versions as satisfied + #satisfied? + returns false when not all dependency versions have been satisified + returns true when all dependencies have been satisified + returns true when there are no dependencies to satisfy + returns false when not all dependencies have been satisified + returns false when no dependencies have been satisified + #<=> + orders releases with different names lexographically + considers releases with lesser version numbers lesser + orders releases by name first + considers releases with greater version numbers greater + #satisfies_dependency? + returns false when there are no dependencies to satisfy + returns true when the release matches the dependency + returns false when the release does not match the dependency version + returns false when the release does not match the dependency name + #dependency_names + lists the names of all the release's dependencies + +SemanticPuppet::Dependency::GraphNode + #satisfied + is unsatisfied when no nodes have been appended + is unsatisfied when any dependencies are missing + is satisfied when all dependencies are fulfilled + #<< + sorts once the dependencies for a specific node + does not append unsatisfying nodes + does not append nodes with unknown names + appends satisfying nodes to the dependencies + sorts the dependencies for each addition to the same node + #populate_children + accepts a graph solution and populates it across all nodes + saves all relevant nodes as its children + #<=> + can be compared + dependencies + are maintained in the #dependencies Hash + are added by #add_dependency + +SemanticPuppet::Dependency::UnsatisfiableGraph + #message + is expected to match /foo, bar, and baz/ + #sentence_from_list + with a list of two items + is expected to eql "foo and bar" + with a list of more than three items + is expected to eql "foo, bar, baz, and quux" + with a list of one item + is expected to eql "foo" + with a list of three items + is expected to eql "foo, bar, and baz" + +SemanticPuppet::Dependency::Graph + #add_graph_constraint + permits multiple graph constraints + can create a new constraint on a graph + #satisfies_dependency? + is not satisfied by modules that do not fulfill the constraint + is satisfied by modules that do fulfill all the constraints + is not satisfied by modules that do not fulfill all the constraints + is not satisfied by modules it does not depend on + #satisfies_graph? + returns true if the solution violates no graph constraints + returns false if the solution violates any graph constraint + returns false if the solution violates a graph constraint + #initialize + adds the named dependencies for every key in the passed hash + adds constraints for every key in the passed hash + can be called without arguments + implements the GraphNode protocol + #add_constraint + permits multiple constraints against the same module name + can create a new constraint on a module -Finished in 1.11 seconds (files took 0.57583 seconds to load) +Finished in 0.40868 seconds (files took 0.22983 seconds to load) 988 examples, 0 failures -Randomized with seed 41121 +Randomized with seed 50268 ┌──────────────────────────────────────────────────────────────────────────────┐ @@ -3206,12 +3242,14 @@ dpkg-buildpackage: info: binary-only upload (no source included) dpkg-genchanges: info: including full source code in upload I: copying local configuration +I: user script /srv/workspace/pbuilder/72511/tmp/hooks/B01_cleanup starting +I: user script /srv/workspace/pbuilder/72511/tmp/hooks/B01_cleanup finished I: unmounting dev/ptmx filesystem I: unmounting dev/pts filesystem I: unmounting dev/shm filesystem I: unmounting proc filesystem I: unmounting sys filesystem I: cleaning the build env -I: removing directory /srv/workspace/pbuilder/51225 and its subdirectories -I: Current time: Mon Feb 3 09:38:11 -12 2025 -I: pbuilder-time-stamp: 1738618691 +I: removing directory /srv/workspace/pbuilder/72511 and its subdirectories +I: Current time: Mon Mar 9 18:01:54 +14 2026 +I: pbuilder-time-stamp: 1773028914