noresponse 10.0.11 → 10.0.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. checksums.yaml +4 -4
  2. data/lib/no_response/events.rb +1 -1
  3. data/lib/no_response/models/shared/access.rb +20 -0
  4. data/lib/no_response/models/shared/{profile.rbi → access.rbi} +2 -2
  5. data/lib/no_response/models/shared/attendee.rb +13 -3
  6. data/lib/no_response/models/shared/attendee.rbi +6 -0
  7. data/lib/no_response/models/shared/attendeedecided.rb +89 -0
  8. data/lib/no_response/models/shared/attendeedecided.rbi +44 -0
  9. data/lib/no_response/models/shared/attendeedecidedevent.rb +70 -0
  10. data/lib/no_response/models/shared/attendeedecidedevent.rbi +38 -0
  11. data/lib/no_response/models/shared/attendeeflagged.rb +95 -0
  12. data/lib/no_response/models/shared/attendeeflagged.rbi +44 -0
  13. data/lib/no_response/models/shared/attendeeflaggedevent.rb +70 -0
  14. data/lib/no_response/models/shared/attendeeflaggedevent.rbi +38 -0
  15. data/lib/no_response/models/shared/attendeeflaggedmatchstate.rb +19 -0
  16. data/lib/no_response/models/shared/attendeeflaggedmatchstate.rbi +9 -0
  17. data/lib/no_response/models/shared/attendeereport.rb +25 -7
  18. data/lib/no_response/models/shared/attendeereport.rbi +12 -0
  19. data/lib/no_response/models/shared/findingband.rb +22 -0
  20. data/lib/no_response/models/shared/{attendee_coverage.rbi → findingband.rbi} +2 -2
  21. data/lib/no_response/models/shared/findingcategory.rb +27 -0
  22. data/lib/no_response/models/shared/{screening_platform.rbi → findingcategory.rbi} +2 -2
  23. data/lib/no_response/models/shared/handle.rb +1 -0
  24. data/lib/no_response/models/shared/handleplatform.rb +2 -1
  25. data/lib/no_response/models/shared/mediatype.rb +19 -0
  26. data/lib/no_response/models/shared/{finding.rbi → mediatype.rbi} +2 -2
  27. data/lib/no_response/models/shared/profilematchstate.rb +20 -0
  28. data/lib/no_response/models/shared/profilematchstate.rbi +9 -0
  29. data/lib/no_response/models/shared/screening.rb +23 -3
  30. data/lib/no_response/models/shared/screening.rbi +12 -0
  31. data/lib/no_response/models/shared/screeningcompleted.rb +146 -0
  32. data/lib/no_response/models/shared/screeningcompleted.rbi +74 -0
  33. data/lib/no_response/models/shared/screeningcompletedbyband.rb +52 -0
  34. data/lib/no_response/models/shared/screeningcompletedbyband.rbi +38 -0
  35. data/lib/no_response/models/shared/screeningcompletedevent.rb +70 -0
  36. data/lib/no_response/models/shared/screeningcompletedevent.rbi +38 -0
  37. data/lib/no_response/models/shared/screeningcompletedstatus.rb +17 -0
  38. data/lib/no_response/models/shared/screeningcompletedstatus.rbi +9 -0
  39. data/lib/no_response/models/shared/screeningcoverage.rb +82 -0
  40. data/lib/no_response/models/shared/screeningcoverage.rbi +44 -0
  41. data/lib/no_response/models/shared/screeningfinding.rb +152 -0
  42. data/lib/no_response/models/shared/screeningfinding.rbi +74 -0
  43. data/lib/no_response/models/shared/screeningmatch.rb +50 -0
  44. data/lib/no_response/models/shared/screeningmatch.rbi +20 -0
  45. data/lib/no_response/models/shared/screeningmatchevidence.rb +57 -0
  46. data/lib/no_response/models/shared/screeningmatchevidence.rbi +26 -0
  47. data/lib/no_response/models/shared/screeningmatchevidencekind.rb +25 -0
  48. data/lib/no_response/models/shared/screeningmatchevidencekind.rbi +9 -0
  49. data/lib/no_response/models/shared/screeningmedia.rb +141 -0
  50. data/lib/no_response/models/shared/screeningmedia.rbi +74 -0
  51. data/lib/no_response/models/shared/screeningplatformcoverage.rb +80 -0
  52. data/lib/no_response/models/shared/screeningplatformcoverage.rbi +32 -0
  53. data/lib/no_response/models/shared/screeningplatformcoveragestatus.rb +22 -0
  54. data/lib/no_response/models/shared/screeningplatformcoveragestatus.rbi +9 -0
  55. data/lib/no_response/models/shared/screeningpost.rb +111 -0
  56. data/lib/no_response/models/shared/screeningpost.rbi +62 -0
  57. data/lib/no_response/models/shared/screeningprofile.rb +193 -0
  58. data/lib/no_response/models/shared/screeningprofile.rbi +104 -0
  59. data/lib/no_response/models/shared/screeningrequest.rb +2 -5
  60. data/lib/no_response/models/shared/screeningspend.rb +41 -0
  61. data/lib/no_response/models/shared/screeningspend.rbi +20 -0
  62. data/lib/no_response/models/shared/screeningspendline.rb +57 -0
  63. data/lib/no_response/models/shared/screeningspendline.rbi +26 -0
  64. data/lib/no_response/models/shared/screeningspendlinerole.rb +20 -0
  65. data/lib/no_response/models/shared/screeningspendlinerole.rbi +9 -0
  66. data/lib/no_response/models/shared/screeningstatus.rb +1 -1
  67. data/lib/no_response/models/shared/webhookdeliveryattempt.rb +1 -1
  68. data/lib/no_response/models/shared/webhookreplay.rb +1 -1
  69. data/lib/no_response/models/shared.rb +27 -5
  70. data/lib/no_response/sdkconfiguration.rb +2 -2
  71. data/lib/no_response/webhook_verification.rb +8 -2
  72. metadata +56 -12
  73. data/lib/no_response/models/shared/attendee_coverage.rb +0 -23
  74. data/lib/no_response/models/shared/finding.rb +0 -23
  75. data/lib/no_response/models/shared/profile.rb +0 -23
  76. data/lib/no_response/models/shared/screening_platform.rb +0 -27
  77. data/lib/no_response/models/shared/screeningrequest_platform.rb +0 -24
  78. data/lib/no_response/models/shared/screeningrequest_platform.rbi +0 -9
@@ -0,0 +1,38 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ class NoResponse::Models::Shared::ScreeningCompletedByBand
5
+ extend ::Crystalline::MetadataFields::ClassMethods
6
+ end
7
+
8
+ class NoResponse::Models::Shared::ScreeningCompletedByBand
9
+ def critical
10
+ end
11
+
12
+ def critical=(str_)
13
+ end
14
+
15
+ def high
16
+ end
17
+
18
+ def high=(str_)
19
+ end
20
+
21
+ def moderate
22
+ end
23
+
24
+ def moderate=(str_)
25
+ end
26
+
27
+ def low
28
+ end
29
+
30
+ def low=(str_)
31
+ end
32
+
33
+ def info
34
+ end
35
+
36
+ def info=(str_)
37
+ end
38
+ end
@@ -0,0 +1,70 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ module NoResponse
5
+ module Models
6
+ module Shared
7
+ # The screening.completed event.
8
+ class ScreeningCompletedEvent
9
+ extend T::Sig
10
+ include Crystalline::MetadataFields
11
+
12
+ # The event id, equal to the NR-Webhook-Id header and across redeliveries and every endpoint the event fans out to.
13
+ field :id, ::String, {'format_json': {'letter_case': ::NoResponse::Utils.field_name("id"), required: true}}
14
+ # When the event was created. Equal across redeliveries; the signing timestamp header is per delivery.
15
+ field(
16
+ :created_at,
17
+ ::String,
18
+ {'format_json': {'letter_case': ::NoResponse::Utils.field_name("created_at"), required: true}}
19
+ )
20
+ # A screening of an event finished. It counts only the attendees this screening set out to reach, not who they are: read the roster with GET /v1/workspaces/{workspace_id}/events/{environment}/{event_id}/attendees, filtered by band, to act on them. attendees_screened + partial_coverage = attendees_total, attendees_flagged is the sum of by_band, and no_footprint counts screened attendees with no flag whose accounts were not found. A cancelled screening sends no event.
21
+ field(
22
+ :data,
23
+ Models::Shared::ScreeningCompleted,
24
+ {'format_json': {'letter_case': ::NoResponse::Utils.field_name("data"), required: true}}
25
+ )
26
+ # Always screening.completed.
27
+ field :type, ::String, {'format_json': {'letter_case': ::NoResponse::Utils.field_name("type"), required: true}}
28
+ # Present, and true, only on an event sent by POST /v1/webhooks/{endpoint_id}/test: its data is a fixed example assessment, not one of the workspace's, so a receiver acknowledges it and applies nothing. Real events have no test member.
29
+ field(
30
+ :test,
31
+ Crystalline::Nilable.new(Crystalline::Boolean.new),
32
+ {'format_json': {'letter_case': ::NoResponse::Utils.field_name("test")}}
33
+ )
34
+
35
+ sig {
36
+ params(
37
+ id: ::String,
38
+ created_at: ::String,
39
+ data: Models::Shared::ScreeningCompleted,
40
+ type: ::String,
41
+ test: T.nilable(T::Boolean)
42
+ )
43
+ .void
44
+ }
45
+ def initialize(id:, created_at:, data:, type: "screening.completed", test: nil)
46
+ @id = id
47
+ @created_at = created_at
48
+ @data = data
49
+ unless type == "screening.completed"
50
+ raise ArgumentError, "Invalid value for type"
51
+ end
52
+
53
+ @type = "screening.completed"
54
+ @test = test
55
+ end
56
+
57
+ sig { params(other: T.untyped).returns(T::Boolean) }
58
+ def ==(other)
59
+ return false unless other.is_a?(self.class)
60
+ return false unless @id == other.id
61
+ return false unless @created_at == other.created_at
62
+ return false unless @data == other.data
63
+ return false unless @type == other.type
64
+ return false unless @test == other.test
65
+ true
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,38 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ class NoResponse::Models::Shared::ScreeningCompletedEvent
5
+ extend ::Crystalline::MetadataFields::ClassMethods
6
+ end
7
+
8
+ class NoResponse::Models::Shared::ScreeningCompletedEvent
9
+ def id
10
+ end
11
+
12
+ def id=(str_)
13
+ end
14
+
15
+ def created_at
16
+ end
17
+
18
+ def created_at=(str_)
19
+ end
20
+
21
+ def data
22
+ end
23
+
24
+ def data=(str_)
25
+ end
26
+
27
+ def type
28
+ end
29
+
30
+ def type=(str_)
31
+ end
32
+
33
+ def test
34
+ end
35
+
36
+ def test=(str_)
37
+ end
38
+ end
@@ -0,0 +1,17 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ module NoResponse
5
+ module Models
6
+ module Shared
7
+ # ScreeningCompletedStatus - completed reached every attendee; partial left some not fully covered (partial_coverage); failed covered nobody.
8
+ class ScreeningCompletedStatus < T::Enum
9
+ enums do
10
+ COMPLETED = new("completed")
11
+ PARTIAL = new("partial")
12
+ FAILED = new("failed")
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,9 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ class NoResponse::Models::Shared::ScreeningCompletedStatus
5
+ extend ::Crystalline::MetadataFields::ClassMethods
6
+ end
7
+
8
+ class NoResponse::Models::Shared::ScreeningCompletedStatus
9
+ end
@@ -0,0 +1,82 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ module NoResponse
5
+ module Models
6
+ module Shared
7
+ # The denominator of a screening: accounts found, how many could be read, items read and the period they span, so a clean result is distinct from a person nobody could see.
8
+ class ScreeningCoverage
9
+ extend T::Sig
10
+ include Crystalline::MetadataFields
11
+
12
+ field(
13
+ :accounts_found,
14
+ ::Integer,
15
+ {'format_json': {'letter_case': ::NoResponse::Utils.field_name("accounts_found"), required: true}}
16
+ )
17
+
18
+ field(
19
+ :accounts_accessible,
20
+ ::Integer,
21
+ {'format_json': {'letter_case': ::NoResponse::Utils.field_name("accounts_accessible"), required: true}}
22
+ )
23
+
24
+ field(
25
+ :items_read,
26
+ ::Integer,
27
+ {'format_json': {'letter_case': ::NoResponse::Utils.field_name("items_read"), required: true}}
28
+ )
29
+
30
+ field(
31
+ :platforms,
32
+ Crystalline::Array.new(Models::Shared::ScreeningPlatformCoverage),
33
+ {'format_json': {'letter_case': ::NoResponse::Utils.field_name("platforms"), required: true}}
34
+ )
35
+ # The oldest item read on any platform.
36
+ field(
37
+ :period_from,
38
+ Crystalline::Nilable.new(::String),
39
+ {'format_json': {'letter_case': ::NoResponse::Utils.field_name("period_from")}}
40
+ )
41
+ # The newest item read on any platform.
42
+ field(
43
+ :period_to,
44
+ Crystalline::Nilable.new(::String),
45
+ {'format_json': {'letter_case': ::NoResponse::Utils.field_name("period_to")}}
46
+ )
47
+
48
+ sig {
49
+ params(
50
+ accounts_found: ::Integer,
51
+ accounts_accessible: ::Integer,
52
+ items_read: ::Integer,
53
+ platforms: T::Array[Models::Shared::ScreeningPlatformCoverage],
54
+ period_from: T.nilable(::String),
55
+ period_to: T.nilable(::String)
56
+ )
57
+ .void
58
+ }
59
+ def initialize(accounts_found:, accounts_accessible:, items_read:, platforms:, period_from: nil, period_to: nil)
60
+ @accounts_found = accounts_found
61
+ @accounts_accessible = accounts_accessible
62
+ @items_read = items_read
63
+ @platforms = platforms
64
+ @period_from = period_from
65
+ @period_to = period_to
66
+ end
67
+
68
+ sig { params(other: T.untyped).returns(T::Boolean) }
69
+ def ==(other)
70
+ return false unless other.is_a?(self.class)
71
+ return false unless @accounts_found == other.accounts_found
72
+ return false unless @accounts_accessible == other.accounts_accessible
73
+ return false unless @items_read == other.items_read
74
+ return false unless @platforms == other.platforms
75
+ return false unless @period_from == other.period_from
76
+ return false unless @period_to == other.period_to
77
+ true
78
+ end
79
+ end
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,44 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ class NoResponse::Models::Shared::ScreeningCoverage
5
+ extend ::Crystalline::MetadataFields::ClassMethods
6
+ end
7
+
8
+ class NoResponse::Models::Shared::ScreeningCoverage
9
+ def accounts_found
10
+ end
11
+
12
+ def accounts_found=(str_)
13
+ end
14
+
15
+ def accounts_accessible
16
+ end
17
+
18
+ def accounts_accessible=(str_)
19
+ end
20
+
21
+ def items_read
22
+ end
23
+
24
+ def items_read=(str_)
25
+ end
26
+
27
+ def platforms
28
+ end
29
+
30
+ def platforms=(str_)
31
+ end
32
+
33
+ def period_from
34
+ end
35
+
36
+ def period_from=(str_)
37
+ end
38
+
39
+ def period_to
40
+ end
41
+
42
+ def period_to=(str_)
43
+ end
44
+ end
@@ -0,0 +1,152 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ module NoResponse
5
+ module Models
6
+ module Shared
7
+ # Something the analyser flagged. band is capped by the strongest match among the profiles of its evidence: possible at most moderate, probable at most high. capped_from is the band the analyser gave when the cap lowered it.
8
+ class ScreeningFinding
9
+ extend T::Sig
10
+ include Crystalline::MetadataFields
11
+
12
+ field :id, ::String, {'format_json': {'letter_case': ::NoResponse::Utils.field_name("id"), required: true}}
13
+ # What a finding is about: a direct threat to the principal or the event, intent to harm without a named target, fixation on the principal, a grievance against the host, research into the venue, route or security, weapons tied to any of these, disruption or protest planning toward this event, violent extremist content or identification, prior harassment or stalking of staff or principals, or posting the principal's addresses or movements.
14
+ field(
15
+ :category,
16
+ Models::Shared::FindingCategory,
17
+ {
18
+ 'format_json': {
19
+ 'letter_case': ::NoResponse::Utils.field_name("category"),
20
+ required: true,
21
+ 'decoder': ::NoResponse::Utils.open_enum_from_string(Models::Shared::FindingCategory, false)
22
+ }
23
+ }
24
+ )
25
+ # How severe a finding is, most severe first.
26
+ field(
27
+ :band,
28
+ Models::Shared::FindingBand,
29
+ {
30
+ 'format_json': {
31
+ 'letter_case': ::NoResponse::Utils.field_name("band"),
32
+ required: true,
33
+ 'decoder': ::NoResponse::Utils.open_enum_from_string(Models::Shared::FindingBand, false)
34
+ }
35
+ }
36
+ )
37
+
38
+ field(
39
+ :confidence,
40
+ ::Float,
41
+ {'format_json': {'letter_case': ::NoResponse::Utils.field_name("confidence"), required: true}}
42
+ )
43
+
44
+ field(
45
+ :rationale,
46
+ ::String,
47
+ {'format_json': {'letter_case': ::NoResponse::Utils.field_name("rationale"), required: true}}
48
+ )
49
+ # The posts and media that support the finding.
50
+ field(
51
+ :evidence,
52
+ Crystalline::Array.new(::String),
53
+ {'format_json': {'letter_case': ::NoResponse::Utils.field_name("evidence"), required: true}}
54
+ )
55
+ # The resolver, collector or analyser that produced a record, by its catalogue name.
56
+ field(
57
+ :analyser,
58
+ ::String,
59
+ {'format_json': {'letter_case': ::NoResponse::Utils.field_name("analyser"), required: true}}
60
+ )
61
+
62
+ field(
63
+ :model,
64
+ ::String,
65
+ {'format_json': {'letter_case': ::NoResponse::Utils.field_name("model"), required: true}}
66
+ )
67
+ # What the analysis cost, in US cents.
68
+ field(
69
+ :spend_minor,
70
+ ::Integer,
71
+ {'format_json': {'letter_case': ::NoResponse::Utils.field_name("spend_minor"), required: true}}
72
+ )
73
+
74
+ field(
75
+ :created_at,
76
+ ::String,
77
+ {'format_json': {'letter_case': ::NoResponse::Utils.field_name("created_at"), required: true}}
78
+ )
79
+ # How severe a finding is, most severe first.
80
+ field(
81
+ :capped_from,
82
+ Crystalline::Nilable.new(Models::Shared::FindingBand),
83
+ {
84
+ 'format_json': {
85
+ 'letter_case': ::NoResponse::Utils.field_name("capped_from"),
86
+ 'decoder': ::NoResponse::Utils.open_enum_from_string(Models::Shared::FindingBand, true)
87
+ }
88
+ }
89
+ )
90
+
91
+ sig {
92
+ params(
93
+ id: ::String,
94
+ category: Models::Shared::FindingCategory,
95
+ band: Models::Shared::FindingBand,
96
+ confidence: ::Float,
97
+ rationale: ::String,
98
+ evidence: T::Array[::String],
99
+ analyser: ::String,
100
+ model: ::String,
101
+ spend_minor: ::Integer,
102
+ created_at: ::String,
103
+ capped_from: T.nilable(Models::Shared::FindingBand)
104
+ )
105
+ .void
106
+ }
107
+ def initialize(
108
+ id:,
109
+ category:,
110
+ band:,
111
+ confidence:,
112
+ rationale:,
113
+ evidence:,
114
+ analyser:,
115
+ model:,
116
+ spend_minor:,
117
+ created_at:,
118
+ capped_from: nil
119
+ )
120
+ @id = id
121
+ @category = category
122
+ @band = band
123
+ @confidence = confidence
124
+ @rationale = rationale
125
+ @evidence = evidence
126
+ @analyser = analyser
127
+ @model = model
128
+ @spend_minor = spend_minor
129
+ @created_at = created_at
130
+ @capped_from = capped_from
131
+ end
132
+
133
+ sig { params(other: T.untyped).returns(T::Boolean) }
134
+ def ==(other)
135
+ return false unless other.is_a?(self.class)
136
+ return false unless @id == other.id
137
+ return false unless @category == other.category
138
+ return false unless @band == other.band
139
+ return false unless @confidence == other.confidence
140
+ return false unless @rationale == other.rationale
141
+ return false unless @evidence == other.evidence
142
+ return false unless @analyser == other.analyser
143
+ return false unless @model == other.model
144
+ return false unless @spend_minor == other.spend_minor
145
+ return false unless @created_at == other.created_at
146
+ return false unless @capped_from == other.capped_from
147
+ true
148
+ end
149
+ end
150
+ end
151
+ end
152
+ end
@@ -0,0 +1,74 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ class NoResponse::Models::Shared::ScreeningFinding
5
+ extend ::Crystalline::MetadataFields::ClassMethods
6
+ end
7
+
8
+ class NoResponse::Models::Shared::ScreeningFinding
9
+ def id
10
+ end
11
+
12
+ def id=(str_)
13
+ end
14
+
15
+ def category
16
+ end
17
+
18
+ def category=(str_)
19
+ end
20
+
21
+ def band
22
+ end
23
+
24
+ def band=(str_)
25
+ end
26
+
27
+ def confidence
28
+ end
29
+
30
+ def confidence=(str_)
31
+ end
32
+
33
+ def rationale
34
+ end
35
+
36
+ def rationale=(str_)
37
+ end
38
+
39
+ def evidence
40
+ end
41
+
42
+ def evidence=(str_)
43
+ end
44
+
45
+ def analyser
46
+ end
47
+
48
+ def analyser=(str_)
49
+ end
50
+
51
+ def model
52
+ end
53
+
54
+ def model=(str_)
55
+ end
56
+
57
+ def spend_minor
58
+ end
59
+
60
+ def spend_minor=(str_)
61
+ end
62
+
63
+ def created_at
64
+ end
65
+
66
+ def created_at=(str_)
67
+ end
68
+
69
+ def capped_from
70
+ end
71
+
72
+ def capped_from=(str_)
73
+ end
74
+ end
@@ -0,0 +1,50 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ module NoResponse
5
+ module Models
6
+ module Shared
7
+ # How a profile was matched to the attendee: the state its evidence earns, and the evidence.
8
+ class ScreeningMatch
9
+ extend T::Sig
10
+ include Crystalline::MetadataFields
11
+
12
+ # How sure the screening is that a profile is the attendee's, from its evidence: confirmed is two or more hard identifiers (email, phone, a supplied handle, or a fact an existing source returned), probable is one identifier beyond the name, possible is the name alone.
13
+ field(
14
+ :state,
15
+ Models::Shared::ProfileMatchState,
16
+ {
17
+ 'format_json': {
18
+ 'letter_case': ::NoResponse::Utils.field_name("state"),
19
+ required: true,
20
+ 'decoder': ::NoResponse::Utils.open_enum_from_string(Models::Shared::ProfileMatchState, false)
21
+ }
22
+ }
23
+ )
24
+
25
+ field(
26
+ :evidence,
27
+ Crystalline::Array.new(Models::Shared::ScreeningMatchEvidence),
28
+ {'format_json': {'letter_case': ::NoResponse::Utils.field_name("evidence"), required: true}}
29
+ )
30
+
31
+ sig {
32
+ params(state: Models::Shared::ProfileMatchState, evidence: T::Array[Models::Shared::ScreeningMatchEvidence])
33
+ .void
34
+ }
35
+ def initialize(state:, evidence:)
36
+ @state = state
37
+ @evidence = evidence
38
+ end
39
+
40
+ sig { params(other: T.untyped).returns(T::Boolean) }
41
+ def ==(other)
42
+ return false unless other.is_a?(self.class)
43
+ return false unless @state == other.state
44
+ return false unless @evidence == other.evidence
45
+ true
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,20 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ class NoResponse::Models::Shared::ScreeningMatch
5
+ extend ::Crystalline::MetadataFields::ClassMethods
6
+ end
7
+
8
+ class NoResponse::Models::Shared::ScreeningMatch
9
+ def state
10
+ end
11
+
12
+ def state=(str_)
13
+ end
14
+
15
+ def evidence
16
+ end
17
+
18
+ def evidence=(str_)
19
+ end
20
+ end
@@ -0,0 +1,57 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ module NoResponse
5
+ module Models
6
+ module Shared
7
+ # One identifier that ties a profile to the attendee.
8
+ class ScreeningMatchEvidence
9
+ extend T::Sig
10
+ include Crystalline::MetadataFields
11
+
12
+ # What matched. email, phone, supplied_handle and source_fact are hard identifiers; company, city and school are soft.
13
+ field(
14
+ :kind,
15
+ Models::Shared::ScreeningMatchEvidenceKind,
16
+ {
17
+ 'format_json': {
18
+ 'letter_case': ::NoResponse::Utils.field_name("kind"),
19
+ required: true,
20
+ 'decoder': ::NoResponse::Utils.open_enum_from_string(Models::Shared::ScreeningMatchEvidenceKind, false)
21
+ }
22
+ }
23
+ )
24
+ # The resolver, collector or analyser that produced a record, by its catalogue name.
25
+ field(
26
+ :resolver,
27
+ ::String,
28
+ {'format_json': {'letter_case': ::NoResponse::Utils.field_name("resolver"), required: true}}
29
+ )
30
+ # Where the match was seen, such as the profile field that carried it.
31
+ field(
32
+ :detail,
33
+ Crystalline::Nilable.new(::String),
34
+ {'format_json': {'letter_case': ::NoResponse::Utils.field_name("detail")}}
35
+ )
36
+
37
+ sig {
38
+ params(kind: Models::Shared::ScreeningMatchEvidenceKind, resolver: ::String, detail: T.nilable(::String)).void
39
+ }
40
+ def initialize(kind:, resolver:, detail: nil)
41
+ @kind = kind
42
+ @resolver = resolver
43
+ @detail = detail
44
+ end
45
+
46
+ sig { params(other: T.untyped).returns(T::Boolean) }
47
+ def ==(other)
48
+ return false unless other.is_a?(self.class)
49
+ return false unless @kind == other.kind
50
+ return false unless @resolver == other.resolver
51
+ return false unless @detail == other.detail
52
+ true
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,26 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ class NoResponse::Models::Shared::ScreeningMatchEvidence
5
+ extend ::Crystalline::MetadataFields::ClassMethods
6
+ end
7
+
8
+ class NoResponse::Models::Shared::ScreeningMatchEvidence
9
+ def kind
10
+ end
11
+
12
+ def kind=(str_)
13
+ end
14
+
15
+ def resolver
16
+ end
17
+
18
+ def resolver=(str_)
19
+ end
20
+
21
+ def detail
22
+ end
23
+
24
+ def detail=(str_)
25
+ end
26
+ end