Document everything with YARD and fix some bugs along the way.
[mailshears.git] / lib / mv / plugins / agendav.rb
1 require 'pg'
2
3 require 'common/agendav_plugin'
4 require 'mv/mv_plugin'
5
6
7 # Handle moving (renaming) Agendav users in its database. Agendav has
8 # no concept of domains.
9 #
10 class AgendavMv
11
12 include AgendavPlugin
13 include MvPlugin
14
15 # Move the user *src* to *dst* within the Agendav database. This
16 # should "rename" him in _every_ table where he is referenced.
17 #
18 # This can fail is *src* does not exist, or if *dst* already exists
19 # before the move. It should also be an error if the destination
20 # domain doesn't exist. But Agendav doesn't know about domains, so
21 # we let that slide.
22 #
23 # @param src [User] the source user to be moved.
24 #
25 # @param dst [User] the destination user being moved to.
26 #
27 def mv_user(src, dst)
28 raise NonexistentUserError.new(src.to_s()) if not user_exists(src)
29 raise UserAlreadyExistsError.new(dst.to_s()) if user_exists(dst)
30
31 sql_queries = ['UPDATE prefs SET username = $1 WHERE username = $2;']
32 sql_queries << 'UPDATE shared SET user_from = $1 WHERE user_from = $2;'
33 sql_queries << 'UPDATE shared SET user_which = $1 WHERE user_which = $2;'
34
35 connection = PGconn.connect(@db_host, @db_port, @db_opts, @db_tty,
36 @db_name, @db_user, @db_pass)
37
38 sql_queries.each do |sql_query|
39 connection.query(sql_query, [dst.to_s(), src.to_s()])
40 end
41
42 connection.close()
43 end
44
45 end