module Weasel::Auditable

Public Instance Methods

audit() { || ... } click to toggle source
# File lib/weasel/concerns/auditable.rb, line 7
def audit
  begin
    yield
  ensure
    return unless actor.present?

    Weasel::EventsWorker.perform_async(actor.class.name, actor.id, request_data)
  end
end

Private Instance Methods

actor() click to toggle source
# File lib/weasel/concerns/auditable.rb, line 19
def actor
  return current_user if defined?(current_user)
  return current_admin if defined?(current_admin)
end
geo_ip_information() click to toggle source
# File lib/weasel/concerns/auditable.rb, line 43
def geo_ip_information
  info = geo_service.lookup(request.remote_ip)

  info.to_hash
end
geo_service() click to toggle source
# File lib/weasel/concerns/auditable.rb, line 49
def geo_service
  @@maxmind ||= ::MaxMindDB.new( Rails.root.join('tmp', 'GeoLite2-City.mmdb'))
end
request_data() click to toggle source
# File lib/weasel/concerns/auditable.rb, line 24
def request_data
  parameters = if request.respond_to?(:filtered_parameters)
    request.filtered_parameters
  else
    request.params
  end

  rails_action = "#{parameters[:controller]}:#{parameters[:action]}"
  rails_parameters = parameters.except(:controller, :action)

  {
    action: rails_action,
    params: rails_parameters,
    remote_ip: request.remote_ip,
    geo_ip_information: geo_ip_information,
    user_agent: request.user_agent
  }
end