Преглед на файлове

Add Group.current_activities

Maarten van den Berg преди 6 години
родител
ревизия
f80f4cc94b
променени са 1 файла, в които са добавени 25 реда и са изтрити 0 реда
  1. 25 0
      app/models/group.rb

+ 25 - 0
app/models/group.rb

@@ -32,6 +32,31 @@ class Group < ApplicationRecord
32 32
     self.activities.where('start > ?', DateTime.now)
33 33
   end
34 34
 
35
+  # @return [Array<Activity>]
36
+  #   the Activity/Activities that are the closest to the given point in time.
37
+  #   Logic is as follows:
38
+  #     - If one or more Activities start before and end after the given point
39
+  #       in time, these are returned.
40
+  #     - Additionally, the last 3 activities that ended are returned, as well
41
+  #       as any activities starting within the next 48 hours.
42
+  def current_activities(reference = Time.zone.now)
43
+    currently_active = self.activities
44
+      .where('start < ?', reference)
45
+      .where('end > ?', reference)
46
+
47
+    previous = self.activities
48
+      .where('end < ?', reference)
49
+      .order(end: :desc)
50
+      .limit(3)
51
+
52
+    upcoming = self.activities
53
+      .where('start > ?', reference)
54
+      .where('start < ?', reference.days_since(2))
55
+      .order(start: :asc)
56
+
57
+    return [currently_active, previous, upcoming].flatten
58
+  end
59
+
35 60
   # Determine whether the passed person is a member of the group.
36 61
   def is_member?(person)
37 62
     Member.exists?(