0
0
Rubyprogramming~10 mins

Gem versions and constraints in Ruby - Step-by-Step Execution

Choose your learning style9 modes available
Concept Flow - Gem versions and constraints
Start: Define Gemfile
Specify gem with version constraint
Bundler checks installed gems
Compare installed gem versions with constraints
If match
Use installed gem
If no match
Install compatible version
Run application with correct gem versions
This flow shows how Ruby's Bundler reads gem version constraints, checks installed gems, and installs or uses the correct versions.
Execution Sample
Ruby
gem 'rails', '~> 6.1.0'
gem 'nokogiri', '>= 1.10', '< 2.0'
This code specifies gem version constraints for rails and nokogiri in a Gemfile.
Execution Table
StepGemVersion ConstraintInstalled VersionCheck ResultAction
1rails~> 6.1.06.1.36.1.3 matches ~> 6.1.0Use installed version
2nokogiri>= 1.10 and < 2.01.11.01.11.0 matches constraintsUse installed version
3nokogiri>= 1.10 and < 2.02.1.02.1.0 does NOT match < 2.0Install compatible version < 2.0
4rails~> 6.1.06.0.06.0.0 does NOT match ~> 6.1.0Install compatible version >= 6.1.0 and < 6.2.0
5----All gems satisfy constraints, bundler finishes
💡 Bundler stops when all gems satisfy their version constraints.
Variable Tracker
VariableStartAfter Step 1After Step 2After Step 3After Step 4Final
rails_versionnone6.1.36.1.36.1.36.1.36.1.3
nokogiri_versionnonenone1.11.01.11.01.11.01.11.0
Key Moments - 2 Insights
Why does '~> 6.1.0' allow version 6.1.3 but not 6.2.0?
Because '~> 6.1.0' means any version >= 6.1.0 and < 6.2.0, so 6.1.3 fits but 6.2.0 is too new (see Step 1 and Step 4 in execution_table).
What happens if installed gem version does not meet constraints?
Bundler will install a compatible version that meets the constraints (see Step 3 and Step 4 in execution_table).
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what action is taken when nokogiri version 2.1.0 is installed?
AInstall compatible version < 2.0
BUse installed version
CIgnore version constraints
DUninstall nokogiri
💡 Hint
Check Step 3 in the execution_table where nokogiri version 2.1.0 is evaluated.
At which step does bundler decide to install a new rails version?
AStep 2
BStep 4
CStep 1
DStep 5
💡 Hint
Look at Step 4 in execution_table where rails version 6.0.0 does not match constraint.
If the rails version constraint changed to '~> 6.0.0', what would happen at Step 1?
A6.1.3 would match constraint
BBundler would install version 6.0.0
C6.1.3 would not match constraint
DBundler would ignore rails gem
💡 Hint
Recall that '~> 6.0.0' means >= 6.0.0 and < 6.1.0, check if 6.1.3 fits.
Concept Snapshot
Gem versions in Ruby use constraints like '~> 6.1.0' or '>= 1.10, < 2.0'.
Bundler checks installed gems against these constraints.
If installed versions don't match, bundler installs compatible versions.
'~>' means 'pessimistic version constraint' allowing updates in last digit.
Constraints ensure your app uses safe, compatible gem versions.
Full Transcript
This visual execution shows how Ruby's bundler handles gem versions and constraints. We start by defining gems with version rules in a Gemfile. Bundler checks installed gem versions against these rules. If a version matches, bundler uses it. If not, bundler installs a compatible version. For example, '~> 6.1.0' means any version from 6.1.0 up to but not including 6.2.0. The execution table traces each step checking rails and nokogiri gems. Variable tracker shows how gem versions update after each step. Key moments clarify why some versions match constraints and others don't. The quiz tests understanding of these checks and actions. This helps beginners see how gem version constraints control which gem versions run in their Ruby apps.