simple_history 0.0.2 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/controllers/simple_history/histories_controller.rb +18 -0
- data/app/models/simple_history/history.rb +8 -0
- data/app/models/simple_history/simple_history.rb +7 -0
- data/app/views/layouts/simple_history/application.html.erb +17 -11
- data/app/views/simple_history/histories/index.html.erb +18 -0
- data/app/views/simple_history/histories/show.html.erb +38 -0
- data/app/views/simple_history/shared/_flash.html.erb +7 -0
- data/app/views/simple_history/shared/_nav.html.erb +11 -0
- data/config/routes.rb +3 -0
- data/db/migrate/20230730180547_create_simple_history_histories.rb +12 -0
- data/lib/simple_history/attribute.rb +57 -0
- data/lib/simple_history/version.rb +1 -1
- data/lib/simple_history.rb +2 -0
- metadata +10 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3d0190eb6cf9e58fb60ec05e637139d042f497fa9fb41773b757890e9fbccb6d
|
4
|
+
data.tar.gz: e65813c3a0c4e59148ab8afdbc89a3e2915bef499fe22ee8911176f778fddd66
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 49c16db263ce05c4abbc74853621d044c98da8b06bc467bdf840edd8e4fe5b668ce7be56d93904acae720be777c7ea5fecc7b89ebd962b87117a2d0fa11f5673
|
7
|
+
data.tar.gz: 296bc1f8107a6f8cc58c95f4b9393a46a3574dd468883392321ece1b6e19929a123bde66eb56b6a4355cca2970913a1dbb6746aa7c49bfbad7e5ff738fa1be4c
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module SimpleHistory
|
2
|
+
class HistoriesController < ApplicationController
|
3
|
+
def index
|
4
|
+
if params["record_type"].present? && params["record_id"].present?
|
5
|
+
@histories = History.where(record_type: params["record_type"], record_id: params["record_id"]).order(created_at: :desc)
|
6
|
+
elsif params["record_type"].present?
|
7
|
+
@histories = History.where(record_type: params["record_type"]).order(created_at: :desc)
|
8
|
+
else
|
9
|
+
@histories = History.all.order(created_at: :desc)
|
10
|
+
end
|
11
|
+
@record_types = History.pluck(:record_type).uniq
|
12
|
+
end
|
13
|
+
|
14
|
+
def show
|
15
|
+
@history = History.find(params[:id])
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -1,15 +1,21 @@
|
|
1
1
|
<!DOCTYPE html>
|
2
2
|
<html>
|
3
|
-
<head>
|
4
|
-
|
5
|
-
|
6
|
-
|
3
|
+
<head>
|
4
|
+
<title>SimpleHistory</title>
|
5
|
+
<meta name="viewport" content="width=device-width,initial-scale=1">
|
6
|
+
<%= csrf_meta_tags %>
|
7
|
+
<%= csp_meta_tag %>
|
8
|
+
<%= stylesheet_link_tag "simple_history/application", media: "all" %>
|
9
|
+
<script src="https://cdn.tailwindcss.com?plugins=forms,typography,aspect-ratio"></script>
|
10
|
+
</head>
|
7
11
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
<%=
|
13
|
-
|
14
|
-
</
|
12
|
+
<body>
|
13
|
+
<div class="flex gap-4">
|
14
|
+
<%= render "simple_history/shared/nav" %>
|
15
|
+
<div class="ml-72 w-full p-4 sm:p-8 prose max-w-none prose-a:no-underline">
|
16
|
+
<%= render "simple_history/shared/flash" %>
|
17
|
+
<%= yield %>
|
18
|
+
</div>
|
19
|
+
</div>
|
20
|
+
</body>
|
15
21
|
</html>
|
@@ -0,0 +1,18 @@
|
|
1
|
+
<div class="flex justify-between items-center">
|
2
|
+
<h1 class="mb-2">History</h1>
|
3
|
+
<div>
|
4
|
+
<%= form_tag(histories_path, method: :get) do %>
|
5
|
+
<%= select_tag :record_type, options_for_select(@record_types, params[:record_type]), class: "mt-2 block w-full rounded-md border-0 py-1.5 pl-3 pr-5 text-gray-900 ring-1 ring-inset ring-gray-300 focus:ring-2 focus:ring-slate-600 sm:text-sm sm:leading-6" %>
|
6
|
+
<%= text_field_tag :record_id, params[:record_id], placeholder: "ID", class: "border border-neutral-200 rounded p-2" %>
|
7
|
+
<%= submit_tag "Search", class: "bg-slate-900 text-white rounded p-2" %>
|
8
|
+
<% end %>
|
9
|
+
</div>
|
10
|
+
</div>
|
11
|
+
|
12
|
+
<% @histories.each do |history| %>
|
13
|
+
<div>
|
14
|
+
<%= link_to history do %>
|
15
|
+
<%= history.record_type %> #<%= history.record_id %> - <%= history.action %> - <%= history.created_at %>
|
16
|
+
<% end %>
|
17
|
+
</div>
|
18
|
+
<% end %>
|
@@ -0,0 +1,38 @@
|
|
1
|
+
<h1 class="mb-2"><%= @history.record_type %> <%= @history.record_id %></h1>
|
2
|
+
<p class="text-sm"><%= @history.action.humanize %> at: <%= @history.created_at %></p>
|
3
|
+
|
4
|
+
<% if @history.changed_data.present? && JSON.parse(@history.changed_data).any? %>
|
5
|
+
<div class="table w-full">
|
6
|
+
<div class="table-header-group">
|
7
|
+
<div class="table-row font-bold">
|
8
|
+
<div class="table-cell border-b border-neutral-200 p-2">Attribute</div>
|
9
|
+
<div class="table-cell border-b border-neutral-200 p-2">Previous value</div>
|
10
|
+
<div class="table-cell border-b border-neutral-200 p-2">New value</div>
|
11
|
+
</div>
|
12
|
+
</div>
|
13
|
+
<div class="table-row-group">
|
14
|
+
<% if @history.action == "destroyed" %>
|
15
|
+
<% JSON.parse(@history.changed_data).each do |change| %>
|
16
|
+
<div class="table-row">
|
17
|
+
<%= tag.div change[0], class: "table-cell border-b border-neutral-200 p-2" %>
|
18
|
+
<%= tag.div change[1], class: "table-cell border-b border-neutral-200 bg-red-50 p-2" %>
|
19
|
+
<%= tag.div "", class: "table-cell border-b border-neutral-200 bg-green-50 p-2" %>
|
20
|
+
</div>
|
21
|
+
<% end %>
|
22
|
+
<% else %>
|
23
|
+
<% JSON.parse(@history.changed_data).each do |change| %>
|
24
|
+
<div class="table-row">
|
25
|
+
<%= tag.div change[0], class: "table-cell border-b border-neutral-200 p-2" %>
|
26
|
+
<%= tag.div change[1][0], class: "table-cell border-b border-neutral-200 bg-red-50 p-2" %>
|
27
|
+
<%= tag.div change[1][1], class: "table-cell border-b border-neutral-200 bg-green-50 p-2" %>
|
28
|
+
</div>
|
29
|
+
<% end %>
|
30
|
+
<% end %>
|
31
|
+
</div>
|
32
|
+
</div>
|
33
|
+
<% end %>
|
34
|
+
|
35
|
+
<% if @history.record.present? %>
|
36
|
+
<h2 class="mt-4">Latest Attributes</h2>
|
37
|
+
<pre><code><%= JSON.pretty_generate(@history.record.attributes) %></code></pre>
|
38
|
+
<% end %>
|
@@ -0,0 +1,11 @@
|
|
1
|
+
<nav class="p-4 sm:p-8 fixed inset-y-0 w-72 bg-slate-100 text-dark">
|
2
|
+
<h1 class="flex items-center gap-1 font-extrabold">
|
3
|
+
<%= link_to "SimpleHistory", root_path %>
|
4
|
+
</h1>
|
5
|
+
|
6
|
+
<br />
|
7
|
+
<%= link_to "Back to app", main_app.root_path, class: "block text-sm" if main_app.root_path %>
|
8
|
+
|
9
|
+
<br />
|
10
|
+
<%= link_to "History", histories_path, class: "block" %>
|
11
|
+
</nav>
|
data/config/routes.rb
CHANGED
@@ -0,0 +1,12 @@
|
|
1
|
+
class CreateSimpleHistoryHistories < ActiveRecord::Migration[7.0]
|
2
|
+
def change
|
3
|
+
create_table :simple_history_histories do |t|
|
4
|
+
t.references :record, polymorphic: true, null: false
|
5
|
+
t.references :user, polymorphic: true, null: true
|
6
|
+
t.string :action
|
7
|
+
t.text :changed_data
|
8
|
+
|
9
|
+
t.timestamps
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
module SimpleHistory
|
4
|
+
module Attribute
|
5
|
+
extend ActiveSupport::Concern
|
6
|
+
|
7
|
+
# thread_mattr_accessor :current_user
|
8
|
+
|
9
|
+
included do
|
10
|
+
after_create :record_simple_history
|
11
|
+
after_update_commit :record_simple_history
|
12
|
+
after_destroy :record_simple_history
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def record_simple_history
|
18
|
+
# SimpleHistory::RecordHistoryJob.perform_later(
|
19
|
+
# self, self.changes.to_json, SimpleHistory::HasSimpleHistory.current_user, history_action
|
20
|
+
# )
|
21
|
+
# SimpleHistory::Attribute.current_user = nil
|
22
|
+
|
23
|
+
if history_action.eql?('destroyed')
|
24
|
+
History.create(
|
25
|
+
record: self,
|
26
|
+
changed_data: self.attributes.to_json,
|
27
|
+
user: nil,
|
28
|
+
action: history_action
|
29
|
+
)
|
30
|
+
else
|
31
|
+
|
32
|
+
return if self.previous_changes.empty?
|
33
|
+
History.create(
|
34
|
+
record: self,
|
35
|
+
changed_data: self.previous_changes.to_json,
|
36
|
+
user: nil,
|
37
|
+
action: history_action
|
38
|
+
)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def history_action
|
43
|
+
return 'destroyed' if destroyed?
|
44
|
+
return 'created' if created_at.eql?(updated_at)
|
45
|
+
return 'updated' if updated_at > created_at
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
# Load the has_simple_history methods
|
51
|
+
ActiveSupport.on_load(:active_record) do
|
52
|
+
class ActiveRecord::Base
|
53
|
+
def self.has_simple_history(options = {})
|
54
|
+
include SimpleHistory::Attribute
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
data/lib/simple_history.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: simple_history
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrea Fomera
|
@@ -37,13 +37,22 @@ files:
|
|
37
37
|
- app/assets/config/simple_history_manifest.js
|
38
38
|
- app/assets/stylesheets/simple_history/application.css
|
39
39
|
- app/controllers/simple_history/application_controller.rb
|
40
|
+
- app/controllers/simple_history/histories_controller.rb
|
40
41
|
- app/helpers/simple_history/application_helper.rb
|
41
42
|
- app/jobs/simple_history/application_job.rb
|
42
43
|
- app/mailers/simple_history/application_mailer.rb
|
43
44
|
- app/models/simple_history/application_record.rb
|
45
|
+
- app/models/simple_history/history.rb
|
46
|
+
- app/models/simple_history/simple_history.rb
|
44
47
|
- app/views/layouts/simple_history/application.html.erb
|
48
|
+
- app/views/simple_history/histories/index.html.erb
|
49
|
+
- app/views/simple_history/histories/show.html.erb
|
50
|
+
- app/views/simple_history/shared/_flash.html.erb
|
51
|
+
- app/views/simple_history/shared/_nav.html.erb
|
45
52
|
- config/routes.rb
|
53
|
+
- db/migrate/20230730180547_create_simple_history_histories.rb
|
46
54
|
- lib/simple_history.rb
|
55
|
+
- lib/simple_history/attribute.rb
|
47
56
|
- lib/simple_history/engine.rb
|
48
57
|
- lib/simple_history/version.rb
|
49
58
|
- lib/tasks/simple_history_tasks.rake
|