Bird
Raised Fist0
Rubyprogramming~20 mins

Creating a gem basics in Ruby - Practice Exercises

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Ruby Gem Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
1:30remaining
What is the output of this gemspec version code?
Consider this snippet from a gemspec file defining the gem version. What will be printed when running this Ruby code?
Ruby
module MyGem
  VERSION = "1.2.3"
end

puts MyGem::VERSION
AError: uninitialized constant MyGem
BMyGem::VERSION
Cversion 1.2.3
D1.2.3
Attempts:
2 left
💡 Hint
Look at how constants are accessed inside modules in Ruby.
🧠 Conceptual
intermediate
1:00remaining
Which file is essential to define a Ruby gem's metadata?
When creating a Ruby gem, which file must you create to specify the gem's name, version, summary, and authors?
AGemfile
Bgemspec
CREADME.md
DRakefile
Attempts:
2 left
💡 Hint
This file ends with .gemspec and is used by RubyGems.
🔧 Debug
advanced
2:00remaining
Why does this gemspec raise an error?
Look at this gemspec snippet. Why does it raise a SyntaxError? s.name = "my_gem" s.version = 0.1.0 s.summary = "A sample gem"
Ruby
Gem::Specification.new do |s|
  s.name = "my_gem"
  s.version = 0.1.0
  s.summary = "A sample gem"
end
AVersion must be a string, not a float or number
BMissing comma between version numbers
CThe block variable s is not defined
DThe gemspec must use single quotes for strings
Attempts:
2 left
💡 Hint
Look carefully at the version assignment syntax.
📝 Syntax
advanced
1:30remaining
Which option correctly defines a gem's authors array in gemspec?
Select the correct syntax to assign multiple authors in a gemspec file.
Ruby
Gem::Specification.new do |s|
  s.authors = ???
end
A["Alice", "Bob"]
B"Alice, Bob"
C{Alice, Bob}
D("Alice", "Bob")
Attempts:
2 left
💡 Hint
Authors should be an array of strings.
🚀 Application
expert
2:00remaining
How many files are created by default when running `bundle gem my_gem`?
When you run the command `bundle gem my_gem` to create a new gem skeleton, how many files are created by default (excluding hidden files)?
A10
B5
C8
D12
Attempts:
2 left
💡 Hint
Count files like gemspec, README, lib files, and test files generated.

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

  1. Step 1: Understand what a gem is

    A gem is a package that contains Ruby code that can be reused in different projects.
  2. Step 2: Identify the main purpose

    The main purpose is to share and reuse code easily across Ruby projects.
  3. Final Answer:

    To package and share reusable Ruby code -> Option B
  4. 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

  1. Step 1: Identify gem metadata file

    The gemspec file (.gemspec) defines the gem's name, version, authors, and dependencies.
  2. Step 2: Differentiate from other files

    Gemfile manages project dependencies, Rakefile defines tasks, README.md is documentation.
  3. Final Answer:

    gemspec -> Option D
  4. 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

  1. Step 1: Locate the version assignment

    The line spec.version = "0.2.5" sets the gem's version.
  2. Step 2: Confirm the exact version string

    The version is exactly "0.2.5" as given in the code.
  3. Final Answer:

    "0.2.5" -> Option A
  4. 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

  1. Step 1: Check version format

    The version is written as 1.0.0 without quotes, which Ruby treats as a numeric expression causing error.
  2. Step 2: Correct version format

    Version must be a string like "1.0.0" with quotes to be valid.
  3. Final Answer:

    Version should be a string, not a number -> Option A
  4. 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

  1. 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.
  2. 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.
  3. Final Answer:

    Correct structure with module and class method greet -> Option C
  4. Quick Check:

    lib folder + module + self method = correct gem code [OK]
Hint: Use lib folder and module with self.method for gem code [OK]
Common Mistakes:
  • Using wrong folder names like src
  • Defining instance instead of class methods
  • Not namespacing methods inside a module
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard