Add papertrail
This commit is contained in:
parent
72d88e25ff
commit
2e7b03e9ef
1
Gemfile
1
Gemfile
@ -7,6 +7,7 @@ gem "bootsnap", require: false
|
|||||||
gem "clearance"
|
gem "clearance"
|
||||||
gem "dotenv-rails"
|
gem "dotenv-rails"
|
||||||
gem "importmap-rails"
|
gem "importmap-rails"
|
||||||
|
gem "paper_trail"
|
||||||
gem "pg", "~> 1.1"
|
gem "pg", "~> 1.1"
|
||||||
gem "propshaft"
|
gem "propshaft"
|
||||||
gem "puma", "~> 5.0"
|
gem "puma", "~> 5.0"
|
||||||
|
@ -136,6 +136,9 @@ GEM
|
|||||||
nio4r (2.5.8)
|
nio4r (2.5.8)
|
||||||
nokogiri (1.13.6-x86_64-linux)
|
nokogiri (1.13.6-x86_64-linux)
|
||||||
racc (~> 1.4)
|
racc (~> 1.4)
|
||||||
|
paper_trail (12.3.0)
|
||||||
|
activerecord (>= 5.2)
|
||||||
|
request_store (~> 1.1)
|
||||||
pg (1.4.0)
|
pg (1.4.0)
|
||||||
propshaft (0.6.4)
|
propshaft (0.6.4)
|
||||||
actionpack (>= 7.0.0)
|
actionpack (>= 7.0.0)
|
||||||
@ -183,6 +186,8 @@ GEM
|
|||||||
i18n
|
i18n
|
||||||
reline (0.3.1)
|
reline (0.3.1)
|
||||||
io-console (~> 0.5)
|
io-console (~> 0.5)
|
||||||
|
request_store (1.5.1)
|
||||||
|
rack (>= 1.4)
|
||||||
strscan (3.0.3)
|
strscan (3.0.3)
|
||||||
thor (1.2.1)
|
thor (1.2.1)
|
||||||
timecop (0.9.5)
|
timecop (0.9.5)
|
||||||
@ -208,6 +213,7 @@ DEPENDENCIES
|
|||||||
debug
|
debug
|
||||||
dotenv-rails
|
dotenv-rails
|
||||||
importmap-rails
|
importmap-rails
|
||||||
|
paper_trail
|
||||||
pg (~> 1.1)
|
pg (~> 1.1)
|
||||||
propshaft
|
propshaft
|
||||||
puma (~> 5.0)
|
puma (~> 5.0)
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
class ApplicationController < ActionController::Base
|
class ApplicationController < ActionController::Base
|
||||||
include Clearance::Controller
|
include Clearance::Controller
|
||||||
|
before_action :set_paper_trail_whodunnit
|
||||||
end
|
end
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
class Contribution < ApplicationRecord
|
class Contribution < ApplicationRecord
|
||||||
belongs_to :member
|
belongs_to :member
|
||||||
|
has_paper_trail
|
||||||
end
|
end
|
||||||
|
@ -2,6 +2,7 @@ class Member < ApplicationRecord
|
|||||||
default_scope { where(excluded: false) }
|
default_scope { where(excluded: false) }
|
||||||
has_many :contributions
|
has_many :contributions
|
||||||
has_many :notifications
|
has_many :notifications
|
||||||
|
has_paper_trail
|
||||||
|
|
||||||
def cancelled_on
|
def cancelled_on
|
||||||
expires_on + 90.days
|
expires_on + 90.days
|
||||||
|
1
config/initializers/paper_trail.rb
Normal file
1
config/initializers/paper_trail.rb
Normal file
@ -0,0 +1 @@
|
|||||||
|
PaperTrail.serializer = PaperTrail::Serializers::JSON
|
38
db/migrate/20220626100609_create_versions.rb
Normal file
38
db/migrate/20220626100609_create_versions.rb
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
# This migration creates the `versions` table, the only schema PT requires.
|
||||||
|
# All other migrations PT provides are optional.
|
||||||
|
class CreateVersions < ActiveRecord::Migration[7.0]
|
||||||
|
|
||||||
|
# The largest text column available in all supported RDBMS is
|
||||||
|
# 1024^3 - 1 bytes, roughly one gibibyte. We specify a size
|
||||||
|
# so that MySQL will use `longtext` instead of `text`. Otherwise,
|
||||||
|
# when serializing very large objects, `text` might not be big enough.
|
||||||
|
TEXT_BYTES = 1_073_741_823
|
||||||
|
|
||||||
|
def change
|
||||||
|
create_table :versions do |t|
|
||||||
|
t.string :item_type, null: false
|
||||||
|
t.string :item_id, null: false
|
||||||
|
t.string :event, null: false
|
||||||
|
t.string :whodunnit
|
||||||
|
#t.text :object, limit: TEXT_BYTES
|
||||||
|
|
||||||
|
# Known issue in MySQL: fractional second precision
|
||||||
|
# -------------------------------------------------
|
||||||
|
#
|
||||||
|
# MySQL timestamp columns do not support fractional seconds unless
|
||||||
|
# defined with "fractional seconds precision". MySQL users should manually
|
||||||
|
# add fractional seconds precision to this migration, specifically, to
|
||||||
|
# the `created_at` column.
|
||||||
|
# (https://dev.mysql.com/doc/refman/5.6/en/fractional-seconds.html)
|
||||||
|
#
|
||||||
|
# MySQL users should also upgrade to at least rails 4.2, which is the first
|
||||||
|
# version of ActiveRecord with support for fractional seconds in MySQL.
|
||||||
|
# (https://github.com/rails/rails/pull/14359)
|
||||||
|
#
|
||||||
|
# MySQL users should use the following line for `created_at`
|
||||||
|
# t.datetime :created_at, limit: 6
|
||||||
|
t.datetime :created_at
|
||||||
|
end
|
||||||
|
add_index :versions, %i(item_type item_id)
|
||||||
|
end
|
||||||
|
end
|
@ -0,0 +1,8 @@
|
|||||||
|
# This migration adds the optional `object_changes` column, in which PaperTrail
|
||||||
|
# will store the `changes` diff for each update event. See the readme for
|
||||||
|
# details.
|
||||||
|
class AddObjectChangesToVersions < ActiveRecord::Migration[7.0]
|
||||||
|
def change
|
||||||
|
add_column :versions, :object_changes, :json
|
||||||
|
end
|
||||||
|
end
|
12
db/schema.rb
generated
12
db/schema.rb
generated
@ -10,7 +10,7 @@
|
|||||||
#
|
#
|
||||||
# It's strongly recommended that you check this file into your version control system.
|
# It's strongly recommended that you check this file into your version control system.
|
||||||
|
|
||||||
ActiveRecord::Schema[7.0].define(version: 2022_06_25_224650) do
|
ActiveRecord::Schema[7.0].define(version: 2022_06_26_100610) do
|
||||||
# These are extensions that must be enabled in order to support this database
|
# These are extensions that must be enabled in order to support this database
|
||||||
enable_extension "pgcrypto"
|
enable_extension "pgcrypto"
|
||||||
enable_extension "plpgsql"
|
enable_extension "plpgsql"
|
||||||
@ -71,6 +71,16 @@ ActiveRecord::Schema[7.0].define(version: 2022_06_25_224650) do
|
|||||||
t.index ["remember_token"], name: "index_users_on_remember_token", unique: true
|
t.index ["remember_token"], name: "index_users_on_remember_token", unique: true
|
||||||
end
|
end
|
||||||
|
|
||||||
|
create_table "versions", force: :cascade do |t|
|
||||||
|
t.string "item_type", null: false
|
||||||
|
t.string "item_id", null: false
|
||||||
|
t.string "event", null: false
|
||||||
|
t.string "whodunnit"
|
||||||
|
t.datetime "created_at"
|
||||||
|
t.text "object_changes"
|
||||||
|
t.index ["item_type", "item_id"], name: "index_versions_on_item_type_and_item_id"
|
||||||
|
end
|
||||||
|
|
||||||
add_foreign_key "contributions", "members"
|
add_foreign_key "contributions", "members"
|
||||||
add_foreign_key "notifications", "members"
|
add_foreign_key "notifications", "members"
|
||||||
end
|
end
|
||||||
|
Loading…
Reference in New Issue
Block a user