Class: Spam::SpamVerdictService
- Inherits:
-
Object
- Object
- Spam::SpamVerdictService
- Includes:
- AkismetMethods, SpamConstants
- Defined in:
- app/services/spam/spam_verdict_service.rb
Constant Summary
Constants included from SpamConstants
Spam::SpamConstants::ALLOW, Spam::SpamConstants::BLOCK_USER, Spam::SpamConstants::CONDITIONAL_ALLOW, Spam::SpamConstants::DISALLOW, Spam::SpamConstants::ERROR_TYPE, Spam::SpamConstants::NOOP, Spam::SpamConstants::OVERRIDE_VIA_ALLOW_POSSIBLE_SPAM, Spam::SpamConstants::SUPPORTED_VERDICTS
Instance Method Summary collapse
- #execute ⇒ Object
-
#initialize(user:, target:, options:, context: {}, extra_features: {}) ⇒ SpamVerdictService
constructor
A new instance of SpamVerdictService.
Methods included from AkismetMethods
Constructor Details
#initialize(user:, target:, options:, context: {}, extra_features: {}) ⇒ SpamVerdictService
Returns a new instance of SpamVerdictService.
8 9 10 11 12 13 14 |
# File 'app/services/spam/spam_verdict_service.rb', line 8 def initialize(user:, target:, options:, context: {}, extra_features: {}) @target = target @user = user @options = @context = context @extra_features = extra_features end |
Instance Method Details
#execute ⇒ Object
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
# File 'app/services/spam/spam_verdict_service.rb', line 16 def execute spamcheck_verdict = nil external_spam_check_round_trip_time = Benchmark.realtime do spamcheck_verdict = get_spamcheck_verdict end histogram.observe({ result: spamcheck_verdict.upcase }, external_spam_check_round_trip_time) if spamcheck_verdict = # filter out anything we don't recognise, including nils. valid_verdicts = [spamcheck_verdict, ].compact.select { |r| SUPPORTED_VERDICTS.key?(r) } # Treat nils - such as service unavailable - as ALLOW return ALLOW unless valid_verdicts.any? # Favour the most restrictive verdict final_verdict = valid_verdicts.min_by { |v| SUPPORTED_VERDICTS[v][:priority] } # The target can override the verdict via the `allow_possible_spam` application setting final_verdict = OVERRIDE_VIA_ALLOW_POSSIBLE_SPAM if override_via_allow_possible_spam?(verdict: final_verdict) logger.info( class: self.class.name, akismet_verdict: , spam_check_verdict: spamcheck_verdict, spam_check_rtt: external_spam_check_round_trip_time.real, final_verdict: final_verdict, username: user.username, user_id: user.id, target_type: target.class.to_s, project_id: target.project_id ) final_verdict end |