Commit de1e0f89edbb761610eae84a0280352357b379c7

Authored by Chris Saunders
1 parent 97b3ef8b
Exists in master and in 1 other branch production

Rename md5 to legacy fingerprint

app/models/fingerprints/legacy_fingerprint.rb 0 → 100644
... ... @@ -0,0 +1,20 @@
  1 +require 'digest/md5'
  2 +
  3 +class LegacyFingerprint < Fingerprint
  4 + def to_s
  5 + Digest::MD5.hexdigest(fingerprint_source)
  6 + end
  7 +
  8 + def fingerprint_source
  9 + location['method'] &&= sanitized_method_signature
  10 + end
  11 +
  12 + private
  13 + def sanitized_method_signature
  14 + location['method'].gsub(/[0-9]+|FRAGMENT/, '#').gsub(/_+#/, '_#')
  15 + end
  16 +
  17 + def location
  18 + notice.backtrace.lines.first
  19 + end
  20 +end
... ...
app/models/fingerprints/md5_fingerprint.rb
... ... @@ -1,20 +0,0 @@
1   -require 'digest/md5'
2   -
3   -class MD5Fingerprint < Fingerprint
4   - def to_s
5   - Digest::MD5.hexdigest(fingerprint_source)
6   - end
7   -
8   - def fingerprint_source
9   - location['method'] &&= sanitized_method_signature
10   - end
11   -
12   - private
13   - def sanitized_method_signature
14   - location['method'].gsub(/[0-9]+|FRAGMENT/, '#').gsub(/_+#/, '_#')
15   - end
16   -
17   - def location
18   - notice.backtrace.lines.first
19   - end
20   -end
spec/models/fingerprints/legacy_fingerprint_spec.rb 0 → 100644
... ... @@ -0,0 +1,43 @@
  1 +require 'spec_helper'
  2 +
  3 +describe LegacyFingerprint do
  4 + context 'being created' do
  5 + let(:backtrace) do
  6 + Backtrace.create(:raw => [
  7 + {
  8 + "number"=>"17",
  9 + "file"=>"[GEM_ROOT]/gems/activesupport/lib/active_support/callbacks.rb",
  10 + "method"=>"_run__2497084960985961383__process_action__2062871603614456254__callbacks"
  11 + }
  12 + ])
  13 + end
  14 + let(:notice1) { Fabricate.build(:notice, :backtrace => backtrace) }
  15 + let(:notice2) { Fabricate.build(:notice, :backtrace => backtrace_2) }
  16 +
  17 + context "with same backtrace" do
  18 + let(:backtrace_2) do
  19 + backtrace
  20 + backtrace.lines.last.method = '_run__FRAGMENT__process_action__FRAGMENT__callbacks'
  21 + backtrace.save
  22 + backtrace
  23 + end
  24 +
  25 + it "normalizes the fingerprint of generated methods" do
  26 + expect(LegacyFingerprint.generate(notice1, "api key")).to eql LegacyFingerprint.generate(notice2, "api key")
  27 + end
  28 + end
  29 +
  30 + context "with same backtrace where FRAGMENT has not been extracted" do
  31 + let(:backtrace_2) do
  32 + backtrace
  33 + backtrace.lines.last.method = '_run__998857585768765__process_action__1231231312321313__callbacks'
  34 + backtrace.save
  35 + backtrace
  36 + end
  37 +
  38 + it "normalizes the fingerprint of generated methods" do
  39 + expect(LegacyFingerprint.generate(notice1, "api key")).to eql LegacyFingerprint.generate(notice2, "api key")
  40 + end
  41 + end
  42 + end
  43 +end
... ...
spec/models/fingerprints/md5_fingerprint_spec.rb
... ... @@ -1,43 +0,0 @@
1   -require 'spec_helper'
2   -
3   -describe MD5Fingerprint do
4   - context 'being created' do
5   - let(:backtrace) do
6   - Backtrace.create(:raw => [
7   - {
8   - "number"=>"17",
9   - "file"=>"[GEM_ROOT]/gems/activesupport/lib/active_support/callbacks.rb",
10   - "method"=>"_run__2497084960985961383__process_action__2062871603614456254__callbacks"
11   - }
12   - ])
13   - end
14   - let(:notice1) { Fabricate.build(:notice, :backtrace => backtrace) }
15   - let(:notice2) { Fabricate.build(:notice, :backtrace => backtrace_2) }
16   -
17   - context "with same backtrace" do
18   - let(:backtrace_2) do
19   - backtrace
20   - backtrace.lines.last.method = '_run__FRAGMENT__process_action__FRAGMENT__callbacks'
21   - backtrace.save
22   - backtrace
23   - end
24   -
25   - it "normalizes the fingerprint of generated methods" do
26   - expect(MD5Fingerprint.generate(notice1, "api key")).to eql MD5Fingerprint.generate(notice2, "api key")
27   - end
28   - end
29   -
30   - context "with same backtrace where FRAGMENT has not been extracted" do
31   - let(:backtrace_2) do
32   - backtrace
33   - backtrace.lines.last.method = '_run__998857585768765__process_action__1231231312321313__callbacks'
34   - backtrace.save
35   - backtrace
36   - end
37   -
38   - it "normalizes the fingerprint of generated methods" do
39   - expect(MD5Fingerprint.generate(notice1, "api key")).to eql MD5Fingerprint.generate(notice2, "api key")
40   - end
41   - end
42   - end
43   -end