README.md in approval-0.2.2 vs README.md in approval-0.2.3
- old
+ new
@@ -1,64 +1,141 @@
# Approval
[![Build Status](https://travis-ci.org/yhirano55/approval.svg?branch=master)](https://travis-ci.org/yhirano55/approval)
[![Gem Version](https://badge.fury.io/rb/approval.svg)](https://badge.fury.io/rb/approval)
-:ok_woman::no_good:Approval workflow for Rails
+:ok_woman::no_good:Approval flow for Rails
## Installation
-```ruby
-gem 'approval'
-```
+1. Add approval to your `Gemfile`:
-Optionally, you can run the generator, which will set up approval models with some useful defaults for you:
+ ```ruby
+ gem 'approval'
+ ```
-```bash
-$ bin/rails g approval:install
-```
+2. Add approval_requests, approval_comments, approval_items tables to your database and an initializer file for configuration:
-## Usage
+ ```bash
+ $ bundle exec rails generate approval:install
+ ```
-### Prepare
+3. Add `acts_as_approval_user` to your user model (`User`, `AdminUser`, `Member` ...etc)::
-Call `acts_as_approval_user` in your resource of user model (`User`, `AdminUser`, `Member` etc):
+ ```ruby
+ class User < ApplicationRecord
+ acts_as_approval_user
+ end
+ ```
+4. Add `acts_as_approval_resource` to the models you want use approval flow:
+
+ ```ruby
+ class Post < ApplicationRecord
+ acts_as_approval_resource
+ end
+ ```
+
+## Approval Flow
+
+### Make request
+
+You send request, but resources aren't created/updated/destroied.
+
+#### :pray: Create
+
```ruby
-class User < ApplicationRecord
- acts_as_approval_user
-end
+staff = User.find_or_create_by(email: "staff@example.com")
+
+record = Book.new(name: "Ruby Way", price: 2980)
+request = staff.request_for_create(record, reason: "something")
+request.save # Created Approval::Request record.
+
+records = 10.times.map {|n| Book.new(name: "my_book_#{n}", price: 300) }
+request = staff.request_for_create(records, reason: "something")
+request.save!
```
-Call `acts_as_approval_resource` in your resource:
+#### :pray: Update
```ruby
-class Book < ApplicationRecord
- acts_as_approval_resource
-end
+staff = User.find_or_create_by(email: "staff@example.com")
+
+record = Book.find(1).tap {|record| record.name = "new book title" }
+request = staff.request_for_update(record, reason: "something")
+request.save
+
+records = Book.where(id: 1, 2, 3).map {|record| record.price *= 0.5 }
+request = staff.request_for_update(records, reason: "something")
+request.save!
```
-### Request
+#### :pray: Destroy
```ruby
staff = User.find_or_create_by(email: "staff@example.com")
-book = 10.times.map { |n| Book.new(name: "my_book_#{n}") }
-request = staff.request_for_create(records, reason: "something")
+
+record = Book.find(1)
+request = staff.request_for_destroy(record, reason: "something")
+request.save
+
+records = Book.where(id: 1, 2, 3)
+request = staff.request_for_destroy(records, reason: "something")
request.save!
```
-You send request, but resources aren't created.
-
### Respond
+#### :ok_woman: Approve
+
+Then resources are created/updated/destroied, if respond user have approved the request.
+
```ruby
admin = User.find_or_create_by(email: "admin@example.com")
+
request = Approval::Request.first
respond = admin.approve_request(request, reason: "something")
+respond.save! # Create/Update/Destroy resources
+```
+
+##### :no_good: Reject
+
+Then resources are not created/updated/destroied, if respond user have rejected the request.
+
+```ruby
+admin = User.find_or_create_by(email: "admin@example.com")
+
+request = Approval::Request.first
+respond = admin.reject_request(request, reason: "something")
respond.save!
```
-Then resources are created, if respond user have approved the request.
+##### :wastebasket: Cancel
+
+```ruby
+staff = User.find_or_create_by(email: "staff@example.com")
+
+request = Approval::Request.first
+respond = staff.cancel_request(request, reason: "something")
+respond.save!
+```
+
+### Configuration
+
+```ruby
+# config/initializers/approval.rb
+
+Approval.configure do |config|
+ # Your user model name (e.g. User, AdminUser, Member, default: User)
+ config.user_class_name = "User"
+
+ # Maximum characters of comment for reason (default: 2000)
+ config.comment_maximum = 2000
+
+ # Permit to respond to own request? (default: false)
+ config.permit_to_respond_to_own_request = false
+end
+```
## License
The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).