Homebrew's actually ended up using a fair few gems. While we want to
avoid Bundler at runtime (and this PR still does that, in fact uses
Bundler even less at runtime than it did before) writing our own version
to use at build-time seems redundant.
The vendor Ruby will be put inside `Library/Homebrew/vendor/portable-ruby/<version>`,
with a symlink `Library/Homebrew/vendor/portable-ruby/current` pointed to it.
In addition, a `Library/Homebrew/vendor/portable-ruby-version` will
track the latest version of vendor binaries.
This gives us version control on vendor Ruby and enables us to bump vendor
Ruby whenever needed such as security update.
This contains updates to the OkJson library that allow objects to define
to_json for serialization, and this will be used in the upcoming options
and deps work.
The `multi_json` gem dynamically selects a JSON implementation from a list of
candidates. Since we cannot control which gems are installed on a user's
machine, this patch hardwires `multi_json` to use the included copy of `ok_json`.
`ok_json` is a pure-Ruby JSON encoder/decoder that is bundled with
`multi_json`. `ok_json` may not be as fast as other choices, but speed is not
critical for our application.
ClosesHomebrew/homebrew#8574.
Signed-off-by: Charlie Sharpsteen <source@sharpsteen.net>
Multi-JSON is a library that provides encode/decode support for casting Ruby
objects to JSON strings and back again. This version of the library has been
tested against ruby versions 1.8.6 and later.
Having a JSON encoder/decoder in the toolbox helps now that the GitHub API only
returns results in JSON format.