Reads the file index and extracts each file into the gem directory.
Ensures that files can’t be installed outside the gem directory.
Turn an array of [name, version, platform] into an array of NameTuple
objects.
Extracts the files in this package into destination_dir
If pattern
is specified, only entries matching that glob will be extracted.
Verifies the files of the gem
Returns a Gem::StubSpecification
for default gems
Returns a Gem::StubSpecification
for installed gem named name
only returns stubs that match Gem.platforms
Return the latest specs, optionally including prerelease specs if prerelease
is true.
Returns an array with bindir attached to each executable in the executables
list
Returns the full path to installed gem’s bin directory.
NOTE: do not confuse this with bindir
, which is just ‘bin’, not a full path.
Returns the full path to an executable named name
in this gem.
Duplicates array_attributes
from other_spec
so state isn’t shared.
Returns the full path to this spec’s ri directory.
Regenerates plugin wrappers after removal.
Expands code to the next lowest indentation
For example:
1 def dog 2 print "dog" 3 end
If a block starts on line 2 then it has captured all it’s “neighbors” (code at the same indentation or higher). To continue expanding, this block must capture lines one and three which are at a different indentation level.
This method allows fully expanded blocks to decrease their indentation level (so they can expand to capture more code up and down). It does this conservatively as there’s no undo (currently).
Smushes all heredoc lines into one line
source = <<~'EOM' foo = <<~HEREDOC lol hehehe HEREDOC EOM lines = CleanDocument.new(source: source).join_heredoc!.lines expect(lines[0].to_s).to eq(source) expect(lines[1].to_s).to eq("")
Smushes logically “consecutive” lines
source = <<~'EOM' User. where(name: 'schneems'). first EOM lines = CleanDocument.new(source: source).join_consecutive!.lines expect(lines[0].to_s).to eq(source) expect(lines[1].to_s).to eq("")
The one known case this doesn’t handle is:
Ripper.lex <<~EOM a && b || c EOM
For some reason this introduces ‘on_ignore_newline` but with BEG type