https://github.com/vishnugopal/replr
A single line REPL for your favorite languages & libraries. Built on Docker.
https://github.com/vishnugopal/replr
docker repl ruby
Last synced: about 2 months ago
JSON representation
A single line REPL for your favorite languages & libraries. Built on Docker.
- Host: GitHub
- URL: https://github.com/vishnugopal/replr
- Owner: vishnugopal
- Created: 2018-08-23T14:52:30.000Z (almost 8 years ago)
- Default Branch: master
- Last Pushed: 2020-02-29T21:36:38.000Z (over 6 years ago)
- Last Synced: 2025-02-23T14:53:58.089Z (over 1 year ago)
- Topics: docker, repl, ruby
- Language: Ruby
- Size: 45.9 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Replr
A single line REPL for your favorite languages & libraries. Built on Docker.
This is currently usable & stable, and supports the `ruby`, `python` and `node` stacks.
See [TODO](TODO.md) for future work.
## Quickstart
```
replr
```
So for a simple `ruby` REPL, including the `chronic` gem, it would be:
```
replr ruby chronic
```
Or for a `python` REPL, including the flask and requests packages, it would be:
```
replr python flask requests
```
You can also specify versions of stacks & libraries to install:
```
replr ruby:2.3.1 chronic:0.10.1 activesupport:5.1.0
```
That's it! It's very simple. Replr currently supports three stacks: `ruby`, `python` and `node`.
## Install
replr is built on Ruby and requires Ruby 2.5+ installed.
```
gem install replr
```
That's it! `replr` should now be available in your `$PATH`.
## More Commands
```
replr prune
```
will delete all docker images associated with replr. This saves space!
## Contributing & Development
replr is built on Ruby and requires a Ruby 2.5+ installed to develop. It's pretty easy to get started and add a stack, please see [node's implementation](lib/replr/stack/node/repl_maker.rb) for a quick-start. There's also a companion integration spec that tests expected behavior in [node's test suite](spec/replr/stack/node/repl_maker_spec.rb) that you should emulate and implement for every stack you make.
Most of the "scaffolding" around creating the REPL & dealing with docker's implementation details have been abstracted away if you use the `Replr::Stack::REPLMaker` class, so you only need to implement stack-specific functionality. This includes:
- creating a `Dockerfile.template`([example](lib/replr/stack/node/Dockerfile.template)) (with `%%VERSION%%` tags) for the stack.
- creating a library file ([example](lib/replr/stack/node/repl_maker.rb#L32)) from mentioned gems and versions.
- & setting appropriate `set_filter_lines_for_install` ([example](lib/replr/stack/node/repl_maker.rb#L27)) to mask away unnecessary output during installation.
Note: if you want to run the specs (built with `minitest/spec`), please do:
```
bundle exec rake test
```
## Details
replr uses docker to manage different stacks and installed libraries. It creates docker images that are tagged `replr--` for each stack and library combo you initiate.
The first time you start a new stack & library combo, docker will take some time to spin up instances. Future executions of the same stack should be near-instant.
This is how a full output from a replr install will look like the first time you try out a new stack & library combo:
```
❯ replr ruby chronic
(1/25) Upgrading musl (1.1.14-r14 -> 1.1.14-r16)
(2/25) Installing gmp (6.1.0-r0)
(3/25) Installing libgcc (5.3.0-r0)
(4/25) Installing libstdc++ (5.3.0-r0)
(5/25) Installing libgmpxx (6.1.0-r0)
(6/25) Installing gmp-dev (6.1.0-r0)
(7/25) Installing libedit (20150325.3.1-r3)
(8/25) Installing ruby-libs (2.3.7-r0)
(9/25) Installing ruby-dev (2.3.7-r0)
(10/25) Installing binutils-libs (2.26-r1)
(11/25) Installing binutils (2.26-r1)
(12/25) Installing isl (0.14.1-r0)
(13/25) Installing libgomp (5.3.0-r0)
(14/25) Installing libatomic (5.3.0-r0)
(15/25) Installing mpfr3 (3.1.2-r0)
(16/25) Installing mpc1 (1.0.3-r0)
(17/25) Installing gcc (5.3.0-r0)
(18/25) Installing make (4.1-r1)
(19/25) Installing musl-dev (1.1.14-r16)
(20/25) Installing libc-dev (0.7-r0)
(21/25) Installing fortify-headers (0.8-r0)
(22/25) Installing g++ (5.3.0-r0)
(23/25) Installing build-base (0.4-r1)
(24/25) Installing build-dependencies (0)
(25/25) Upgrading musl-utils (1.1.14-r14 -> 1.1.14-r16)
1 gem installed
Fetching gem metadata from https://rubygems.org/.............
Installing chronic 0.10.2
Bundle complete! 1 Gemfile dependency, 2 gems now installed.
Gems in the groups development and test were not installed.
Bundled gems are installed into `/usr/local/bundle`
irb(main):001:0>
```
The next time, it's much cleaner:
```
❯ replr ruby chronic
irb(main):001:0> Chronic.parse("tomorrow")
=> 2018-08-25 12:00:00 +0000
irb(main):002:0>
```
As you can see, replr tries its best to abstract away the underlying docker installation. You shouldn't have to worry about Dockerfile & so on just to get a REPL!
It also tries its best to make sure libraries you mention are auto-required in the REPL, so you don't have to do any additional work!