Module: Central::Support::ActivityConcern::Scopes::ClassMethods

Defined in:
lib/central/support/concerns/activity_concern/scopes.rb

Instance Method Summary collapse

Instance Method Details

#fetch_polymorphic(ids, since) ⇒ Object



43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/central/support/concerns/activity_concern/scopes.rb', line 43

def fetch_polymorphic(ids, since)
  stories = where("subject_type in ('Project', 'Story')").
    includes(:user, :subject).
    projects(ids).
    since(since).to_a
  stories += where("subject_type in ('Note', 'Task')").
    includes(:user, subject: [:story]).
    projects(ids).
    since(since).to_a
  stories = stories.group_by { |activity| activity.subject_id }

  [].tap do |new_activities|
    stories.values.each do |activities|
      sub_list = activities.sort_by { |story| story.updated_at }
      first_story = sub_list.shift
      while sub_list.size > 0
        first_story.merge_story!(sub_list.shift)
      end
      new_activities << first_story unless first_story.subject_changes.empty?
    end
  end
end

#grouped_activities(allowed_projects, since) ⇒ Object



66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# File 'lib/central/support/concerns/activity_concern/scopes.rb', line 66

def grouped_activities(allowed_projects, since)
  fetch_polymorphic(allowed_projects.pluck(:id), since).group_by { |activity|
    activity.created_at.beginning_of_day
  }.
  map { |date, activities|
    [
      date,
      activities.group_by { |activity|
        activity.project_id
      }.
      map { |project_id, activities|
        [
          allowed_projects.find { |p| p.id == project_id },
          activities.group_by { |activity|
            activity.subject_destroyed_type || activity.subject_type
          }.
          map { |subject_type, activities|
            [
              subject_type,
              activities.map(&:decorate)
            ]
          }
        ]
      }
    ]
  }
end