@@ -6,21 +6,26 @@ class AchievementsController < ApplicationController
6
6
respond_to :json , only : [ :award ]
7
7
8
8
def show
9
- @badge = Badge . find ( params [ :id ] )
9
+ show_achievements_params = params . permit ( :id , :username )
10
+
11
+ @badge = Badge . find ( show_achievements_params [ :id ] )
10
12
@user = @badge . user
11
- return redirect_to ( destination_url ) if @badge && @user . username . downcase != params [ :username ] . downcase
13
+ return redirect_to ( destination_url ) if @badge && @user . username . downcase != show_achievements_params [ :username ] . downcase
12
14
end
13
15
14
16
def award
15
- provider = ( User ::LINKABLE_PROVIDERS & params . keys ) . first
17
+
18
+ award_params = params . permit ( :badge , :twitter , :linkedin , :github , :date )
19
+
20
+ provider = pick_a_provider ( award_params )
16
21
17
22
if provider . nil?
18
23
render_404
19
24
else
20
- if @api_access . can_award? ( params [ :badge ] )
21
- user = User . with_username ( params [ provider ] , provider )
22
- badge = params [ :badge ] . constantize . new ( user , Date . strptime ( params [ :date ] , '%m/%d/%Y' ) )
23
- badge . generate_fact! ( params [ :badge ] , params [ provider ] , provider )
25
+ if @api_access . can_award? ( award_params [ :badge ] )
26
+ user = User . with_username ( award_params [ provider ] , provider )
27
+ badge = badge_class_factory ( award_params [ :badge ] . to_s ) . new ( user , Date . strptime ( award_params [ :date ] , '%m/%d/%Y' ) )
28
+ badge . generate_fact! ( award_params [ :badge ] , award_params [ provider ] , provider )
24
29
unless user . nil?
25
30
user . award_and_add_skill badge
26
31
user . save!
@@ -35,11 +40,18 @@ def award
35
40
end
36
41
37
42
private
43
+
38
44
def ensure_valid_api_key
39
- @api_key = params [ :api_key ]
45
+ @api_key = params . permit ( :api_key ) [ :api_key ]
40
46
@api_access = ApiAccess . for ( @api_key ) unless @api_key . nil?
41
47
return render json : { message : "no/invalid api_key provided. get your api_key from coderwall.com/settings" } . to_json if @api_access . nil?
42
48
end
43
49
50
+ def badge_class_factory ( requested_badge_name )
51
+ BADGES_LIST . select { |badge_name | badge_name == requested_badge_name } . first . constantize
52
+ end
44
53
45
- end
54
+ def pick_a_provider ( award_params )
55
+ ( User ::LINKABLE_PROVIDERS & award_params . keys . select { |key | %w{ twitter linkedin github } . include? ( key ) } ) . first
56
+ end
57
+ end
0 commit comments