OperatorRecordable
OperatorRecordable is a Rails plugin gem that makes your ActiveRecord models to be saved or logically deleted with automatically set created_by, updated_by, and deleted_by.
Also it makes creator, updater, and deleter belongs_to association if a class has created_by, updated_by, or deleted_by.
It also supports discarded_by column if discard gem is available.
This gem is inspired by RecordWithOperator.
Installation
Add this line to your application's Gemfile:
gem 'operator_recordable'And then execute:
$ bundle install
Or install it yourself as:
$ gem install operator_recordable
Usage
Configuration
Initialize OperatorRecordable
# config/initializers/operator_recordable.rb
OperatorRecordable.config = {
operator_class_name: "Operator",
creator_column_name: "created_by",
updater_column_name: "updated_by",
deleter_column_name: "deleted_by",
discarder_column_name: "discarded_by",
creator_association_name: "creator",
updater_association_name: "updater",
deleter_association_name: "deleter",
discarder_association_name: "discarder",
operator_association_options: {},
operator_association_scope: nil,
store: :current_attributes_store
}Options
| Name | Type | Description | Default |
|---|---|---|---|
operator_class_name |
String | class name of your operator model. | "Operator" |
creator_column_name |
String | column name of creator. | "created_by" |
updater_column_name |
String | column name of updater. | "updated_by" |
deleter_column_name |
String | column name of deleter. | "deleted_by" |
discarder_column_name |
String | column name of discarder. | "discarded_by" |
creator_association_name |
String | association name of creator. | "creator" |
updater_association_name |
String | association name of updater. | "updater" |
deleter_association_name |
String | association name of deleter. | "deleter" |
discarder_association_name |
String | association name of discarder. | "discarder" |
operator_association_options |
Hash | options of operator associations. e.g. { touch: true }
|
{} |
operator_association_scope |
Proc | The scope of operator associations. e.g. -> { with_deleted }
|
nil |
store |
Enum | operator store. any value of :current_attributes_store or :request_store
|
:current_attributes_store |
Include OperatorRecordable in your model
class ApplicationRecord < ActiveRecord::Base
self.abstract_class = true
include OperatorRecordable::Extension
endActivate OperatorRecordable in your model
You can specify which action you want to save operator like this.
class Post < ApplicationRecord
record_operator_on :create, :update, :destroy
endOperatorRecordable needs to know who is currently operating. For that, you need to set operator through a following way in a before_action callback, etc.
OperatorRecordable.operator = current_operatorStores
:current_attributes_store
This store is implemented by using ActiveSupport::CurrentAttributes.
This is the default store.
:request_store
This store is implemented by using RequestStore gem.
So, this requires RequestStore gem.
RequestStore must be loaded before OperatorRecordable.
gem "request_store"
gem "operator_recordable"Or
require "request_store"
require "operator_recordable"Otherwise, you need to load it yourself.
require "operator_recordable/store/request_store"Development
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.
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.
Contributing
Bug reports and pull requests are welcome on GitHub at https://github.com/yujideveloper/operator_recordable.
License
The gem is available as open source under the terms of the MIT License.