class Activity < ActiveRecord::Base after_create :generate_notification enum type_of: [ :create_project, :rename_project, :change_project_visibility, :archive_project, :restore_project, :assign_user_to_project, :change_user_role_on_project, :unassign_user_from_project, :create_module, :clone_module, :archive_module, :restore_module, :change_module_description, :assign_user_to_module, :unassign_user_from_module, :create_step, :destroy_step, :add_comment_to_step, :complete_step, :uncomplete_step, :check_step_checklist_item, :uncheck_step_checklist_item, :edit_step, :add_result, :add_comment_to_result, :archive_result, :edit_result, :clone_experiment, :move_experiment, :add_comment_to_project, :edit_project_comment, :delete_project_comment, :add_comment_to_module, :edit_module_comment, :delete_module_comment, :edit_step_comment, :delete_step_comment, :edit_result_comment, :delete_result_comment, :destroy_result ] validates :type_of, presence: true validates :project, :user, presence: true belongs_to :project, inverse_of: :activities belongs_to :my_module, inverse_of: :activities belongs_to :user, inverse_of: :activities private def generate_notification if %w(assign_user_to_project assign_user_to_module).include? type_of notification_type = :assignment else notification_type = :recent_changes end task_m = "| #{I18n.t('search.index.module')} #{my_module.name}" if my_module notification = Notification.create( type_of: notification_type, title: ActionController::Base.helpers.sanitize(message, tags: %w(strong a)), message: ActionController::Base .helpers.sanitize( "#{I18n.t('search.index.project')} #{project.name} #{task_m}" ), generator_user_id: user.id ) project.users.each do |project_user| next if project_user == user UserNotification.create(notification: notification, user: project_user) end end end