Class: Textus::AuditLog
- Inherits:
-
Object
- Object
- Textus::AuditLog
- Defined in:
- lib/textus/audit_log.rb
Instance Method Summary collapse
- #append(role:, verb:, key:, etag_before:, etag_after:, extras: nil) ⇒ Object
-
#initialize(root) ⇒ AuditLog
constructor
A new instance of AuditLog.
- #last_writer_for(key) ⇒ Object
Constructor Details
Instance Method Details
#append(role:, verb:, key:, etag_before:, etag_after:, extras: nil) ⇒ Object
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/textus/audit_log.rb', line 25 def append(role:, verb:, key:, etag_before:, etag_after:, extras: nil) row = { "ts" => Time.now.utc.iso8601, "role" => role, "verb" => verb, "key" => key, "etag_before" => etag_before, "etag_after" => etag_after, } if extras.is_a?(Hash) && !extras.empty? extras = extras.dup %w[from_key to_key uid].each do |k| row[k] = extras.delete(k) if extras.key?(k) end row["extras"] = extras unless extras.empty? end File.open(@path, File::WRONLY | File::APPEND | File::CREAT, 0o644) do |f| f.flock(File::LOCK_EX) f.write(JSON.generate(row) + "\n") end end |
#last_writer_for(key) ⇒ Object
10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
# File 'lib/textus/audit_log.rb', line 10 def last_writer_for(key) return nil unless File.exist?(@path) last_role = nil File.foreach(@path) do |line| parsed = parse_row(line.chomp) next unless parsed next unless parsed["key"] == key next unless %w[put delete].include?(parsed["verb"]) last_role = parsed["role"] end last_role end |