gemserve
provides files to support laptop-based implementation for the Gems interview challenge.
Download from the GitHub Releases list. Use https://transfer.sh to download to a candidate's computer, or host on your own machine using https://ngrok.io.
To run: gemserve
For usage: gemserve --help
This HTTP server listens on three paths:
Returns a JSON list containing a list of (package name, package version) pairs.
Example output:
[
["package", "1.0.0"],
["package", "1.0.1"],
["another-package", "2.3.4"]
]
Returns a JSON object containing package manifests.
Example output:
{
"package": {
"a-direct-dependency": "~> 1.0.0",
"yet-another-package": "^2.3.4"
},
"another-package": {
"yet-another-package": ">= 2, < 4.0.0"
},
"yet-another-package": {}
}
Expects a JSON request body with two strings "a" and "b". Returns -1 if a < b, 0 if a == b, and 1 if a > b.
Example input:
{
"a": "1.0.0",
"b": "1.0.1"
}
Example output:
-1
Expects a JSON request body with two strings "version" and "spec". Returns true if the version is within the spec, and false otherwise.
Example input:
{
"version": "1.0.2",
"spec": "^1.0.0"
}
Example output:
true
Download a RubyGems database dump from https://rubygems.org/pages/data, and load
it into the provided Docker container. Then run the Docker container with its
PostgreSQL port exposed and run gengems
.
docker build -t gemserve .
docker run -p 5432:5432 -it gemserve
# Within Docker container
/docker-entrypoint.sh postgres &
./load-pg-dump -c gems.tar
# Outside of container, while container is still running
mkdir -p ./bindata/data
gengems -dir ./bindata/data > /tmp/gengems.log
go install ./...