Gem **Repost** implements Redirect using POST method
[](https://badge.fury.io/rb/repost)
[](https://travis-ci.org/vergilet/repost)
## Installation
Add this line to your application's Gemfile:
```ruby
gem 'repost'
```
And then execute:
$ bundle
Or install it yourself as:
$ gem install repost
## Diagram
What problem does it solve?
When you need to send some parameters to an endpoint which should redirect you after execution. There wouldn't be a problem if an endpoint receives [GET], because you can just use `redirect_to post_url(id: @model.id, token: model.token...)`.
But when an endpoint receives [POST], you have to generate html form and submit it. So `repost` gem helps to avoid creation of additional view with html form, just use `redirect_post` method instead.
I faced with this problem when was dealing with bank transactions. You can see the approximate scheme:
## Usage
If you use Rails, gem automatically includes helper methods to your controllers:
```ruby
repost(...)
```
and, as an alias
```ruby
redirect_post(...)
```
*Under the hood it calls `render` method of current controller with `html:`.*
### Example in Rails app:
```ruby
class MyController < ApplicationController
...
def index
repost(...)
end
...
end
```
______________
If you use Sinatra, Roda or etc., you need to require it first somewhere in you project:
```ruby
require 'repost'
```
Then ask your senpai to generate a string with html:
```ruby
Repost::Senpai.perform(...)
```
### Example in Sinatra, Roda, etc. app:
```ruby
class MyController < Sinatra::Base
get '/' do
Repost::Senpai.perform(...)
end
end
```
#### *Reminder:*
- *In Rails app use `repost` or `redirect_post` method in your controller which performs 'redirect' when it is called.*
- *In Sinatra, Roda, etc. app or if you need html output - call Senpai*
#### Full example:
*UPD: authenticity token is **turned off** by default. Use `:auto` or `'auto'` to turn on default authenticity token from Rails. Any other string value would be treated as custom auth token value.*
```ruby
Repost::Senpai.perform('http://examp.io/endpoint', # URL, looks understandable
params: {a: 1, b: 2, c: '3', d: "4"}, # Your request body
options: {
method: :post, # OPTIONAL - DEFAULT is :post, but you can use others if needed
authenticity_token: 'auto', # OPTIONAL - :auto or 'auto' for Rails form_authenticity_token, string - custom token
charset: 'Windows-1251', # OPTIONAL - DEFAULT is "UTF-8", corresponds for accept-charset
form_id: 'CustomFormID', # OPTIONAL - DEFAULT is autogenerated
autosubmit: false, # OPTIONAL - DEFAULT is true, if you want to get a confirmation for redirect
decor: { # If autosubmit is turned off or Javascript is disabled on client
section: { # ... you can decorate confirmation section and button
classes: 'red-bg red-text', # OPTIONAL -
section, set classNames, separate with space
html: '