Class: TeamApi::TeamIndexer

Inherits:
Object
  • Object
show all
Defined in:
lib/team_api/joiner.rb

Instance Method Summary collapse

Constructor Details

#initialize(data) ⇒ TeamIndexer

Returns a new instance of TeamIndexer.



29
30
31
# File 'lib/team_api/joiner.rb', line 29

def initialize(data)
  @team = (data || {}).dup
end

Instance Method Details

#create_indexesObject



37
38
39
40
41
# File 'lib/team_api/joiner.rb', line 37

def create_indexes
  team_by_email
  team_by_github
  team_by_deprecated_name
end

#teamObject



33
34
35
# File 'lib/team_api/joiner.rb', line 33

def team
  @team || {}
end

#team_by_deprecated_nameObject

Returns an index of team member usernames keyed by deprecated names.



54
55
56
# File 'lib/team_api/joiner.rb', line 54

def team_by_deprecated_name
  @team_by_deprecated_name ||= team_index_by_field 'deprecated_name'
end

#team_by_emailObject

Returns an index of team member usernames keyed by email address.



44
45
46
# File 'lib/team_api/joiner.rb', line 44

def team_by_email
  @team_by_email ||= team_index_by_field 'email'
end

#team_by_githubObject

Returns an index of team member usernames keyed by GitHub username.



49
50
51
# File 'lib/team_api/joiner.rb', line 49

def team_by_github
  @team_by_github ||= team_index_by_field 'github'
end

#team_index_by_field(field) ⇒ Object

Returns an index of team member usernames keyed by a particular field.



59
60
61
62
63
64
65
# File 'lib/team_api/joiner.rb', line 59

def team_index_by_field(field)
  team_members.map do |member|
    value = member[field]
    value = member['private'][field] if value.nil? && member['private']
    [value.downcase, member['name'].downcase] unless value.nil?
  end.compact.to_h
end

#team_member_from_reference(reference) ⇒ Object



84
85
86
87
88
89
90
91
92
# File 'lib/team_api/joiner.rb', line 84

def team_member_from_reference(reference)
  key = team_member_key reference

  if team['private']
    team[key] || team['private'][key]
  else
    team[key]
  end
end

#team_member_is_private(reference) ⇒ Object



94
95
96
97
# File 'lib/team_api/joiner.rb', line 94

def team_member_is_private(reference)
  key = team_member_key(reference).downcase
  team['private'] && team['private'][key]
end

#team_member_key(ref) ⇒ Object



79
80
81
82
# File 'lib/team_api/joiner.rb', line 79

def team_member_key(ref)
  key = team_member_key_by_type(ref).downcase
  team_by_email[key] || team_by_github[key] || team_by_deprecated_name[key] || key
end

#team_member_key_by_type(ref) ⇒ Object



75
76
77
# File 'lib/team_api/joiner.rb', line 75

def team_member_key_by_type(ref)
  (ref.is_a? String) ? ref : (ref['id'] || ref['email'] || ref['github'] || ref['deprecated_name'])
end

#team_membersObject

Returns the list of team members, with site.data[‘private’] members included.



69
70
71
72
73
# File 'lib/team_api/joiner.rb', line 69

def team_members
  @team_members ||= team.map { |key, value| value unless key == 'private' }
    .compact
    .concat((team['private'] || {}).values)
end