delete github/find_or_create[org|repo|user] services

This commit is contained in:
Sven Fuchs 2016-06-19 17:40:23 +02:00
parent 84ebb6b24e
commit 060dd8aced
6 changed files with 4 additions and 211 deletions

View File

@ -26,7 +26,7 @@ end
# not sure how else to include the spec_helper
namespace :spec do
desc 'Run all specs'
task :api do
task :all do
sh 'bundle exec rspec -r spec_helper spec spec_core'
end
@ -42,18 +42,3 @@ namespace :spec do
end
task :default => :'spec:all'
desc "generate gemspec"
task 'travis-api.gemspec' do
content = File.read 'travis-api.gemspec'
fields.each do |field, values|
updated = " s.#{field} = ["
updated << values.map { |v| "\n %p" % v }.join(',')
updated << "\n ]"
content.sub!(/ s\.#{field} = \[\n( .*\n)* \]/, updated)
end
File.open('travis-api.gemspec', 'w') { |f| f << content }
end
task default: 'travis-api.gemspec'

View File

@ -1,11 +1,8 @@
require 'travis/github/services/set_hook'
module Travis
module Github
module Services
require 'travis/github/services/find_or_create_org'
require 'travis/github/services/find_or_create_repo'
require 'travis/github/services/find_or_create_user'
require 'travis/github/services/set_hook'
class << self
def register
constants(false).each { |name| const_get(name) }

View File

@ -1,80 +0,0 @@
require 'gh'
require 'travis/services/base'
require 'travis/model/organization'
require 'travis/model/repository'
require 'travis/model/user'
module Travis
module Github
module Services
class FindOrCreateOrg < Travis::Services::Base
register :github_find_or_create_org
def run
find || create
end
private
def find
::Organization.where(:github_id => params[:github_id]).first.tap do |organization|
if organization
ActiveRecord::Base.transaction do
login = params[:login] || data['login']
if organization.login != login
Repository.where(owner_name: organization.login).
update_all(owner_name: login)
organization.update_attributes(login: login)
end
nullify_logins(organization.github_id, organization.login)
end
end
end
end
def nullify_logins(github_id, login)
users = User.where(["login = ?", login])
if users.exists?
Travis.logger.info("About to nullify login (#{login}) for users: #{users.map(&:id).join(', ')}")
users.update_all(login: nil)
end
organizations = Organization.where(["github_id <> ? AND login = ?", github_id, login])
if organizations.exists?
Travis.logger.info("About to nullify login (#{login}) for organizations: #{organizations.map(&:id).join(', ')}")
organizations.update_all(login: nil)
end
end
def create
organization = Organization.create!(
:name => data['name'],
:login => data['login'],
:github_id => data['id'],
:email => data['email'],
:location => data['location'],
:avatar_url => data['_links'] && data['_links']['avatar'].try(:fetch, 'href'),
:company => data['company'],
:homepage => data['_links'] && data['_links']['blog'].try(:fetch, 'href')
)
nullify_logins(organization.github_id, organization.login)
organization
rescue ActiveRecord::RecordNotUnique
find
end
def avatar_url(github_data)
href = github_data.try(:fetch, 'href')
href ? href[/^(https:\/\/[\w\.\/]*)/, 1] : nil
end
def data
@data ||= GH["organizations/#{params[:github_id]}"] || raise(Travis::GithubApiError)
end
end
end
end
end

View File

@ -1,44 +0,0 @@
module Travis
module Github
module Services
class FindOrCreateRepo < Travis::Services::Base
register :github_find_or_create_repo
def run
repo = find || create
repo.update_attributes(params)
repo
end
private
def find
unless params[:github_id]
message = "No github_id passed to FindOrCreateRepo#find, params: #{params.inspect}"
ActiveSupport::Deprecation.warn(message)
Travis.logger.info(message)
end
query = if params[:github_id]
{ github_id: params[:github_id] }
else
{ owner_name: params[:owner_name], name: params[:name] }
end
run_service(:find_repo, query)
end
def create
unless params[:github_id]
message = "No github_id passed to FindOrCreateRepo#find, params: #{params.inspect}"
ActiveSupport::Deprecation.warn(message)
Travis.logger.info(message)
end
Repository.create!(:owner_name => params[:owner_name], :name => params[:name], github_id: params[:github_id])
rescue ActiveRecord::RecordNotUnique
find
end
end
end
end
end

View File

@ -1,66 +0,0 @@
require 'gh'
require 'travis/model/repository'
require 'travis/model/user'
require 'travis/model/user/renaming'
require 'travis/services/base'
module Travis
module Github
module Services
class FindOrCreateUser < Travis::Services::Base
register :github_find_or_create_user
def run
find || create
end
private
include ::User::Renaming
def find
::User.where(github_id: params[:github_id]).first.tap do |user|
if user
ActiveRecord::Base.transaction do
login = params[:login] || data['login']
if user.login != login
Travis.logger.info("Changing #<User id=#{user.id} login=\"#{user.login}\" github_id=#{user.github_id}> login: current=\"#{user.login}\", new=\"#{login}\" (FindOrCreateUser), data: #{data.inspect}")
rename_repos_owner(user.login, login)
user.update_attributes(login: login)
end
end
nullify_logins(user.github_id, user.login)
end
end
end
def create
user = User.create!(
:name => data['name'],
:login => data['login'],
:email => data['email'],
:github_id => data['id'],
:gravatar_id => data['gravatar_id']
)
nullify_logins(user.github_id, user.login)
user
rescue ActiveRecord::RecordNotUnique
find
end
def data
@data ||= fetch_data
end
def fetch_data
data = GH["user/#{params[:github_id]}"] || raise(Travis::GithubApiError)
Travis.logger.info("Fetching data for github_id=#{params[:github_id]} (FindOrCreateUser), data: #{data.inspect}")
data
end
end
end
end
end

View File

@ -4,6 +4,7 @@ require 'travis/github/oauth'
class User < Travis::Model
require 'travis/model/user/oauth'
require 'travis/model/user/renaming'
has_many :tokens, dependent: :destroy
has_many :memberships, dependent: :destroy