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