项目作者: yhirano55

项目描述 :
:ok_man::no_good: Approval flow for Rails
高级语言: Ruby
项目地址: git://github.com/yhirano55/approval.git
创建时间: 2017-07-18T06:12:15Z
项目社区:https://github.com/yhirano55/approval

开源协议:MIT License

下载


Approval

Build Status
Gem Version

:ok_woman::no_good:Approval flow for Rails

Installation

  1. Add approval to your Gemfile:

    1. gem 'approval'
  2. Add approval_requests, approval_comments, approval_items tables to your database and an initializer file for configuration:

    1. $ bundle exec rails generate approval:install
  3. Add acts_as_approval_user to your user model (User, AdminUser, Member …etc)::

    1. class User < ApplicationRecord
    2. acts_as_approval_user
    3. end
  4. Add acts_as_approval_resource to the models you want use approval flow:

    1. class Book < ApplicationRecord
    2. acts_as_approval_resource
    3. end

    Or if you want to use PORO:

    1. class SomeProcess
    2. def self.perform
    3. # something
    4. end
    5. end

Approval Flow

Make request

You send request, but resources aren’t created/updated/destroyed.

:pray: Create

  1. staff = User.find_or_create_by(email: "staff@example.com")
  2. record = Book.new(name: "Ruby Way", price: 2980)
  3. request = staff.request_for_create(record, reason: "something")
  4. request.save # Created Approval::Request record.
  5. records = 10.times.map {|n| Book.new(name: "my_book_#{n}", price: 300) }
  6. request = staff.request_for_create(records, reason: "something")
  7. request.save!

:pray: Update

  1. staff = User.find_or_create_by(email: "staff@example.com")
  2. record = Book.find(1).tap {|record| record.name = "new book title" }
  3. request = staff.request_for_update(record, reason: "something")
  4. request.save
  5. records = Book.where(id: [1, 2, 3]).each {|record| record.price *= 0.5 }
  6. request = staff.request_for_update(records, reason: "something")
  7. request.save!

:pray: Destroy

  1. staff = User.find_or_create_by(email: "staff@example.com")
  2. record = Book.find(1)
  3. request = staff.request_for_destroy(record, reason: "something")
  4. request.save
  5. records = Book.where(id: [1, 2, 3])
  6. request = staff.request_for_destroy(records, reason: "something")
  7. request.save!

:pray: Perform

  1. staff = User.find_or_create_by(email: "staff@example.com")
  2. record = MyProcess.new(recipient: "somebody@example.com")
  3. request = staff.request_for_perform(record, reason: "something")
  4. request.save

Respond

:ok_woman: Approve

Then resources are created/updated/destroyed, if respond user have approved the request.

  1. admin = User.find_or_create_by(email: "admin@example.com")
  2. request = Approval::Request.first
  3. respond = admin.approve_request(request, reason: "something")
  4. respond.save! # Create/Update/Destroy resources
:no_good: Reject

Then resources are not created/updated/destroyed, if respond user have rejected the request.

  1. admin = User.find_or_create_by(email: "admin@example.com")
  2. request = Approval::Request.first
  3. respond = admin.reject_request(request, reason: "something")
  4. respond.save!
:wastebasket: Cancel
  1. staff = User.find_or_create_by(email: "staff@example.com")
  2. request = Approval::Request.first
  3. respond = staff.cancel_request(request, reason: "something")
  4. respond.save!

Comment

  1. admin = User.find_or_create_by(email: "admin@example.com")
  2. request = Approval::Request.first
  3. admin.approval_comments.create(request: request, content: "Hello")

Configuration

  1. # config/initializers/approval.rb
  2. Approval.configure do |config|
  3. # User Class Name (e.g: User, AdminUser, Member)
  4. config.user_class_name = "User"
  5. # Maximum characters of comment for reason (default: 2000)
  6. config.comment_maximum = 2000
  7. # Permit to respond to own request? (default: false)
  8. config.permit_to_respond_to_own_request = false
  9. end

License

The gem is available as open source under the terms of the MIT License.