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).