Class: Dorsale::CustomerVault::Person

Inherits:
ApplicationRecord show all
Extended by:
Forwardable
Includes:
Agilibox::Search, Users::Avatar
Defined in:
app/models/dorsale/customer_vault/person.rb

Direct Known Subclasses

Corporation, Individual

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from ApplicationRecord

last_created

Class Method Details

.policy_classObject



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

Returns:

  • (Boolean)


45
46
47
# File 'app/models/dorsale/customer_vault/person.rb', line 45

def corporation?
  person_type == :corporation
end


71
72
73
# File 'app/models/dorsale/customer_vault/person.rb', line 71

def destroy_links
  links.each(&:destroy!)
end

#individual?Boolean

Returns:

  • (Boolean)


49
50
51
# File 'app/models/dorsale/customer_vault/person.rb', line 49

def individual?
  person_type == :individual
end


57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'app/models/dorsale/customer_vault/person.rb', line 57

def links
  a = ::Dorsale::CustomerVault::Link
    .where(alice_id: id)
    .preload(:alice => :taggings, :bob => :taggings)
    .each { |l| l.person = l.alice ; l.other_person = l.bob }

  b = ::Dorsale::CustomerVault::Link
    .where(bob_id: id)
    .preload(:alice => :taggings, :bob => :taggings)
    .each { |l| l.person = l.bob ; l.other_person = l.alice }

  return a + b
end

#person_typeObject



41
42
43
# File 'app/models/dorsale/customer_vault/person.rb', line 41

def person_type
  self.class.to_s.demodulize.downcase.to_sym
end

#receive_comment_notification(comment, action) ⇒ Object



75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# File 'app/models/dorsale/customer_vault/person.rb', line 75

def receive_comment_notification(comment, action)
  scope = Pundit.policy_scope!(comment.author, ::Dorsale::CustomerVault::Event)

  if action == :create
    scope.create!(
      :author  => comment.author,
      :person  => self,
      :comment => comment,
      :action  => "comment",
    )
  end

  if action == :delete
    scope.where(comment: comment).destroy_all
  end
end

#tags_on(*args) ⇒ Object



53
54
55
# File 'app/models/dorsale/customer_vault/person.rb', line 53

def tags_on(*args)
  super(*args).order(:name)
end

#verify_classObject



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