Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/yujideveloper/operator_recordable
A Rails plugin to set created_by, updated_by, deleted_by to ActiveRecord objects.
https://github.com/yujideveloper/operator_recordable
activerecord rails rails5 rails6 rails7 ruby ruby-gem ruby-on-rails
Last synced: 22 days ago
JSON representation
A Rails plugin to set created_by, updated_by, deleted_by to ActiveRecord objects.
- Host: GitHub
- URL: https://github.com/yujideveloper/operator_recordable
- Owner: yujideveloper
- License: mit
- Created: 2018-08-10T02:31:07.000Z (over 6 years ago)
- Default Branch: main
- Last Pushed: 2022-08-27T11:30:28.000Z (over 2 years ago)
- Last Synced: 2024-12-17T11:11:37.513Z (27 days ago)
- Topics: activerecord, rails, rails5, rails6, rails7, ruby, ruby-gem, ruby-on-rails
- Language: Ruby
- Homepage:
- Size: 118 KB
- Stars: 15
- Watchers: 2
- Forks: 3
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE.txt
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
README
# OperatorRecordable
[![Gem Version](https://badge.fury.io/rb/operator_recordable.svg)](https://badge.fury.io/rb/operator_recordable)
[![Build](https://github.com/yujideveloper/operator_recordable/workflows/Build/badge.svg)](https://github.com/yujideveloper/operator_recordable/actions?query=workflow%3ABuild)
[![Maintainability](https://api.codeclimate.com/v1/badges/aaa0fcd567da9232a847/maintainability)](https://codeclimate.com/github/yujideveloper/operator_recordable/maintainability)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](https://github.com/jhawthorn/discard) is available.
This gem is inspired by [RecordWithOperator](https://github.com/nay/record_with_operator).
## Installation
Add this line to your application's Gemfile:
```ruby
gem 'operator_recordable'
```And then execute:
$ bundle install
Or install it yourself as:
$ gem install operator_recordable
## Usage
### Configuration
#### Initialize `OperatorRecordable`
``` ruby
# 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
``` ruby
class ApplicationRecord < ActiveRecord::Base
self.abstract_class = trueinclude OperatorRecordable::Extension
end
```#### Activate `OperatorRecordable` in your model
You can specify which action you want to save operator like this.
``` ruby
class Post < ApplicationRecord
record_operator_on :create, :update, :destroy
end
```OperatorRecordable needs to know who is currently operating. For that, you need to set operator through a following way in a `before_action` callback, etc.
``` ruby
OperatorRecordable.operator = current_operator
```### Stores
#### `:current_attributes_store`
This store is implemented by using [`ActiveSupport::CurrentAttributes`](https://api.rubyonrails.org/v5.2.0/classes/ActiveSupport/CurrentAttributes.html).
This is the default store.#### `:request_store`
This store is implemented by using [RequestStore gem](https://github.com/steveklabnik/request_store).
So, this requires RequestStore gem.RequestStore must be loaded before OperatorRecordable.
``` ruby
gem "request_store"
gem "operator_recordable"
```
Or``` ruby
require "request_store"
require "operator_recordable"
```Otherwise, you need to load it yourself.
``` ruby
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](https://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](https://opensource.org/licenses/MIT).