Sha256: b41b04a3cc87f782989ab22295cbca24ea475895b1b3df45cc8a9b8de498bc15

Contents?: true

Size: 1.55 KB

Versions: 1

Compression:

Stored size: 1.55 KB

Contents

class Persona::Person < Persona::Model
  extend EnumerateIt

  self.abstract_class = true

  has_enumeration_for :personable_type, create_helpers: true, create_scopes: true

  has_paper_trail

  belongs_to :personable, polymorphic: true, autosave: true

  has_one :address, -> { where(correspondence: false) }, as: :addressable, class_name: '::Address', dependent: :destroy
  has_one :correspondence_address, -> { where(correspondence: true) }, as: :addressable, class_name: '::Address', dependent: :destroy

  accepts_nested_attributes_for :address, reject_if: :all_blank
  accepts_nested_attributes_for :correspondence_address, reject_if: :all_blank

  before_save :set_cpf_cnpj
  before_save :normalize_name!

  validates :name, :personable, presence: true
  validates :personable, associated: true, allow_blank: true
  validates :email, mail: true, allow_blank: true
  validates :phone, :fax, mask: '(99) 9999-9999', allow_blank: true
  validates :mobile, mask: '(99) 99999-9999', allow_blank: true

  def cpf
    personable.cpf if personable.respond_to?(:cpf)
  end

  def cnpj
    personable.cnpj if personable.respond_to?(:cnpj)
  end

  def state_registration
    personable.state_registration if personable.respond_to?(:state_registration)
  end

  def responsible
    personable.responsible if personable.respond_to?(:responsible)
  end

  def to_s
    name
  end

  private

  def set_cpf_cnpj
    self.cpf_cnpj = personable.respond_to?(:cpf) ? cpf : cnpj
  end

  def normalize_name!
    return unless name
    self.normalized_name = I18n.transliterate(name).downcase
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
unico-training-7.8.0 app/models/persona/person.rb