Class: Gitlab::ContributionsCalendar

Inherits:
Object
  • Object
show all
Includes:
Utils::StrongMemoize, TimeZoneHelper
Defined in:
lib/gitlab/contributions_calendar.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from TimeZoneHelper

#local_time, #local_timezone_instance, #timezone_data, #timezone_data_with_unique_identifiers

Constructor Details

#initialize(contributor, current_user = nil) ⇒ ContributionsCalendar

Returns a new instance of ContributionsCalendar.



13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/gitlab/contributions_calendar.rb', line 13

def initialize(contributor, current_user = nil)
  @contributor = contributor
  @contributor_time_instance = local_timezone_instance(contributor.timezone).now
  @current_user = current_user
  @groups = [] # Overriden in EE
  @projects = ContributedProjectsFinder.new(
    user: @contributor,
    current_user: current_user,
    params: {
      ignore_visibility: @contributor.include_private_contributions?
    }
  ).execute
end

Instance Attribute Details

#contributorObject (readonly)

Returns the value of attribute contributor.



8
9
10
# File 'lib/gitlab/contributions_calendar.rb', line 8

def contributor
  @contributor
end

#current_userObject (readonly)

Returns the value of attribute current_user.



9
10
11
# File 'lib/gitlab/contributions_calendar.rb', line 9

def current_user
  @current_user
end

#groupsObject (readonly)

Returns the value of attribute groups.



10
11
12
# File 'lib/gitlab/contributions_calendar.rb', line 10

def groups
  @groups
end

#projectsObject (readonly)

Returns the value of attribute projects.



11
12
13
# File 'lib/gitlab/contributions_calendar.rb', line 11

def projects
  @projects
end

Instance Method Details

#activity_datesObject



27
28
29
30
31
32
33
34
35
36
# File 'lib/gitlab/contributions_calendar.rb', line 27

def activity_dates
  return {} if groups.blank? && projects.blank?

  start_time = @contributor_time_instance.years_ago(1).beginning_of_day
  end_time = @contributor_time_instance.end_of_day

  date_interval = "INTERVAL '#{@contributor_time_instance.utc_offset} seconds'"

  contributions_between(start_time, end_time).count_by_dates(date_interval)
end

#events_by_date(date) ⇒ Object



38
39
40
41
42
43
44
# File 'lib/gitlab/contributions_calendar.rb', line 38

def events_by_date(date)
  return Event.none unless can_read_cross_project?

  date_in_time_zone = date.in_time_zone(@contributor_time_instance.time_zone)

  contributions_between(date_in_time_zone.beginning_of_day, date_in_time_zone.end_of_day).with_associations
end