require '/data_importer/lib/github_api/user.rb' require '/data_importer/lib/github_api/owner_repos.rb' class GithubUserImporter attr_accessor :filepath, :usernames def initialize @filepath = '/data_importer/data/github_usernames.txt' @usernames = File.read(filepath).split("\n") end def username_hashes usernames.map do |username| username_response = GithubApi::User.find(username) username_repos = GithubApi::OwnerRepos.find(username) repos_hash = { 'repositories' => username_repos } username_response.to_h.merge(repos_hash) end end def user_h_to_attr(user_h) attrs = {} attrs[:github_id] = user_h['id'] attrs[:login] = user_h['login'] attrs[:name] = user_h['name'] attrs[:avatar_url] = user_h['avatarUrl'] attrs[:bio] = user_h['bio'] attrs[:bio_html] = user_h['bioHTML'] attrs[:location] = user_h['location'] attrs[:repositories] = user_h['repositories'] attrs end def bulk_insert(username_hashes) GithubUser.bulk_insert do |worker| username_hashes.each do |username_hash| attrs = user_h_to_attr(username_hash) worker.add(attrs) end end end def import if filepath.nil? puts "Please provide a filepath in the projects data dir named github_usernames.txt with one username per line." else puts "Now importing GithubUsers" usernames = username_hashes.map {|h| h['login'] } puts "Now importing data from the following usernames: #{usernames}" bulk_insert(username_hashes) end end end