Choosing the Right Audit Trail Approach in Ruby