module Devise::Models::Sqreenable

Sqreen model module, add all necessary behavior to a devise model

Public Class Methods

required_fields(klass) click to toggle source

DB fields that are needed

# File lib/devise_sqreener/model.rb, line 20
def self.required_fields(klass)
  required_fields = %i(sqreened_email)
  return required_fields unless klass.devise_modules.include?(:trackable)
  required_fields + %i(current_sign_in_ip last_sign_in_ip
                       current_sqreened_sign_in_ip
                       last_sqreened_sign_in_ip)
end

Public Instance Methods

current_sqreened_email() click to toggle source

The curren email address lazily sqreened

# File lib/devise_sqreener/model.rb, line 36
def current_sqreened_email
  if email.present?
    @current_sqreened_email ||= self.class.sqreener.sqreen_email(email)
  end
end
current_sqreened_ip_address() click to toggle source

The current ip address lazily sqreened

# File lib/devise_sqreener/model.rb, line 29
def current_sqreened_ip_address
  if current_ip_address.present?
    @current_sqreened_ip ||= self.class.sqreener.sqreen_ip(current_ip_address)
  end
end
inactive_message() click to toggle source

When sign_in was refuse get the correct message

Calls superclass method
# File lib/devise_sqreener/model.rb, line 73
def inactive_message
  sqreen_block_sign_in? ? :forbidden : super
end
sqreen_block_sign_in?() click to toggle source

Should the current sign in be blocked

# File lib/devise_sqreener/model.rb, line 52
def sqreen_block_sign_in?
  oracle = Devise.sqreen_block_sign_in
  return false if oracle.blank? || !oracle.respond_to?(:call)
  oracle.call(current_sqreened_email, current_sqreened_ip_address, self)
end
sqreen_block_sign_up?() click to toggle source

Should the current sign up be blocked used as a on_create validation

# File lib/devise_sqreener/model.rb, line 60
def sqreen_block_sign_up?
  return false unless email_changed?
  oracle = Devise.sqreen_block_sign_up
  return false if oracle.blank? || !oracle.respond_to?(:call)
  if oracle.call(current_sqreened_email,
                 current_sqreened_ip_address, self)
    errors[:base] << I18n.t(:forbidden, :scope => %i(devise registrations))
    return true
  end
  false
end
sqreen_email() click to toggle source

save sqreened email

# File lib/devise_sqreener/model.rb, line 78
def sqreen_email
  return if email.blank? || !email_changed?
  self.sqreened_email = current_sqreened_email
end
update_tracked_fields(request) click to toggle source

Add sqreening behavior to trackable Save last sqreened_ip info

Calls superclass method
# File lib/devise_sqreener/model.rb, line 44
def update_tracked_fields(request)
  return unless self.class.devise_modules.include?(:trackable)
  self.last_sqreened_sign_in_ip = current_sqreened_sign_in_ip
  self.current_sqreened_sign_in_ip = current_sqreened_ip_address
  super(request)
end