Class: Libertree::Model::ContactList

Inherits:
Object
  • Object
show all
Defined in:
lib/libertree/model/contact-list.rb

Instance Method Summary collapse

Instance Method Details

#<<(member) ⇒ Object



47
48
49
50
51
52
53
54
55
56
57
# File 'lib/libertree/model/contact-list.rb', line 47

def <<(member)
  # refuse to add anything that's not a Member
  return  unless member.is_a? Member

  Libertree::DB.dbh.transaction do
    unless self.member_ids.include?(member.id)
      Libertree::DB.dbh[:contact_lists_members].
        insert(contact_list_id: self.id, member_id: member.id)
    end
  end
end

#accountObject



4
5
6
# File 'lib/libertree/model/contact-list.rb', line 4

def 
  @account ||= Account[self.]
end

#delete_cascadeObject



43
44
45
# File 'lib/libertree/model/contact-list.rb', line 43

def delete_cascade
  DB.dbh[ "SELECT delete_cascade_contact_list(?)", self.id ].get
end

#member_idsObject



26
27
28
29
30
31
32
# File 'lib/libertree/model/contact-list.rb', line 26

def member_ids
  Libertree::DB.dbh[:contact_lists_members].
    select(:member_id).
    where(:contact_list_id => self.id).
    all.
    flat_map(&:values)
end

#membersObject



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# File 'lib/libertree/model/contact-list.rb', line 8

def members
  return @members   if @members

  @members = Member.s(
    %{
      SELECT
        m.*
      FROM
          contact_lists_members clm
        , members m
      WHERE
        clm.contact_list_id = ?
        AND m.id = clm.member_id
    },
    self.id
  )
end

#members=(arg) ⇒ Object



34
35
36
37
38
39
40
41
# File 'lib/libertree/model/contact-list.rb', line 34

def members=(arg)
  DB.dbh.transaction do
    DB.dbh[ "DELETE FROM contact_lists_members WHERE contact_list_id = ?", self.id ].get
    Array(arg).each do |member_id_s|
      DB.dbh[ "INSERT INTO contact_lists_members ( contact_list_id, member_id ) VALUES ( ?, ? )", self.id, member_id_s.to_i ].get
    end
  end
end

#refresh_riversObject

refresh any river containing a reference to this contact list



60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/libertree/model/contact-list.rb', line 60

def refresh_rivers
  rivers = .rivers.select do |r|
    vals = r.parsed_query['contact-list'].values.flatten(1)
    ! vals.empty? && vals.map(&:first).include?(self.id)
  end

  # refresh rivers in background jobs
  rivers.each do |river|
    if ! river.appended_to_all
      Libertree::Model::Job.create(
        task: 'river:refresh',
        params: {
          'river_id' => river.id,
        }.to_json
      )
    end
  end
end