Skip to content

feat: add RubyGems registry support#43

Closed
mvanhorn wants to merge 1 commit into
vercel-labs:mainfrom
mvanhorn:feat/rubygems-registry
Closed

feat: add RubyGems registry support#43
mvanhorn wants to merge 1 commit into
vercel-labs:mainfrom
mvanhorn:feat/rubygems-registry

Conversation

@mvanhorn

@mvanhorn mvanhorn commented Apr 9, 2026

Copy link
Copy Markdown

Summary

Adds gem:, ruby:, and rubygems: prefixes to fetch Ruby gem source code via rubygems.org API. Follows the existing registry pattern used by npm, PyPI, and crates.io.

Usage

opensrc path gem:rails
opensrc path ruby:sidekiq
opensrc path gem:nokogiri@1.16.0

Also adds --rubygems flag to opensrc clean and shows RubyGems in opensrc list.

Demo

RubyGems demo

How it works

The rubygems.org API (/api/v1/gems/{name}.json) returns source_code_uri which maps directly to a git clone URL. Falls back to homepage_uri if source_code_uri is absent, checking if it points to a known git host. Version-specific lookups use the v2 API (/api/v2/rubygems/{name}/versions/{version}.json).

normalize_repo_url (already in mod.rs) strips /tree/vX.Y.Z suffixes that rubygems.org sometimes appends to source_code_uri.

Changes

  • rubygems.rs - New registry module: parse_rubygems_spec and resolve_rubygem following the existing pattern
  • mod.rs - Add RubyGems variant to Registry enum, gem:, ruby:, rubygems: prefixes, extend parse_package_spec and resolve_package
  • main.rs - Add --rubygems flag to clean command
  • list.rs - Add RubyGems to the registries display and empty-state help text

Testing

3 new unit tests covering spec parsing (simple, versioned, hyphenated names). All 35 tests pass with --test-threads=1.

cargo test --manifest-path packages/opensrc/cli/Cargo.toml -- --test-threads=1
cargo clippy --manifest-path packages/opensrc/cli/Cargo.toml -- -D warnings
cargo fmt --manifest-path packages/opensrc/cli/Cargo.toml --check

This contribution was developed with AI assistance (Claude Code).

Add gem:, ruby:, and rubygems: prefixes to fetch Ruby gem source code
via rubygems.org API. Follows the existing registry pattern used by
npm, PyPI, and crates.io modules.

Usage:
  opensrc path gem:rails
  opensrc path ruby:sidekiq
  opensrc path gem:nokogiri@1.16.0

The RubyGems API returns source_code_uri which maps directly to a
git clone URL. Falls back to homepage_uri if source_code_uri is absent.

Also adds --rubygems flag to the clean command and RubyGems to list output.
@vercel

vercel Bot commented Apr 9, 2026

Copy link
Copy Markdown

@mvanhorn is attempting to deploy a commit to the Vercel Labs Team on Vercel.

A member of the Team first needs to authorize it.

@vercel vercel Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Additional Suggestion:

The fallback registry scan in remove.rs is missing Registry::RubyGems, preventing removal of RubyGems packages without an explicit gem: prefix.

Fix on Vercel

@kylesnowschwartz

Copy link
Copy Markdown

Hey @mvanhorn, this has been sitting since April. I rebased onto current main (#56 changed the error pattern in rubygems.rs), added the Registry::RubyGems arm in remove.rs that the bot flagged, and folded in two small fixes that came up during review. Submitted as #60 with you as Author and me as Co-author.

@mvanhorn

Copy link
Copy Markdown
Author

Thanks for picking this up @kylesnowschwartz -- really appreciate you rebasing and folding in the registry::RubyGems arm + the bot's fixes. Closing this in favor of #60. Listed you as co-author there; if you'd rather flip the attribution let me know and I'll edit.

@mvanhorn mvanhorn closed this May 20, 2026
@kylesnowschwartz

Copy link
Copy Markdown

All good - no attribution required, just hoping the Vercel team picks it up @mvanhorn

By the way - and this is perhaps the most random 'nice to meet you' I've ever had - but I think your mom's husband is one of my dad's dearest friends. Say hi to J & B, I guess 😂

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants