class TeamApi::JoinerImpl
Implements Joiner
operations.
Constants
- SNIPPET_JOIN_FIELDS
Attributes
data[R]
public_mode[R]
site[R]
team_indexer[R]
Public Class Methods
new(site)
click to toggle source
site
-
Jekyll site data object
# File lib/team_api/joiner.rb, line 105 def initialize(site) @site = site @data = site.data @public_mode = site.config['public'] end
Public Instance Methods
get_canonical_reference(reference, errors)
click to toggle source
# File lib/team_api/joiner.rb, line 155 def get_canonical_reference(reference, errors) member = team_indexer.team_member_from_reference reference if member.nil? errors << 'Unknown Team Member: ' + team_indexer.team_member_key(reference) nil elsif should_exclude_member(reference) nil else member['name'].downcase end end
init_team_data(data)
click to toggle source
# File lib/team_api/joiner.rb, line 122 def init_team_data(data) @team_indexer = TeamIndexer.new data team_indexer.create_indexes end
join_project_data()
click to toggle source
# File lib/team_api/joiner.rb, line 132 def join_project_data # A little bit of project data munging. Can go away after the .about.yml # convention takes hold, hopefully. projects = (data['projects'] ||= {}) projects.delete_if { |_, p| p['status'] == 'Hold' } if @public_mode projects.values.each do |p| errors = p['errors'] || [] join_team_list p['team'], errors store_project_errors p, errors unless errors.empty? end end
join_snippet(snippet)
click to toggle source
# File lib/team_api/joiner.rb, line 197 def join_snippet(snippet) username = snippet['username'] member = team_indexer.team_member_from_reference username if member.nil? fail UnknownSnippetUsernameError, username unless public_mode else member = member.select { |k, _| SNIPPET_JOIN_FIELDS.include? k } snippet.merge member end end
join_snippet_data()
click to toggle source
Joins snippet data into site.data[
‘snippets’] and filters out snippets from team members not appearing in site.data[
‘team’] or team_by_email
.
# File lib/team_api/joiner.rb, line 187 def join_snippet_data raw_snippets = data['snippets'] return if raw_snippets.nil? data['snippets'] = raw_snippets.map do |timestamp, snippets| joined = snippets.map { |snippet| join_snippet snippet } .compact.each { |i| i.delete 'username' } [timestamp, joined] unless joined.empty? end.compact.to_h end
join_team_list(team_list, errors)
click to toggle source
Replaces each member of team_list with a key into the team hash. Values can be:
-
Strings that are already team hash keys
-
Strings that are email addresses
-
Strings that are GitHub usernames
-
Hashes that contain an 'email' property
-
Hashes that contain a 'github' property
# File lib/team_api/joiner.rb, line 176 def join_team_list(team_list, errors) (team_list || []).map! do |reference| get_canonical_reference reference, errors end.compact! || [] end
promote_or_remove_data()
click to toggle source
# File lib/team_api/joiner.rb, line 127 def promote_or_remove_data private_data_method = public_mode ? :remove_data : :promote_data HashJoiner.send private_data_method, data, 'private' end
restructure_team_data!()
click to toggle source
Jekyll seems to be removing non-alpha characters from the team member names, causing the TeamIndexer
to not be able to find any team member matches. This changes all of the team member keys back to what we expect.
# File lib/team_api/joiner.rb, line 114 def restructure_team_data! if !site.data['team'].nil? && site.data['team'].respond_to?(:keys) site.data['team'].keys.each do |key| site.data['team'][site.data['team'][key]['name']] = site.data['team'].delete(key) end end end
should_exclude_member(reference)
click to toggle source
# File lib/team_api/joiner.rb, line 151 def should_exclude_member(reference) @public_mode && team_indexer.team_member_is_private(reference) end
store_project_errors(project, errors)
click to toggle source
# File lib/team_api/joiner.rb, line 144 def store_project_errors(project, errors) project['errors'] = errors name = project['github'][0] if project['github'] name ||= project['name'] data['errors'][name] = errors end