Commit e321f8733b63d1f66ed8db01dfb5b66f23c472d0
Committed by
Rodrigo Souto
1 parent
8373e2f6
Exists in
api_tasks
and in
4 other branches
add user registration
Showing
3 changed files
with
64 additions
and
99 deletions
Show diff stats
lib/api/helpers.rb
... | ... | @@ -13,7 +13,7 @@ module API |
13 | 13 | @current_user = nil |
14 | 14 | end |
15 | 15 | |
16 | - | |
16 | +#FIXME see if its needed | |
17 | 17 | # def paginate(relation) |
18 | 18 | # per_page = params[:per_page].to_i |
19 | 19 | # paginated = relation.page(params[:page]).per(per_page) |
... | ... | @@ -26,16 +26,19 @@ module API |
26 | 26 | unauthorized! unless current_user |
27 | 27 | end |
28 | 28 | |
29 | +#FIXME see if its needed | |
29 | 30 | # def authenticated_as_admin! |
30 | 31 | # forbidden! unless current_user.is_admin? |
31 | 32 | # end |
32 | 33 | # |
34 | +#FIXME see if its needed | |
33 | 35 | # def authorize! action, subject |
34 | 36 | # unless abilities.allowed?(current_user, action, subject) |
35 | 37 | # forbidden! |
36 | 38 | # end |
37 | 39 | # end |
38 | 40 | # |
41 | +#FIXME see if its needed | |
39 | 42 | # def can?(object, action, subject) |
40 | 43 | # abilities.allowed?(object, action, subject) |
41 | 44 | # end |
... | ... | @@ -51,6 +54,17 @@ module API |
51 | 54 | end |
52 | 55 | end |
53 | 56 | |
57 | + # Checks the occurrences of uniqueness of attributes, each attribute must be present in the params hash | |
58 | + # or a Bad Request error is invoked. | |
59 | + # | |
60 | + # Parameters: | |
61 | + # keys (unique) - A hash consisting of keys that must be unique | |
62 | + def unique_attributes!(obj, keys) | |
63 | + keys.each do |key| | |
64 | + cant_be_saved_request!(key) if obj.send("find_by_#{key.to_s}", params[key]) | |
65 | + end | |
66 | + end | |
67 | + | |
54 | 68 | def attributes_for_keys(keys) |
55 | 69 | attrs = {} |
56 | 70 | keys.each do |key| |
... | ... | @@ -60,49 +74,36 @@ module API |
60 | 74 | end |
61 | 75 | |
62 | 76 | # error helpers |
63 | - | |
64 | 77 | def forbidden! |
65 | 78 | render_api_error!('403 Forbidden', 403) |
66 | 79 | end |
67 | 80 | |
81 | + def cant_be_saved_request!(attribute) | |
82 | + message = _("(Invalid request) #{attribute} can't be saved") | |
83 | + render_api_error!(message, 400) | |
84 | + end | |
85 | + | |
68 | 86 | def bad_request!(attribute) |
69 | - message = ["400 (Bad request)"] | |
70 | - message << "\"" + attribute.to_s + "\" not given" | |
71 | - render_api_error!(message.join(' '), 400) | |
87 | + message = _("(Bad request) #{attribute} not given") | |
88 | + render_api_error!(message, 400) | |
72 | 89 | end |
73 | 90 | |
74 | - def not_found!(resource = nil) | |
75 | - message = ["404"] | |
76 | - message << resource if resource | |
77 | - message << "Not Found" | |
78 | - render_api_error!(message.join(' '), 404) | |
91 | + def something_wrong! | |
92 | + message = _("Something wrong happened") | |
93 | + render_api_error!(message, 400) | |
79 | 94 | end |
80 | 95 | |
81 | 96 | def unauthorized! |
82 | - render_api_error!('401 Unauthorized', 401) | |
97 | + render_api_error!(_('Unauthorized'), 401) | |
83 | 98 | end |
84 | 99 | |
85 | 100 | def not_allowed! |
86 | - render_api_error!('Method Not Allowed', 405) | |
101 | + render_api_error!(_('Method Not Allowed'), 405) | |
87 | 102 | end |
88 | 103 | |
89 | 104 | def render_api_error!(message, status) |
90 | - error!({'message' => message}, status) | |
105 | + error!({'message' => message, :code => status}, status) | |
91 | 106 | end |
92 | 107 | |
93 | -# private | |
94 | -# | |
95 | -# def add_pagination_headers(paginated, per_page) | |
96 | -# request_url = request.url.split('?').first | |
97 | -# | |
98 | -# links = [] | |
99 | -# links << %(<#{request_url}?page=#{paginated.current_page - 1}&per_page=#{per_page}>; rel="prev") unless paginated.first_page? | |
100 | -# links << %(<#{request_url}?page=#{paginated.current_page + 1}&per_page=#{per_page}>; rel="next") unless paginated.last_page? | |
101 | -# links << %(<#{request_url}?page=1&per_page=#{per_page}>; rel="first") | |
102 | -# links << %(<#{request_url}?page=#{paginated.total_pages}&per_page=#{per_page}>; rel="last") | |
103 | -# | |
104 | -# header 'Link', links.join(', ') | |
105 | -# end | |
106 | - | |
107 | 108 | end |
108 | 109 | end | ... | ... |
lib/api/session.rb
1 | 1 | module API |
2 | 2 | |
3 | -# require 'api/validations/uniqueness' | |
4 | - | |
5 | - # Users API | |
6 | 3 | class Session < Grape::API |
7 | -#params do | |
8 | -# requires :login, :uniqueness => true | |
9 | -#end | |
10 | 4 | |
11 | 5 | # Login to get token |
12 | 6 | # |
... | ... | @@ -15,9 +9,8 @@ module API |
15 | 9 | # password (required) - user password |
16 | 10 | # |
17 | 11 | # Example Request: |
18 | - # POST /session | |
12 | + # POST /login?login=some&password=pass | |
19 | 13 | get "/login" do |
20 | -# post "/session" do | |
21 | 14 | environment = nil #FIXME load the correct environment create a method in helper |
22 | 15 | user ||= User.authenticate(params[:login], params[:password], environment) |
23 | 16 | |
... | ... | @@ -26,35 +19,26 @@ environment = nil #FIXME load the correct environment create a method in helper |
26 | 19 | present user, :with => Entities::UserLogin |
27 | 20 | end |
28 | 21 | |
29 | - # Create user. | |
30 | - # | |
31 | - # Parameters: | |
32 | - # email (required) - Email | |
33 | - # password (required) - Password | |
34 | - # name - Name | |
35 | - # Example Request: | |
36 | - # POST /users | |
37 | -# post do | |
38 | - get "register" do | |
39 | - required_attributes! [:email, :login, :password] | |
40 | - attrs = attributes_for_keys [:email, :login, :password] | |
41 | - attrs[:password_confirmation] = attrs[:password] | |
42 | - user = User.new(attrs) | |
43 | -begin | |
44 | - if user.save | |
45 | - present user, :with => Entities::User | |
46 | - else | |
47 | - not_found! | |
48 | - end | |
49 | -rescue | |
50 | -# not_found! | |
51 | -#FIXME See why notfound is not working | |
52 | -{} | |
53 | -end | |
54 | -# user | |
22 | + # Create user. | |
23 | + # | |
24 | + # Parameters: | |
25 | + # email (required) - Email | |
26 | + # password (required) - Password | |
27 | + # login - login | |
28 | + # Example Request: | |
29 | + # POST /register?email=some@mail.com&password=pas&login=some | |
30 | + post "register" do | |
31 | + required_attributes! [:email, :login, :password] | |
32 | + unique_attributes! User, [:email, :login] | |
33 | + attrs = attributes_for_keys [:email, :login, :password] | |
34 | + attrs[:password_confirmation] = attrs[:password] | |
35 | + user = User.new(attrs) | |
36 | + if user.save | |
37 | + present user, :with => Entities::User | |
38 | + else | |
39 | + something_wrong! | |
55 | 40 | end |
56 | - | |
57 | - | |
41 | + end | |
58 | 42 | |
59 | 43 | end |
60 | 44 | end | ... | ... |
lib/api/v1/users.rb
1 | 1 | module API |
2 | 2 | module V1 |
3 | - class Users < Grape::API | |
4 | - | |
5 | - before { authenticate! } | |
6 | - | |
7 | - resource :users do | |
8 | - | |
9 | - #FIXME make the pagination | |
10 | - #FIXME put it on environment context | |
11 | -# get do | |
12 | -# Users.all | |
13 | -# end | |
14 | - | |
15 | - get ":id" do | |
16 | - present Article.find(params[:id]).comments.find(params[:comment_id]), :with => Entities::User | |
17 | - end | |
18 | - | |
19 | - # Create user. | |
20 | - # | |
21 | - # Parameters: | |
22 | - # email (required) - Email | |
23 | - # password (required) - Password | |
24 | - # name - Name | |
25 | - # Example Request: | |
26 | - # POST /users | |
27 | -# post do | |
28 | - get do | |
29 | -# authenticated_as_admin! | |
30 | - required_attributes! [:email, :login, :password] | |
31 | - attrs = attributes_for_keys [:email, :login, :password] | |
32 | - user = User.new(attrs) | |
33 | - if user.save | |
34 | - present user, :with => Entities::User | |
35 | - else | |
36 | - not_found! | |
3 | + class Users < Grape::API | |
4 | + | |
5 | + before { authenticate! } | |
6 | + | |
7 | + resource :users do | |
8 | + | |
9 | + #FIXME make the pagination | |
10 | + #FIXME put it on environment context | |
11 | + get do | |
12 | + Users.all | |
13 | + end | |
14 | + | |
15 | + get ":id" do | |
16 | + present Article.find(params[:id]).comments.find(params[:comment_id]), :with => Entities::User | |
37 | 17 | end |
18 | + | |
38 | 19 | end |
20 | + | |
39 | 21 | end |
40 | - | |
41 | - end | |
42 | 22 | end |
43 | 23 | end | ... | ... |