require_dependency 'screening_model' # A ScreenedEmail record represents an email address that is being watched, # typically when creating a new User account. If the email of the signup form # (or some other form) matches a ScreenedEmail record, an action can be # performed based on the action_type. class ScreenedEmail < ActiveRecord::Base include ScreeningModel default_action :block validates :email, presence: true, uniqueness: true def self.block(email, opts={}) find_by_email(email) || create(opts.slice(:action_type, :ip_address).merge({email: email})) end def self.should_block?(email) screened_email = ScreenedEmail.find_by(email: email) screened_email.record_match! if screened_email screened_email && screened_email.action_type == actions[:block] end end # == Schema Information # # Table name: screened_emails # # id :integer not null, primary key # email :string(255) not null # action_type :integer not null # match_count :integer default(0), not null # last_match_at :datetime # created_at :datetime # updated_at :datetime # ip_address :inet # # Indexes # # index_screened_emails_on_email (email) UNIQUE # index_screened_emails_on_last_match_at (last_match_at) #