Enhancement for gem env

Aperta
#9,883 3 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
4/5
Tempo stimato
3-5 giorni
Idoneità per principianti
48/100
Tipo di issue
Funzionalità
Chiarezza
Abbastanza chiara
Stato di attività
Attiva
Stack tecnologico
ruby
Ambito
cli

Direzione di ricerca

Inizia leggendo l’implementazione proposta di show_environment ed eseguendo gem env per confrontare l’output attuale con l’esempio YAML. Esamina come vengono assemblati i valori elencati di configurazione, directory, percorso delle gem e percorso della shell. Il lavoro è completato quando si è concordato il formato dell’output e sono stati implementati i controlli di presenza proposti, la riduzione delle informazioni della directory home e la formattazione centralizzata.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

The following rewrite of show_environment suggests improvements of gem env output.

Feedback on further improvements or alternative angles appreciated.

Feature Benefits
Outputs YAML (near already) Can parse, pipe to yq for colors, etc.
Checks file presence Helpful in bug reports
Replaces Dir.home with ~ Redaction / Privacy
Centralizes formatting DRY
Example output
RubyGems Environment:
  Version:
    - 4.0.20
  Platforms:
    - ruby
    - arm64-darwin-25
  Configuration:
    update_sources: true
    verbose: true
    backtrace: true
    bulk_threshold: 1000
    gem: --no-document
  Sources:
    - https://rubygems.org/
  Dependencies:
    Ruby version: 4.0.7 (2026-09-15 patchlevel 0) [arm64-darwin25]
    Ruby executable: /opt/homebrew/opt/ruby/bin/ruby
    Git executable: /usr/bin/git
  Directories:
    Global install: /opt/homebrew/lib/ruby/gems/4.0.0
    # Global config: /opt/homebrew/Cellar/ruby/4.0.7/etc
    Executable: /opt/homebrew/lib/ruby/gems/4.0.0/bin
    # User install: ~/.local/share/gem/ruby/4.0.0
    Spec cache: ~/.cache/gem/specs
    # Credentials: ~/.local/share/gem/credentials
  Gem path:
    - /opt/homebrew/lib/ruby/gems/4.0.0
    # - ~/.local/share/gem/ruby/4.0.0
    - /opt/homebrew/Cellar/ruby/4.0.7/lib/ruby/gems/4.0.0
  Shell path:
    - /opt/homebrew/bin
    - /opt/homebrew/sbin
    - /opt/homebrew/opt/ruby/bin
    - /usr/bin
    - /bin
    - /usr/sbin
    - /sbin
    - /opt/homebrew/lib/ruby/gems/4.0.0/bin
Code
  def exist(value)
    case value
    when %r{^/}
      File.stat(value)
    end
    ''
  rescue Errno::ENOENT
    '# '
  end

  def tree(items)
    items.flat_map do |group, items|
      items.compact.map do |item|
        item = [item].flatten
        line = exist(item.last) + (item.one? ? '- ' : '') + item.join(': ')
        line.prepend('    ').gsub(Dir.home, '~')
      end.prepend(format('  %s:', group))
    end
  end

  def show_environment # :nodoc:
    config = {}
    Gem.configuration.each do |name, value|
      config[name] = name == 'gemcutter_key' ? value.gsub(/./, '*') : value
    end
    {
      'Version' => [Gem::VERSION],
      'Platforms' => Gem.platforms.map(&:to_s),
      'Configuration' => config,
      'Sources' => Gem.sources.to_a,
      'Dependencies' => {
        'Ruby version' => "#{RUBY_VERSION} (#{RUBY_RELEASE_DATE} patchlevel #{RUBY_PATCHLEVEL}) [#{RUBY_PLATFORM}]",
        'Ruby executable' => Gem.ruby,
        'Git executable' => git_path
      },
      'Directories' => {
        'Global install' => Gem.dir,
        'Global config' => Gem::ConfigFile::SYSTEM_CONFIG_PATH,
        'Executable' => Gem.bindir,
        'User install' => Gem.user_dir,
        'Prefix' => Gem.prefix,
        'Spec cache' => Gem.spec_cache_dir,
        'Credentials' => Gem.configuration.credentials_path
      },
      'Gem path' => ([Gem.dir] + Gem.path).uniq,
      'Shell path' => ENV['PATH'].split(File::PATH_SEPARATOR)
    }.then { tree(it).prepend('RubyGems Environment:').join("\n") }
  end
Lingua principale
Ruby
Stelle
4k
Fork
2k
Merge medio
1g 5h
PR unite (30g)
36

Preparare l'ambiente

Apri in Codespaces

Avvia il container di sviluppo del progetto nel browser, con il tuo account GitHub.

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di ruby/rubygems

Tutte le issue di ruby/rubygems

Issue simili

Altre issue su Ruby

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.