module Shamu::Auditing::Support
Add auditing support to a {Services::Servie}.
Public Instance Methods
with_partial_request( *args ) { |request, transaction| ... }
click to toggle source
Override {Shamu::Services::RequestSupport#with_partial_request} and to yield a {Transaction} as an additional argument to automatically {#audit_request audit the request}.
Calls superclass method
Shamu::Services::RequestSupport#with_partial_request
# File lib/shamu/auditing/support.rb, line 28 def with_partial_request( *args, &block ) super( *args ) do |request| audit_request request do |transaction| yield request, transaction end end end
Private Instance Methods
audit_request( request, action: :smart ) { |transaction| ... }
click to toggle source
@!visibility public
Audit the requested changes and report the request to the {#auditing_service}.
@param [Services::Request] request the coerced request params. @return (see Shamu::Services::RequestSupport#with_request
) @yield (transaction) @yieldparam [Transaction] transaction the audit transaction. Most fields
will be populated automatically from the request but the block should call {Transaction#append_entity} to include any parent entities in the entity path.
@yieldreturn [Services::Result]
# File lib/shamu/auditing/support.rb, line 54 def audit_request( request, action: :smart, &block ) # rubocop:disable Metrics/PerceivedComplexity transaction = Transaction.new \ user_id_chain: auditing_security_principal.user_id_chain, changes: request.to_attributes( only: request.assigned_attributes ), action: audit_request_action( request, action ) result = yield transaction if block_given? result = Services::Result.coerce( result, request: request ) if result.valid? if result.entity transaction.append_entity result.entity elsif !transaction.entities? && request.respond_to?( :id ) && defined? entity_class transaction.append_entity [ entity_class, request.id ] end auditing_service.commit( transaction ) end result end
audit_request_action( request, type )
click to toggle source
# File lib/shamu/auditing/support.rb, line 82 def audit_request_action( request, type ) return type unless type == :smart request.class.name.demodulize.sub( "Request", "" ).underscore end
auditing_security_principal()
click to toggle source
# File lib/shamu/auditing/support.rb, line 75 def auditing_security_principal return @auditing_security_principal if defined? @auditing_security_principal @auditing_security_principal = security_principal if defined? security_principal @auditing_security_principal ||= scorpion.fetch Security::Principal end