Commit 109ab1a58baec790dceb318e96142132cd5b053c

Authored by Marin Jankovski
1 parent 528a641e

Add comments, fix style, better names for notification methods.

Showing 1 changed file with 40 additions and 29 deletions   Show diff stats
app/services/notification_service.rb
@@ -178,23 +178,21 @@ class NotificationService @@ -178,23 +178,21 @@ class NotificationService
178 178
179 # Get project users with WATCH notification level 179 # Get project users with WATCH notification level
180 def project_watchers(project) 180 def project_watchers(project)
181 - project_members = project_notification_list(project) 181 + project_members = users_project_notification(project)
182 182
183 - project_global= project_notification_list(project, Notification::N_GLOBAL)  
184 - group_global = group_notification_list(project, Notification::N_GLOBAL)  
185 - global_watch = User.where(  
186 - id: [project_global, group_global].flatten.uniq,  
187 - notification_level: Notification::N_WATCH  
188 - ).pluck(:id) 183 + users_with_project_level_global = users_project_notification(project, Notification::N_GLOBAL)
  184 + users_with_group_level_global = users_group_notification(project, Notification::N_GLOBAL)
  185 + users = users_with_global_level_watch([users_with_project_level_global, users_with_group_level_global].flatten.uniq)
189 186
190 - project_watch = watch_project(project, project_global, global_watch)  
191 - group_watch = watch_group(project, project_members, group_global, global_watch) 187 + users_with_project_setting = select_users_project_setting(project, users_with_project_level_global, users)
  188 + users_with_group_setting = select_users_group_setting(project, project_members, users_with_group_level_global, users)
192 189
193 - User.where(id: project_watch.concat(group_watch).uniq).to_a 190 + User.where(id: users_with_project_setting.concat(users_with_group_setting).uniq).to_a
194 end 191 end
195 192
196 - def project_notification_list(project, notification_level=nil) 193 + def users_project_notification(project, notification_level=nil)
197 project_members = project.users_projects 194 project_members = project.users_projects
  195 +
198 if notification_level 196 if notification_level
199 project_members.where(notification_level: notification_level).pluck(:user_id) 197 project_members.where(notification_level: notification_level).pluck(:user_id)
200 else 198 else
@@ -202,7 +200,7 @@ class NotificationService @@ -202,7 +200,7 @@ class NotificationService
202 end 200 end
203 end 201 end
204 202
205 - def group_notification_list(project, notification_level) 203 + def users_group_notification(project, notification_level)
206 if project.group 204 if project.group
207 project.group.users_groups.where(notification_level: notification_level).pluck(:user_id) 205 project.group.users_groups.where(notification_level: notification_level).pluck(:user_id)
208 else 206 else
@@ -210,34 +208,47 @@ class NotificationService @@ -210,34 +208,47 @@ class NotificationService
210 end 208 end
211 end 209 end
212 210
213 - def watch_project(project, global_setting, watch_global)  
214 - uids = project_notification_list(project, Notification::N_WATCH) 211 + def users_with_global_level_watch(ids)
  212 + User.where(
  213 + id: ids,
  214 + notification_level: Notification::N_WATCH
  215 + ).pluck(:id)
  216 + end
  217 +
  218 + # Build a list of users based on project notifcation settings
  219 + def select_users_project_setting(project, global_setting, users_global_level_watch)
  220 + users = users_project_notification(project, Notification::N_WATCH)
215 221
216 - global_setting.each do |i|  
217 - if watch_global.include?(i)  
218 - uids << i 222 + # If project setting is global, add to watch list if global setting is watch
  223 + global_setting.each do |user_id|
  224 + if users_global_level_watch.include?(user_id)
  225 + users << user_id
219 end 226 end
220 end 227 end
221 - uids.uniq 228 +
  229 + users
222 end 230 end
223 231
224 - def watch_group(project, project_members, global_setting, watch_global)  
225 - uids = group_notification_list(project, Notification::N_WATCH)  
226 - # Group setting is watch, add to watchers list user is not project member  
227 - watch = []  
228 - uids.each do |i|  
229 - if project_members.exclude?(i)  
230 - watch << i 232 + # Build a list of users based on group notifcation settings
  233 + def select_users_group_setting(project, project_members, global_setting, users_global_level_watch)
  234 + uids = users_group_notification(project, Notification::N_WATCH)
  235 +
  236 + # Group setting is watch, add to users list if user is not project member
  237 + users = []
  238 + uids.each do |user_id|
  239 + if project_members.exclude?(user_id)
  240 + users << user_id
231 end 241 end
232 end 242 end
233 243
234 - global_setting.each do |i|  
235 - if project_members.exclude?(i) && watch_global.include?(i)  
236 - watch << i 244 + # Group setting is global, add to users list if global setting is watch
  245 + global_setting.each do |user_id|
  246 + if project_members.exclude?(user_id) && users_global_level_watch.include?(user_id)
  247 + users << user_id
237 end 248 end
238 end 249 end
239 250
240 - watch.uniq 251 + users
241 end 252 end
242 253
243 # Remove users with disabled notifications from array 254 # Remove users with disabled notifications from array