52 lines
1.4 KiB
Ruby
52 lines
1.4 KiB
Ruby
module Gitlab
|
|
module GoogleCodeImport
|
|
class Client
|
|
attr_reader :raw_data
|
|
|
|
def self.mask_email(author)
|
|
parts = author.split("@", 2)
|
|
parts[0] = "#{parts[0][0...-3]}..."
|
|
parts.join("@")
|
|
end
|
|
|
|
def initialize(raw_data)
|
|
@raw_data = raw_data
|
|
end
|
|
|
|
def valid?
|
|
raw_data.is_a?(Hash) && raw_data["kind"] == "projecthosting#user" && raw_data.key?("projects")
|
|
end
|
|
|
|
def repos
|
|
@repos ||= raw_data["projects"].map { |raw_repo| GoogleCodeImport::Repository.new(raw_repo) }.select(&:git?)
|
|
end
|
|
|
|
def incompatible_repos
|
|
@incompatible_repos ||= raw_data["projects"].map { |raw_repo| GoogleCodeImport::Repository.new(raw_repo) }.reject(&:git?)
|
|
end
|
|
|
|
def repo(id)
|
|
repos.find { |repo| repo.id == id }
|
|
end
|
|
|
|
def user_map
|
|
user_map = Hash.new { |hash, user| hash[user] = self.class.mask_email(user) }
|
|
|
|
repos.each do |repo|
|
|
next unless repo.valid? && repo.issues
|
|
|
|
repo.issues.each do |raw_issue|
|
|
# Touching is enough to add the entry and masked email.
|
|
user_map[raw_issue["author"]["name"]]
|
|
|
|
raw_issue["comments"]["items"].each do |raw_comment|
|
|
user_map[raw_comment["author"]["name"]]
|
|
end
|
|
end
|
|
end
|
|
|
|
Hash[user_map.sort]
|
|
end
|
|
end
|
|
end
|
|
end
|