quick documentation
This commit is contained in:
parent
d73f0761a8
commit
121720ca14
69
README.md
69
README.md
|
@ -1,8 +1,6 @@
|
||||||
# Roda::Proxy
|
# Roda::Proxy
|
||||||
|
|
||||||
Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/roda/proxy`. To experiment with that code, run `bin/console` for an interactive prompt.
|
Roda Proxy is a very simple reverse proxy for Roda. It is designed to proxy APIs, it will not rewrite HTML.
|
||||||
|
|
||||||
TODO: Delete this and the text above, and describe your gem
|
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
|
@ -22,18 +20,71 @@ Or install it yourself as:
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
TODO: Write usage instructions here
|
Add the plugin to your Roda app and pass it two parameters (one is required, one is optional).
|
||||||
|
|
||||||
## Development
|
```ruby
|
||||||
|
require 'roda'
|
||||||
|
require 'roda/proxy'
|
||||||
|
|
||||||
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
class App < Roda
|
||||||
|
plugin :proxy,
|
||||||
|
to: 'https://my.server.com',
|
||||||
|
path_prefix: '/my/api/path'
|
||||||
|
```
|
||||||
|
|
||||||
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
The `to:` parameter is required. It should describe the scheme, host and port of the proxy. It should **not** end with a `/`.
|
||||||
|
|
||||||
## Contributing
|
The `path_prefix:` parameter is optional. It defaults to `/`. If you chose to specify it, it **should** start and end with a `/`.
|
||||||
|
|
||||||
Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/roda-proxy.
|
The plugin provides both an unconditional and a conditional proxy directive.
|
||||||
|
|
||||||
|
To invoke the proxy in your routes, see this example:
|
||||||
|
|
||||||
|
```ruby
|
||||||
|
route do |r|
|
||||||
|
# /my
|
||||||
|
r.on 'my' do
|
||||||
|
# /my/api
|
||||||
|
r.on 'api' do
|
||||||
|
# /my/api/path
|
||||||
|
r.is 'path' do
|
||||||
|
# GET /my/api/path
|
||||||
|
r.get do
|
||||||
|
r.proxy
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
```
|
||||||
|
|
||||||
|
The proxy will always be invoked. Headers and body are passed through unmodified in both directions with the exception of `Host` which is rewritten to match the target.
|
||||||
|
|
||||||
|
Also provided is a conditional proxy:
|
||||||
|
|
||||||
|
```ruby
|
||||||
|
route do |r|
|
||||||
|
# /my
|
||||||
|
r.on 'my' do
|
||||||
|
# /my/api
|
||||||
|
r.on 'api' do
|
||||||
|
# /my/api/path
|
||||||
|
r.is 'path' do
|
||||||
|
# GET /my/api/path
|
||||||
|
r.get do
|
||||||
|
r.proxy_when(r.env['HTTP_PROXY'] == 'true', probability: 0.5) do
|
||||||
|
'This request has not been proxied'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
```
|
||||||
|
|
||||||
|
With `proxy_when` the first optional parameter expects a truthy value or a block / lambda that returns a truthy value. This must be equivalent to `true` for the proxying to occur. The optional probability is a float between 0 and 1 indicating the probability that proxying will happen. Both paramters can be used alone or in isolation.
|
||||||
|
|
||||||
|
If and only if proxying does not occur will the block be evaluated and return to Roda for rendering.
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue