Writes time of last update check to state file
True if the gems in the system satisfy dependency
.
Writes the full .gemspec specification (in Ruby) to the gem home’s specifications/default directory.
In contrast to write_spec
, this keeps file lists, so the ‘gem contents` command works.
Performs various checks before installing the gem such as the install repository is writable and its directories exist, required Ruby and rubygems versions are met and that dependencies are installed.
Version and dependency checks are skipped if this install is forced.
The dependent check will be skipped if the install is ignoring dependencies.
Writes the .gem file to the cache directory
we have our own signing code here to avoid a dependency on the aws-sdk gem
Installs from the gem dependencies files in the :gemdeps
option in options
, yielding to the block
as in install
.
If :without_groups
is given in the options
, those groups in the gem dependencies file are not used. See Gem::Installer
for other options
.
Extra files to add to RDoc
such as README or doc/examples.txt
When the user elects to generate the RDoc
documentation for a gem (typically at install time), all the library files are sent to RDoc
for processing. This option allows you to have some non-code files included for a more complete set of documentation.
Usage:
spec.extra_rdoc_files = ['README', 'doc/user-guide.txt']
Return the latest installed spec for gem name
.
Sets extra_rdoc_files
to files
, ensuring it is an array.
Choose from a list of options. question
is a prompt displayed above the list. list
is a list of option strings. Returns the pair [option_name, option_index].
Tells ‘scan_while` to look for mismatched keyword/end-s
When scanning up, if we see more keywords then end-s it will stop. This might happen when scanning outside of a method body. the first scan line up would be a keyword and this setting would trigger a stop.
When scanning down, stop if there are more end-s than keywords.
Join lines with a trailing slash
source = <<~'EOM' it "code can be split" \ "across multiple lines" do EOM lines = CleanDocument.new(source: source).join_consecutive!.lines expect(lines[0].to_s).to eq(source) expect(lines[1].to_s).to eq("")
Performance optimization
Parsing with ripper is expensive If we know we don’t have any blocks with invalid syntax, then we know we cannot have found the incorrect syntax yet.
When an invalid block is added onto the frontier check document state
Keeps track of what lines have been added to blocks and which are not yet visited.
When one element fully encapsulates another we remove the smaller block from the frontier. This prevents double expansions and all-around weird behavior. However this guarantee is quite expensive to maintain