Class: Dorsale::CustomerVault::Person
- Inherits:
-
ApplicationRecord
- Object
- ActiveRecord::Base
- ApplicationRecord
- Dorsale::CustomerVault::Person
- Extended by:
- Forwardable
- Includes:
- Agilibox::Search, Users::Avatar
- Defined in:
- app/models/dorsale/customer_vault/person.rb
Direct Known Subclasses
Class Method Summary collapse
Instance Method Summary collapse
- #corporation? ⇒ Boolean
- #destroy_links ⇒ Object
- #email=(incoming_email) ⇒ Object
- #individual? ⇒ Boolean
- #links ⇒ Object
- #person_type ⇒ Object
- #secondary_emails_str ⇒ Object
- #secondary_emails_str=(emails) ⇒ Object
- #tags_on(*args) ⇒ Object
- #taken_emails ⇒ Object
- #validate_taken_emails ⇒ Object
- #verify_class ⇒ Object
Class Method Details
.policy_class ⇒ Object
8 9 10 |
# File 'app/models/dorsale/customer_vault/person.rb', line 8 def self.policy_class Dorsale::CustomerVault::PersonPolicy end |
Instance Method Details
#corporation? ⇒ Boolean
96 97 98 |
# File 'app/models/dorsale/customer_vault/person.rb', line 96 def corporation? person_type == :corporation end |
#destroy_links ⇒ Object
124 125 126 |
# File 'app/models/dorsale/customer_vault/person.rb', line 124 def destroy_links links.each(&:destroy!) end |
#email=(incoming_email) ⇒ Object
80 81 82 |
# File 'app/models/dorsale/customer_vault/person.rb', line 80 def email=(incoming_email) super(incoming_email.to_s.strip.presence) end |
#individual? ⇒ Boolean
100 101 102 |
# File 'app/models/dorsale/customer_vault/person.rb', line 100 def individual? person_type == :individual end |
#links ⇒ Object
108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 |
# File 'app/models/dorsale/customer_vault/person.rb', line 108 def links a = ::Dorsale::CustomerVault::Link .where(alice_id: id) .preload(:alice => :taggings, :bob => :taggings) .to_a .each { |l| l.person = l.alice; l.other_person = l.bob } b = ::Dorsale::CustomerVault::Link .where(bob_id: id) .preload(:alice => :taggings, :bob => :taggings) .to_a .each { |l| l.person = l.bob; l.other_person = l.alice } return a + b end |
#person_type ⇒ Object
92 93 94 |
# File 'app/models/dorsale/customer_vault/person.rb', line 92 def person_type self.class.to_s.demodulize.downcase.to_sym end |
#secondary_emails_str ⇒ Object
84 85 86 |
# File 'app/models/dorsale/customer_vault/person.rb', line 84 def secondary_emails_str secondary_emails.join("\n") end |
#secondary_emails_str=(emails) ⇒ Object
88 89 90 |
# File 'app/models/dorsale/customer_vault/person.rb', line 88 def secondary_emails_str=(emails) self.secondary_emails = emails.strip.split end |
#tags_on(*args) ⇒ Object
104 105 106 |
# File 'app/models/dorsale/customer_vault/person.rb', line 104 def (*args) super(*args).order(:name) end |
#taken_emails ⇒ Object
56 57 58 59 60 61 62 63 |
# File 'app/models/dorsale/customer_vault/person.rb', line 56 def taken_emails taken_emails = {} ([email] + secondary_emails).select(&:present?).each do |e| person = Dorsale::CustomerVault::Person.where.not(id: id).having_email(e).first taken_emails[e] = person if person.present? end taken_emails end |
#validate_taken_emails ⇒ Object
67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'app/models/dorsale/customer_vault/person.rb', line 67 def validate_taken_emails return if taken_emails.empty? if taken_emails.key?(email) errors.add(:email, :taken) end if (taken_emails.keys & secondary_emails).any? errors.add(:secondary_emails, :taken) errors.add(:secondary_emails_str, :taken) end end |
#verify_class ⇒ Object
14 15 16 17 18 19 |
# File 'app/models/dorsale/customer_vault/person.rb', line 14 def verify_class if self.class == ::Dorsale::CustomerVault::Person # self.abstract_class does not work with STI raise "Cannot directly instantiate Person class" end end |