module AgendavPlugin

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

Public Class Methods

new(cfg) click to toggle source

Initialize this Agendav {Plugin} with values in cfg.

@param cfg [Configuration] the configuration for this plugin.

# 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,
    :tty      => cfg.agendav_dbtty,
    :dbname   => cfg.agendav_dbname,
    :user     => cfg.agendav_dbuser,
    :password => cfg.agendav_dbpass }
end

Public Instance Methods

count_shares() click to toggle source

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

@return [Fixnum] the number of rows in the “shares” table.

# File lib/common/agendav_plugin.rb, line 62
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
list_users() click to toggle source

Return a list of Agendav users.

@return [Array<User>] a list of users contained in the

Agendav database.
# File lib/common/agendav_plugin.rb, line 33
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