1
1
class AchievementsController < ApplicationController
2
+ #TODO extract to api.coderwall.com
2
3
before_action :ensure_valid_api_key , only : [ :award ]
3
4
skip_before_action :verify_authenticity_token , only : [ :award ]
4
5
layout 'protip'
@@ -9,8 +10,8 @@ def show
9
10
show_achievements_params = params . permit ( :id , :username )
10
11
11
12
@badge = Badge . find ( show_achievements_params [ :id ] )
12
- @user = @badge . user
13
- return redirect_to ( destination_url ) if @badge && @user . username . downcase != show_achievements_params [ :username ] . downcase
13
+ @user = @badge . user
14
+ redirect_to ( destination_url ) if @badge && @user . username . downcase != show_achievements_params [ :username ] . downcase
14
15
end
15
16
16
17
def award
@@ -23,7 +24,7 @@ def award
23
24
render_404
24
25
else
25
26
if @api_access . can_award? ( award_params [ :badge ] )
26
- user = User . find_by_provider_username ( award_params [ provider ] , provider )
27
+ user = User . find_by_provider_username ( award_params [ provider ] , provider )
27
28
badge = badge_class_factory ( award_params [ :badge ] . to_s ) . new ( user , Date . strptime ( award_params [ :date ] , '%m/%d/%Y' ) )
28
29
badge . generate_fact! ( award_params [ :badge ] , award_params [ provider ] , provider )
29
30
unless user . nil?
@@ -32,19 +33,15 @@ def award
32
33
end
33
34
render nothing : true , status : 200
34
35
else
35
- return render json :
{ message :
"don't have permission to do that. contact [email protected] " , status :
403 } . to_json
36
+ render json :
{ message :
"don't have permission to do that. contact [email protected] " , status :
403 } . to_json
36
37
end
37
38
end
38
- rescue Exception => e
39
- return render json :
{ message :
"something went wrong with your request or the end point may not be ready. contact [email protected] " } . to_json
40
39
end
41
40
42
41
private
43
42
44
43
def ensure_valid_api_key
45
- @api_key = params . permit ( :api_key ) [ :api_key ]
46
- @api_access = ApiAccess . for ( @api_key ) unless @api_key . nil?
47
- return render json : { message : "no/invalid api_key provided. get your api_key from coderwall.com/settings" } . to_json if @api_access . nil?
44
+ @api_access = ApiAccess . find_by_api_key! ( params . permit ( :api_key ) [ :api_key ] )
48
45
end
49
46
50
47
def badge_class_factory ( requested_badge_name )
@@ -54,4 +51,12 @@ def badge_class_factory(requested_badge_name)
54
51
def pick_a_provider ( award_params )
55
52
( User ::LINKABLE_PROVIDERS & award_params . keys . select { |key | %w{ twitter linkedin github } . include? ( key ) } ) . first
56
53
end
54
+
55
+ rescue_from ActiveRecord ::RecordNotFound do
56
+ render json : { message : 'no/invalid api_key provided. get your api_key from coderwall.com/settings' } . to_json
57
+ end
58
+
59
+ rescue_from Exception do
60
+ render json :
{ message :
'something went wrong with your request or the end point may not be ready. contact [email protected] ' } . to_json
61
+ end
57
62
end
0 commit comments