Commit e321f8733b63d1f66ed8db01dfb5b66f23c472d0

Authored by Leandro Santos
Committed by Rodrigo Souto
1 parent 8373e2f6

add user registration

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
... ...