The gem folder has a special file called gem_name.gemspec that describes your gem.
The lib folder holds your Ruby code files.
Examples
This shows how to build and install your gem locally.
Ruby
mkdir my_gem
cd my_gem
gem build my_gem.gemspec
gem install ./my_gem-0.1.0.gem
This is a simple gemspec file that describes your gem's name, version, author, and files.
Ruby
# my_gem.gemspec
Gem::Specification.newdo |spec|
spec.name = "my_gem"
spec.version = "0.1.0"
spec.summary = "A simple example gem"
spec.authors = ["Your Name"]
spec.files = Dir["lib/**/*.rb"]
end
Sample Program
This example shows the basic steps to create a gem named hello_gem that has a method to say hello. You build and install it locally, then use it in Ruby code.
Ruby
# Step 1: Create a folder named 'hello_gem'# Step 2: Inside 'hello_gem', create 'hello_gem.gemspec' with:## Gem::Specification.new do |spec|# spec.name = "hello_gem"# spec.version = "0.1.0"# spec.summary = "A gem that says hello"# spec.authors = ["You"]# spec.files = Dir["lib/**/*.rb"]# end## Step 3: Create folder 'lib' inside 'hello_gem'# Step 4: Inside 'lib', create 'hello_gem.rb' with:module HelloGem
defself.say_hello
"Hello from the gem!"endend# Step 5: Build the gem (run in terminal):# gem build hello_gem.gemspec# Step 6: Install the gem locally (run in terminal):# gem install ./hello_gem-0.1.0.gem# Step 7: Use the gem in Ruby code:require'hello_gem'puts HelloGem.say_hello
OutputSuccess
Important Notes
Always keep your gemspec file updated with correct info.
Use gem build to create the gem package file.
Test your gem locally before sharing it.
Summary
A gem is a reusable Ruby package for sharing code.
Creating a gem involves making a gemspec file and organizing code in lib.
You build and install the gem to use it in projects.
Practice
(1/5)
1. What is the main purpose of a Ruby gem?
easy
A. To compile Ruby code into machine language
B. To package and share reusable Ruby code
C. To create graphical user interfaces
D. To manage Ruby versions on your system
Solution
Step 1: Understand what a gem is
A gem is a package that contains Ruby code that can be reused in different projects.
Step 2: Identify the main purpose
The main purpose is to share and reuse code easily across Ruby projects.
Final Answer:
To package and share reusable Ruby code -> Option B
Quick Check:
Gem = reusable Ruby package [OK]
Hint: Gems are for sharing code, not compiling or GUIs [OK]
Common Mistakes:
Thinking gems compile Ruby code
Confusing gems with Ruby version managers
Assuming gems create user interfaces
2. Which file is essential to define a Ruby gem's metadata and dependencies?
easy
A. README.md
B. Gemfile
C. Rakefile
D. gemspec
Solution
Step 1: Identify gem metadata file
The gemspec file (.gemspec) defines the gem's name, version, authors, and dependencies.
Step 2: Differentiate from other files
Gemfile manages project dependencies, Rakefile defines tasks, README.md is documentation.
Final Answer:
gemspec -> Option D
Quick Check:
Metadata and dependencies = gemspec [OK]
Hint: gemspec holds gem info; Gemfile is for app dependencies [OK]
Common Mistakes:
Confusing Gemfile with gemspec
Thinking README.md defines dependencies
Assuming Rakefile holds gem metadata
3. Given this gemspec snippet, what is the gem's version?
Gem::Specification.new do |spec|
spec.name = "my_gem"
spec.version = "0.2.5"
spec.summary = "A sample gem"
end
medium
A. "0.2.5"
B. "2.5"
C. "0.2.0"
D. "1.0.0"
Solution
Step 1: Locate the version assignment
The line spec.version = "0.2.5" sets the gem's version.
Step 2: Confirm the exact version string
The version is exactly "0.2.5" as given in the code.
Final Answer:
"0.2.5" -> Option A
Quick Check:
Version in gemspec = "0.2.5" [OK]
Hint: Look for spec.version assignment in gemspec [OK]
Common Mistakes:
Picking partial version like "0.2.0"
Confusing version with gem name
Assuming default version "1.0.0"
4. This gemspec file has an error. What is it?
Gem::Specification.new do |spec|
spec.name = "example_gem"
spec.version = 1.0.0
spec.summary = "Example gem"
end
medium
A. Version should be a string, not a number
B. Missing spec.authors field
C. spec.name cannot have underscores
D. spec.summary must be longer than 20 characters
Solution
Step 1: Check version format
The version is written as 1.0.0 without quotes, which Ruby treats as a numeric expression causing error.
Step 2: Correct version format
Version must be a string like "1.0.0" with quotes to be valid.
Final Answer:
Version should be a string, not a number -> Option A
Quick Check:
Version must be string in gemspec [OK]
Hint: Always quote version strings in gemspec [OK]
Common Mistakes:
Leaving version unquoted
Thinking underscores are invalid in gem names
Assuming summary length is strictly enforced
5. You want to create a gem that provides a method greet returning "Hello!". Which file structure and code snippet is correct?
Options:
A)
my_gem/
lib/
my_gem.rb
my_gem.gemspec
# lib/my_gem.rb
module MyGem
def self.greet
"Hello!"
end
end
B)
my_gem/
src/
greet.rb
gemspec.rb
# src/greet.rb
class Greet
def greet
puts "Hello!"
end
end
C)
my_gem/
lib/
greet.rb
my_gem.gemspec
# lib/greet.rb
module Greet
def greet
"Hello!"
end
end
D)
my_gem/
lib/
my_gem.rb
my_gem.gemspec
# lib/my_gem.rb
def greet
"Hello!"
end
hard
A. Wrong file name and missing self for method
B. Wrong folder and gemspec name; greet is instance method
C. Correct structure with module and class method greet
D. Method defined outside module, no namespacing
Solution
Step 1: Check folder and file structure
Ruby gems use lib/ folder and a gemspec named after the gem. Correct structure with module and class method greet uses lib/my_gem.rb and my_gem.gemspec, which is correct.
Step 2: Verify code correctness
Correct structure with module and class method greet defines a module MyGem with a class method self.greet returning "Hello!", which is the right way to provide a gem method.
Final Answer:
Correct structure with module and class method greet -> Option C