Class: Moderate::Filters::Base

Inherits:
Object
  • Object
show all
Defined in:
lib/moderate/filters/base.rb

Direct Known Subclasses

Wordlist

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.async?Boolean

Is this adapter background-only? Default ‘false` — the built-in deterministic adapters run inline. Override with `def self.async? = true` in an adapter whose `classify` does blocking I/O (a network moderation API), so the gem routes it through `Moderate::ClassifyJob` in :flag mode and forbids it in :block mode.

Returns:

  • (Boolean)


64
65
66
# File 'lib/moderate/filters/base.rb', line 64

def async?
  false
end

.classify(value) ⇒ Object

The class-level entry point the registry resolution path calls. Spins up a per-call instance so subclasses can keep per-classification state in instance vars without any thread-safety worry (a new instance per call).



55
56
57
# File 'lib/moderate/filters/base.rb', line 55

def classify(value)
  new.classify(value)
end

.synchronous?Boolean

The predicate the spine’s ‘Configuration#validate_block_mode_adapter!` actually reads. Defined in terms of `async?` so there’s a single source of truth: an async adapter is, by definition, not synchronous.

Returns:

  • (Boolean)


71
72
73
# File 'lib/moderate/filters/base.rb', line 71

def synchronous?
  !async?
end

Instance Method Details

#classify(_value) ⇒ Object

Subclasses MUST implement ‘#classify(value) -> Moderate::Result`. We raise a clear NotImplementedError rather than silently allowing nil, so a half-built adapter fails loudly in development instead of mysteriously “allowing” everything in production.

Raises:

  • (NotImplementedError)


80
81
82
# File 'lib/moderate/filters/base.rb', line 80

def classify(_value)
  raise NotImplementedError, "#{self.class} must implement #classify(value) and return a Moderate::Result"
end