parent
91cedff462
commit
44aa50dc9e
@ -0,0 +1,12 @@
|
||||
class CreateDiffRecordJob < ApplicationJob
|
||||
queue_as :default
|
||||
|
||||
def perform(user_id, obj_id, obj_klass, column_name, before, after)
|
||||
user = User.find_by(id: user_id)
|
||||
obj = obj_klass.constantize.find_by(id: obj_id)
|
||||
|
||||
return if user.blank? || obj.blank?
|
||||
|
||||
CreateDiffRecordService.call(user, obj, column_name, before, after)
|
||||
end
|
||||
end
|
@ -0,0 +1,8 @@
|
||||
class DiffRecord < ApplicationRecord
|
||||
belongs_to :user
|
||||
belongs_to :container, polymorphic: true
|
||||
|
||||
has_one :diff_record_content, dependent: :destroy
|
||||
|
||||
delegate :content, to: :diff_record_content
|
||||
end
|
@ -0,0 +1,3 @@
|
||||
class DiffRecordContent < ApplicationRecord
|
||||
belongs_to :diff_record
|
||||
end
|
@ -0,0 +1,30 @@
|
||||
class CreateDiffRecordService < ApplicationService
|
||||
attr_reader :user, :obj, :column_name, :after, :before
|
||||
|
||||
def initialize(user, obj, column_name, before, after)
|
||||
@user = user
|
||||
@obj = obj
|
||||
@before = before
|
||||
@after = after
|
||||
@column_name = column_name
|
||||
end
|
||||
|
||||
def call
|
||||
ActiveRecord::Base.transaction do
|
||||
diff_record = DiffRecord.create!(user: user, container: obj, column_name: column_name)
|
||||
diff_record.create_diff_record_content!(content: diff_content)
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def diff_content
|
||||
content = ''
|
||||
Diffy::Diff.new(before, after).each do |line|
|
||||
next unless line =~ /^[\+-]/
|
||||
|
||||
content += line
|
||||
end
|
||||
content
|
||||
end
|
||||
end
|
@ -0,0 +1,11 @@
|
||||
class CreateDiffRecords < ActiveRecord::Migration[5.2]
|
||||
def change
|
||||
create_table :diff_records do |t|
|
||||
t.references :user
|
||||
t.references :container, polymorphic: true
|
||||
t.string :column_name
|
||||
|
||||
t.timestamps
|
||||
end
|
||||
end
|
||||
end
|
@ -0,0 +1,9 @@
|
||||
class CreateDiffRecordContents < ActiveRecord::Migration[5.2]
|
||||
def change
|
||||
create_table :diff_record_contents do |t|
|
||||
t.references :diff_record
|
||||
|
||||
t.text :content
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Reference in new issue