summaryrefslogtreecommitdiff
path: root/app/models/node_action.rb
blob: f32b5b7555f8efc8a64135515913e3de3d1d1bdf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
class NodeAction < ApplicationRecord
  belongs_to :node, optional: true
  belongs_to :page, optional: true
  belongs_to :user, optional: true

  validates :action, presence: true
  validates :occurred_at, presence: true

  def self.record!(node:, action:, user: nil, page: nil, locale: nil, **extra)
    create!(
      :node        => node,
      :page        => page,
      :user        => user,
      :action      => action,
      :locale      => locale,
      :occurred_at => Time.now,
      :metadata    => {
        "username"                 => user&.login,
        "human_readable_node_name" => Globalize.with_locale(I18n.default_locale) {
                                        node&.head&.title || node&.draft&.title
                                      },
      }.merge(extra.stringify_keys)
   )
  end

  def actor_name
    metadata["username"] || "unknown"
  end

  def subject_name
    metadata["human_readable_node_name"] || node&.unique_name || "deleted node"
  end
end