diff options
author | Sean McGivern <sean@mcgivern.me.uk> | 2016-10-20 11:53:11 +0300 |
---|---|---|
committer | Sean McGivern <sean@mcgivern.me.uk> | 2016-10-20 11:53:11 +0300 |
commit | b5cee66612fca4f1fb9791f1c8615039d1703df3 (patch) | |
tree | 41204dba99b87bb07adf12d1661bb94b98fdf8a3 /app | |
parent | 192a6eaf1fb6adf2d4fa96d52e65657909849a52 (diff) | |
parent | 9124310f2871117acaac98781be84c9fc016e2ad (diff) |
Merge branch 'add_user_expire_leave_event' into 'master'
Differentiate the expire from leave event
At the moment we cannot see whether a user left a project due to their
membership expiring or if they themselves opted to leave the project.
This adds a new event type that allows us to make this differentiation.
Note that is not really feasible to go back and reliably fix up the
previous events. As a result the events for previous expire removals
will remain the same however events of this nature going forward will be
correctly represented.
Closes #22611
![Screen_Shot_2016-10-06_at_09.27.52](/uploads/e4de7bd2cdedc64a9b19e56fefa21314/Screen_Shot_2016-10-06_at_09.27.52.png)
See merge request !6717
Diffstat (limited to 'app')
-rw-r--r-- | app/models/concerns/expirable.rb | 6 | ||||
-rw-r--r-- | app/models/event.rb | 9 | ||||
-rw-r--r-- | app/models/members/project_member.rb | 6 | ||||
-rw-r--r-- | app/services/event_create_service.rb | 4 |
4 files changed, 22 insertions, 3 deletions
diff --git a/app/models/concerns/expirable.rb b/app/models/concerns/expirable.rb index be93435453b..b66ba08dc59 100644 --- a/app/models/concerns/expirable.rb +++ b/app/models/concerns/expirable.rb @@ -5,11 +5,15 @@ module Expirable scope :expired, -> { where('expires_at <= ?', Time.current) } end + def expired? + expires? && expires_at <= Time.current + end + def expires? expires_at.present? end def expires_soon? - expires_at < 7.days.from_now + expires? && expires_at < 7.days.from_now end end diff --git a/app/models/event.rb b/app/models/event.rb index 0764cb8cabd..3993b35f96d 100644 --- a/app/models/event.rb +++ b/app/models/event.rb @@ -12,6 +12,7 @@ class Event < ActiveRecord::Base JOINED = 8 # User joined project LEFT = 9 # User left project DESTROYED = 10 + EXPIRED = 11 # User left project due to expiry RESET_PROJECT_ACTIVITY_INTERVAL = 1.hour @@ -115,6 +116,10 @@ class Event < ActiveRecord::Base action == LEFT end + def expired? + action == EXPIRED + end + def destroyed? action == DESTROYED end @@ -124,7 +129,7 @@ class Event < ActiveRecord::Base end def membership_changed? - joined? || left? + joined? || left? || expired? end def created_project? @@ -184,6 +189,8 @@ class Event < ActiveRecord::Base 'joined' elsif left? 'left' + elsif expired? + 'removed due to membership expiration from' elsif destroyed? 'destroyed' elsif commented? diff --git a/app/models/members/project_member.rb b/app/models/members/project_member.rb index 125f26369d7..e4880973117 100644 --- a/app/models/members/project_member.rb +++ b/app/models/members/project_member.rb @@ -121,7 +121,11 @@ class ProjectMember < Member end def post_destroy_hook - event_service.leave_project(self.project, self.user) + if expired? + event_service.expired_leave_project(self.project, self.user) + else + event_service.leave_project(self.project, self.user) + end super end diff --git a/app/services/event_create_service.rb b/app/services/event_create_service.rb index 07fc77001a5..e24cc66e0fe 100644 --- a/app/services/event_create_service.rb +++ b/app/services/event_create_service.rb @@ -62,6 +62,10 @@ class EventCreateService create_event(project, current_user, Event::LEFT) end + def expired_leave_project(project, current_user) + create_event(project, current_user, Event::EXPIRED) + end + def create_project(project, current_user) create_event(project, current_user, Event::CREATED) end |