#691: added #notifiers and #update actions for Users API
This commit is contained in:
parent
2ae671df21
commit
0879a7e46f
|
@ -10,6 +10,12 @@ class Api::V1::BaseController < ApplicationController
|
|||
|
||||
protected
|
||||
|
||||
def error_message(subject, message)
|
||||
errors = subject.errors.full_messages.join('. ')
|
||||
(message << '. ' << errors) if errors.present?
|
||||
message
|
||||
end
|
||||
|
||||
def add_member_to_subject(subject)
|
||||
class_name = subject.class.name.downcase
|
||||
if member.present? && subject.add_member(member)
|
||||
|
@ -61,11 +67,7 @@ class Api::V1::BaseController < ApplicationController
|
|||
end
|
||||
|
||||
def render_validation_error(subject, message)
|
||||
errors = subject.errors.full_messages.join('. ')
|
||||
if errors.present?
|
||||
message << '. ' << errors
|
||||
end
|
||||
render_json_response(subject, message, 422)
|
||||
render_json_response(subject, error_message(subject, message), 422)
|
||||
end
|
||||
|
||||
private
|
||||
|
|
|
@ -53,10 +53,7 @@ class Api::V1::RepositoriesController < Api::V1::BaseController
|
|||
if key_pair.save
|
||||
render_json_response @repository, 'Signatures have been updated for repository successfully'
|
||||
else
|
||||
message = 'Signatures have not been updated for repository'
|
||||
errors = key_pair.errors.full_messages.join('. ')
|
||||
(message << '. ' << errors) if errors.present?
|
||||
render_json_response @repository, message, 422
|
||||
render_json_response @repository, error_message(key_pair, 'Signatures have not been updated for repository'), 422
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -3,14 +3,43 @@ class Api::V1::UsersController < Api::V1::BaseController
|
|||
|
||||
before_filter :authenticate_user!
|
||||
skip_before_filter :authenticate_user!, :only => [:show] if APP_CONFIG['anonymous_access']
|
||||
load_and_authorize_resource :user, :only => :show
|
||||
before_filter :set_current_user, :except => :show
|
||||
|
||||
def show
|
||||
@user = User.where(:id => params[:id]).first
|
||||
if @user
|
||||
render :show
|
||||
@user = current_user if params[:id].nil?
|
||||
end
|
||||
|
||||
def update
|
||||
user_params = params[:user] || {}
|
||||
send_confirmation = user_params[:email] != @user.email
|
||||
if @user.update_without_password(user_params)
|
||||
if send_confirmation
|
||||
@user.confirmed_at, @user.confirmation_sent_at = nil
|
||||
@user.send_confirmation_instructions
|
||||
end
|
||||
render_json_response @user, 'User has been updated successfully'
|
||||
else
|
||||
render_json_response User.new, "User with id='#{params[:id]}' does not exist", 422
|
||||
render_validation_error @user, "#{class_name} has not been updated"
|
||||
end
|
||||
end
|
||||
|
||||
def notifiers
|
||||
if request.put?
|
||||
if @user.notifier.update_attributes(params[:notifiers])
|
||||
render_json_response @user, 'User notification settings have been updated successfully'
|
||||
else
|
||||
render_json_response @user, error_message(@user.notifier, 'User notification settings have not been updated'), 422
|
||||
end
|
||||
else
|
||||
render :notifiers
|
||||
end
|
||||
end
|
||||
|
||||
protected
|
||||
|
||||
def set_current_user
|
||||
@user = current_user
|
||||
end
|
||||
|
||||
end
|
|
@ -0,0 +1,8 @@
|
|||
json.user do |json|
|
||||
json.(@user, :id)
|
||||
json.notifiers do |json_notifiers|
|
||||
json_notifiers.(@user.notifier, :can_notify, :new_comment, :new_comment_reply, :new_issue, :issue_assign, :new_comment_commit_owner, :new_comment_commit_repo_owner, :new_comment_commit_commentor, :new_build, :new_associated_build)
|
||||
end
|
||||
end
|
||||
|
||||
json.url notifiers_api_v1_user_path(:json)
|
|
@ -1,9 +1,8 @@
|
|||
json.user do |json|
|
||||
json.(@user, :id, :name, :email, :uname,:language, :own_projects_count, :professional_experience, :site, :company, :location)
|
||||
json.(@user, :id, :name, :email, :uname,:language, :own_projects_count, :professional_experience, :site, :company, :location, :build_priority)
|
||||
json.created_at @user.created_at.to_i
|
||||
json.updated_at @user.updated_at.to_i
|
||||
json.avatar_url avatar_url(@user,:big)
|
||||
json.url api_v1_user_path(@user.id, :format => :json)
|
||||
json.html_url user_path(@user.uname)
|
||||
end
|
||||
|
||||
json.url api_v1_user_path(@user.id, :format => :json)
|
||||
end
|
|
@ -48,6 +48,12 @@ Rosa::Application.routes.draw do
|
|||
}
|
||||
end
|
||||
resources :users, :only => [:show]
|
||||
resource :user, :only => [:show, :update] do
|
||||
member {
|
||||
get :notifiers
|
||||
put :notifiers
|
||||
}
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
|
Loading…
Reference in New Issue