Module: AgendavPlugin

Includes:
Plugin
Included in:
AgendavMv, AgendavRm
Defined in:
lib/common/agendav_plugin.rb

Overview

Code that all Agendav plugins (AgendavPrune, AgendavRm, AgendavMv) share.

Instance Method Summary collapse

Methods included from Plugin

#describe, #describe_domain, #describe_user, #domain_exists, #list_domains, #list_domains_users, #user_exists

Instance Method Details

#count_sharesFixnum

Count the number of rows in the “shares” table. Used only for testing.

Returns:

  • (Fixnum)

    the number of rows in the “shares” table.



61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/common/agendav_plugin.rb', line 61

def count_shares()
  count = nil
  connection = PG::Connection.new(@db_hash)

  sql_query  = 'SELECT count(*) FROM shares;'
  begin
    connection.sync_exec(sql_query) do |result|
      count = result.getvalue(0,0).to_i()
    end
  ensure
    # Make sure the connection gets closed even if the query explodes.
    connection.close()
  end

  return count
end

#initialize(cfg) ⇒ Object

Initialize this Agendav Plugin with values in cfg.

Parameters:



16
17
18
19
20
21
22
23
24
# File 'lib/common/agendav_plugin.rb', line 16

def initialize(cfg)
  @db_hash = {
    :host     => cfg.agendav_dbhost,
    :port     => cfg.agendav_dbport,
    :options  => cfg.agendav_dbopts,
    :dbname   => cfg.agendav_dbname,
    :user     => cfg.agendav_dbuser,
    :password => cfg.agendav_dbpass }
end

#list_usersArray<User>

Return a list of Agendav users.

Returns:

  • (Array<User>)

    a list of users contained in the Agendav database.



32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/common/agendav_plugin.rb', line 32

def list_users()
  users = []

  connection = PG::Connection.new(@db_hash)

  # There are also "owner" and "with" fields in the "shares" table,
  # but they contains principal URLs and not a bare username. Thus
  # their format depends on the CalDAV server configuration, and
  # isn't predictable.
  sql_query  = 'SELECT username FROM prefs;'

  begin
    connection.sync_exec(sql_query) do |result|
      users = result.field_values('username')
    end
  ensure
    # Make sure the connection gets closed even if the query explodes.
    connection.close()
  end

  return users.map{ |u| User.new(u) }
end