Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/davidcelis/rack-console
💻 `rails console` for your Rack applications
https://github.com/davidcelis/rack-console
cli console irb pry rack ruby
Last synced: 28 days ago
JSON representation
💻 `rails console` for your Rack applications
- Host: GitHub
- URL: https://github.com/davidcelis/rack-console
- Owner: davidcelis
- License: mit
- Created: 2014-07-01T16:09:16.000Z (over 10 years ago)
- Default Branch: master
- Last Pushed: 2024-05-30T16:27:12.000Z (7 months ago)
- Last Synced: 2024-11-17T01:09:37.912Z (about 1 month ago)
- Topics: cli, console, irb, pry, rack, ruby
- Language: Ruby
- Homepage:
- Size: 33.2 KB
- Stars: 27
- Watchers: 5
- Forks: 4
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE.txt
Awesome Lists containing this project
README
# Rack::Console [![Build Status](https://travis-ci.org/davidcelis/rack-console.svg?branch=master)](https://travis-ci.org/davidcelis/rack-console)
Find yourself missing a `rails console` analogue in your other Ruby web applications? This lightweight gem provides a Rack::Console class that will load your Rack application's code and environment into an IRB or Pry session. Either use `Rack::Console.new.start` directly, or run the provided `rack-console` executable.
## Installation
Add this line to your application's Gemfile:
```ruby
gem 'rack-console'
```And then execute:
```bash
$ bundle install
```Or install it system-wide:
```bash
$ gem install rack-console
```## Usage
Rack::Console ships with a `rack-console` executable that will load your application in an IRB shell (or
[Pry](http://pryrepl.org) if that's included in your Gemfile). Assuming you have a `config.ru` file in the current directory, simply run:```ruby
$ bundle exec rack-console
pry(main)>
```Rack::Console supports some of the same things that `rails console` provides, as well as arguments used in `rackup`:
* An `app` method that will return your underlying Rack application with [rack-test](https://github.com/brynary/rack-test) methods mixed in. You can perform fake requests to your app (e.g. `response = app.get('/')`)
* Supply the RACK_ENV as an argument (`bundle exec rack-console production`)
* A `reload!` method to discard new code or defined variables/constants
* The `-c` option (or `--config`) to specify a non-standard `config.ru` file
* The `-r` option (or `--require`) to require a file/library before Rack::Console loads
* The `-I` option (or `--include`) to specify paths (colon-separated) to add to `$LOAD_PATH` before Rack::Console loads## Framework CLI Example
Because Rack::Console is just a class, it's easy to provide a `console` subcommand to a CLI for your own Rack framework. For example, here's how you could hypothetically implement a `console` subcommand for a generic Rack CLI using [Thor](https://github.com/erikhuda/thor):
```ruby
require 'rack/console'
require 'thor'module Rack
class CLI < Thor
desc 'console [ENVIRONMENT]', 'Start a Rack console'method_option :config, aliases: '-c', type: 'string',
desc: 'Specify a Rackup file (default: config.ru)'
method_option :require, aliases: '-r', type: 'string',
desc: 'Require a file/library before console boots'
method_option :include, aliases: '-I', type: 'string',
desc: 'Add colon-separated paths to $LOAD_PATH'def console
# Set a custom intro message:
# ENV['RACK_CONSOLE_INTRO'] = 'Loading Rack::Console...'
#
# Or, to prevent an intro message from being printed at all:
# ENV['IGNORE_RACK_CONSOLE_INTRO'] = 'true'
Rack::Console.new(options).start
end
end
endRack::CLI.start(ARGV)
```## Contributing
1. [Fork it](https://github.com/davidcelis/rack-console/fork)
2. Create your feature branch (`git checkout -b my-new-feature`)
3. Commit your changes (`git commit -am 'Add some feature'`)
4. Push to the branch (`git push origin my-new-feature`)
5. [Create a new Pull Request](https://github.com/davidcelis/rack-console/compare)