module DavicalPlugin
Code that all DAViCal plugins ({DavicalPrune}, {DavicalRm}, and {DavicalMv}) will share.
Public Class Methods
new(cfg)
click to toggle source
Initialize this DAViCal {Plugin} with values in cfg.
@param cfg [Configuration] the configuration for this plugin.
# File lib/common/davical_plugin.rb, line 16 def initialize(cfg) @db_hash = { :host => cfg.davical_dbhost, :port => cfg.davical_dbport, :options => cfg.davical_dbopts, :tty => cfg.davical_dbtty, :dbname => cfg.davical_dbname, :user => cfg.davical_dbuser, :password => cfg.davical_dbpass } end
Public Instance Methods
describe_user(user)
click to toggle source
Describe the given DAViCal user who is assumed to exist.
@param user [User] the {User} object whose description we want.
@return [String] a String describing the given user in terms
of his DAViCal "Principal ID".
# File lib/common/davical_plugin.rb, line 35 def describe_user(user) principal_id = self.get_principal_id(user) return "Principal ID: #{principal_id}" end
list_users()
click to toggle source
Produce a list of DAViCal users.
This method remains public for use in testing.
@return [Array<User>] an array of {User} objects, one for each
user found in the DAViCal database.
# File lib/common/davical_plugin.rb, line 49 def list_users() usernames = [] connection = PG::Connection.new(@db_hash) # User #1 is the super-user, and not tied to an email address. sql_query = 'SELECT username FROM usr WHERE user_no > 1;' begin connection.sync_exec(sql_query) do |result| usernames = result.field_values('username') end ensure # Make sure the connection gets closed even if the query explodes. connection.close() end return usernames.map{ |u| User.new(u) } end
Protected Instance Methods
get_principal_id(user)
click to toggle source
Find the “Principal ID” of the given user.
@param user [User] the user whose Principal ID we want.
@return [Fixnum] an integer representing the user's Principal ID
that we obtained from the DAViCal database.
# File lib/common/davical_plugin.rb, line 80 def get_principal_id(user) principal_id = nil connection = PG::Connection.new(@db_hash) sql_query = 'SELECT principal.principal_id ' sql_query += 'FROM (principal INNER JOIN usr ' sql_query += ' ON principal.user_no = usr.user_no) ' sql_query += 'WHERE usr.username = $1;' begin connection.sync_exec_params(sql_query, [user.to_s()]) do |result| if result.num_tuples > 0 principal_id = result[0]['principal_id'] end end ensure # Make sure the connection gets closed even if the query explodes. connection.close() end return principal_id end