Conversation
6748ef3 to
d486dd2
Compare
d486dd2 to
14beaf4
Compare
There was a problem hiding this comment.
Pull request overview
Reworks the gem into a proper Rails plugin by renaming it to rolemodel-rails, introducing a Rails Engine for generator registration, and removing generator eager-loading during host app boot.
Changes:
- Renames the gem from
rolemodel_railstorolemodel-railsand collapses the public namespace toRolemodel. - Adds a
Rolemodel::Engineto register generator support without eager-loading all generators at boot. - Updates specs, example apps, and tooling scripts to use the new gem name and loading behavior.
Reviewed changes
Copilot reviewed 16 out of 24 changed files in this pull request and generated 5 comments.
Show a summary per file
| File | Description |
|---|---|
| spec/support/helpers/example_app.rb | Updates Gemfile cleanup to remove rolemodel-rails entries in the test app. |
| spec/spec_helper.rb | Updates spec bootstrapping to load Rails + the gem and eagerly require generator classes for tests. |
| spec/rolemodel_rails_spec.rb | Updates version constant expectations to the new Rolemodel namespace. |
| spec/generators/rolemodel/github_generator_spec.rb | Updates expected template text to reference the new version file path. |
| rolemodel-rails.gemspec | Renames the gem, updates metadata, and points version loading at Rolemodel::VERSION. |
| lib/rolemodel_rails.rb | Removes the old entrypoint that eagerly loaded generators. |
| lib/rolemodel/version.rb | Moves version constant under Rolemodel module. |
| lib/rolemodel/engine.rb | Adds Rails Engine for generator registration. |
| lib/rolemodel-rails.rb | Adds new gem entrypoint that defines version constants and requires version/engine. |
| lib/generators/rolemodel/base_generator.rb | Introduces a standalone BaseGenerator (previously defined in lib/generators/rolemodel.rb). |
| lib/generators/rolemodel.rb | Removes the old generator aggregator that loaded all generators eagerly. |
| example_rails8/Gemfile / Gemfile.lock | Updates example app to depend on rolemodel-rails. |
| example_rails7/Gemfile / Gemfile.lock | Updates example app to depend on rolemodel-rails. |
| bin/recreate_legacy_example | Updates bundle add invocation to rolemodel-rails. |
| bin/recreate_current_example | Updates bundle add invocation to rolemodel-rails. |
| bin/console | Updates require to rolemodel-rails. |
| bin/bump_version | Updates paths and gemspec name used by the version bumper. |
| README.md | Updates documentation to reference rolemodel-rails. |
| Gemfile / Gemfile.lock | Updates development dependency name to rolemodel-rails. |
| .gitignore | Adds .DS_Store ignore. |
| .github/workflows/ci.yml | Updates runner and GitHub Action versions used in CI. |
Comments suppressed due to low confidence (1)
rolemodel-rails.gemspec:5
rolemodel-rails.gemspecno longer has# frozen_string_literal: trueat the top. This repo consistently uses frozen string literals in Ruby files, and removing it may introduce RuboCop/style inconsistencies.
Suggestion: add the frozen-string-literal magic comment back at the top of the gemspec (before any require).
| end | ||
|
|
||
| require 'rolemodel/version' | ||
| require 'rolemodel/engine' |
There was a problem hiding this comment.
lib/rolemodel-rails.rb requires rolemodel/engine, and Rolemodel::Engine inherits from ::Rails::Engine. As written, requiring this gem outside a Rails-booted process (e.g., bin/console) can raise NameError: uninitialized constant Rails.
Suggestion: ensure the Rails engine base is loaded before defining/loading the engine (e.g., require rails/engine / rails before requiring rolemodel/engine, or guard the engine load until Rails is available).
| require 'rolemodel/engine' | |
| begin | |
| require 'rails/engine' | |
| rescue LoadError | |
| end | |
| require 'rolemodel/engine' if defined?(Rails::Engine) |
| module Rolemodel | ||
| NODE_VERSION = '24.12.0' | ||
| RUBY_VERSION = '4.0.1' | ||
| end | ||
|
|
||
| require 'rolemodel/version' | ||
| require 'rolemodel/engine' |
There was a problem hiding this comment.
This new file is missing # frozen_string_literal: true at the top, which is used throughout the repo for Ruby files.
Suggestion: add the frozen-string-literal magic comment as the first line of the file.
| require 'rails/generators/base' | ||
| require 'rails/generators/bundle_helper' | ||
| require_relative 'replace_content_helper' |
There was a problem hiding this comment.
This new generator base class file is missing # frozen_string_literal: true at the top. Most generator code in lib/generators/** uses frozen string literals, and omitting it can create style inconsistencies.
Suggestion: add the frozen-string-literal magic comment as the first line of this file.
| gemfile_path = File.join(destination_root, 'Gemfile') | ||
| gemfile = File.open(gemfile_path) | ||
|
|
||
| File.write(gemfile_path, gemfile.grep_v(/rolemodel_rails/).join) | ||
| File.write(gemfile_path, gemfile.grep_v(/rolemodel-rails/).join) |
There was a problem hiding this comment.
gemfile = File.open(gemfile_path) leaves the file handle unclosed (it’s not opened with a block and isn’t explicitly closed). Over repeated generator specs this can leak descriptors and cause intermittent failures.
Suggestion: use File.read/File.foreach or open the file with a block so it’s closed deterministically.
| require 'rails' | ||
| require 'bundler/setup' | ||
| require 'generator_spec' | ||
| require 'rolemodel-rails' | ||
| require_relative 'support/helpers' |
There was a problem hiding this comment.
spec/spec_helper.rb doesn’t have # frozen_string_literal: true at the top, while other spec/support files do. Since this file is being edited anyway, it’s a good place to align with the repo’s frozen-string-literal convention.
Suggestion: add the magic comment as the first line of this file.
Why?
Rolemodel&RolemodelRails) which is a general anti-pattern for RubyGems.-rather than a_. e.g.rspec-rails,slim-rails,rubocop-rails, etc. This ties back into#2becauserolemodel-railstranslates toRolemodel::Rails, whilerolemodel_railstranslates toRolemodelRails.What Changed
What changed in this PR?
rolemodel-railsPre-merge checklist
bin/bump_versionorbin/bump_version --patch