happy_seed 0.0.19 → 0.0.21

Sign up to get free protection for your applications and to get access to all the features.
Files changed (190) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +4 -69
  3. data/bin/rails +12 -0
  4. data/bin/rspec +16 -0
  5. data/happy_seed.rb +5 -1
  6. data/happy_seed.txt +25 -18
  7. data/lib/generators/happy_seed/admin/admin_generator.rb +40 -5
  8. data/lib/generators/happy_seed/admin/templates/app/admin/campaigns.rb +10 -14
  9. data/lib/generators/happy_seed/admin/templates/app/admin/newsletter.rb +2 -2
  10. data/lib/generators/happy_seed/admin/templates/app/admin/user.rb +4 -1
  11. data/lib/generators/happy_seed/admin/templates/app/controllers/admin/stats_controller.rb +1 -1
  12. data/lib/generators/happy_seed/admin/templates/docs/README.07.admin.rdoc +33 -4
  13. data/lib/generators/happy_seed/angular_view/templates/docs/README.11.angular_view.rdoc +2 -4
  14. data/lib/generators/happy_seed/api/api_generator.rb +38 -39
  15. data/lib/generators/happy_seed/api/templates/app/controllers/api/v1/base_controller.rb +4 -5
  16. data/lib/generators/happy_seed/api/templates/app/controllers/api/v1/model_hash.rb +3 -20
  17. data/lib/generators/happy_seed/api/templates/app/controllers/api/v1/user_tokens_controller.rb +13 -36
  18. data/lib/generators/happy_seed/api/templates/app/controllers/api/v1/users_controller.rb +14 -40
  19. data/lib/generators/happy_seed/api/templates/config/initializers/apitome.rb +1 -1
  20. data/lib/generators/happy_seed/api/templates/docs/README.01.api.rdoc +4 -1
  21. data/lib/generators/happy_seed/api/templates/docs/api.md +2 -2
  22. data/lib/generators/happy_seed/api/templates/spec/acceptance/api/v1/user_tokens_spec.rb +10 -53
  23. data/lib/generators/happy_seed/api/templates/spec/acceptance/api/v1/users_spec.rb +17 -61
  24. data/lib/generators/happy_seed/base/base_generator.rb +47 -19
  25. data/lib/generators/happy_seed/base/templates/app/controllers/setup_controller.rb +1 -1
  26. data/lib/generators/happy_seed/base/templates/app/views/setup/index.html.haml +6 -3
  27. data/lib/generators/happy_seed/base/templates/application_controller.rb +1 -1
  28. data/lib/generators/happy_seed/base/templates/docs/README.00.base.rdoc +3 -3
  29. data/lib/generators/happy_seed/bootstrap/bootstrap_generator.rb +5 -2
  30. data/lib/generators/happy_seed/bootstrap/templates/app/assets/stylesheets/application.scss +5 -1
  31. data/lib/generators/happy_seed/bootstrap/templates/app/assets/stylesheets/components/_profile_panels.scss +62 -0
  32. data/lib/generators/happy_seed/bootstrap/templates/app/assets/stylesheets/components/_slideup_header.scss +51 -0
  33. data/lib/generators/happy_seed/bootstrap/templates/app/assets/stylesheets/shared/_grid.scss +0 -12
  34. data/lib/generators/happy_seed/bootstrap/templates/app/views/application/_javascripts.html.haml +7 -4
  35. data/lib/generators/happy_seed/bootstrap/templates/docs/README.01.bootstrap.rdoc +3 -0
  36. data/lib/generators/happy_seed/ckeditor/ckeditor_generator.rb +31 -0
  37. data/lib/generators/happy_seed/ckeditor/templates/docs/README.01.ckeditor.rdoc +35 -0
  38. data/lib/generators/happy_seed/devise/devise_generator.rb +12 -19
  39. data/lib/generators/happy_seed/devise/templates/app/views/devise/confirmations/new.html.haml +17 -0
  40. data/lib/generators/happy_seed/devise/templates/app/views/devise/mailer/confirmation_instructions.html.erb +14 -0
  41. data/lib/generators/happy_seed/devise/templates/app/views/devise/mailer/confirmation_instructions.text.rhtml +7 -0
  42. data/lib/generators/happy_seed/devise/templates/app/views/devise/mailer/password_change.html.erb +3 -0
  43. data/lib/generators/happy_seed/devise/templates/app/views/devise/mailer/reset_password_instructions.html.erb +15 -0
  44. data/lib/generators/happy_seed/devise/templates/app/views/devise/mailer/reset_password_instructions.text.erb +11 -0
  45. data/lib/generators/happy_seed/devise/templates/app/views/devise/mailer/unlock_instructions.html.erb +7 -0
  46. data/lib/generators/happy_seed/devise/templates/app/views/devise/passwords/edit.html.haml +14 -13
  47. data/lib/generators/happy_seed/devise/templates/app/views/devise/passwords/new.html.haml +12 -16
  48. data/lib/generators/happy_seed/devise/templates/app/views/devise/registrations/edit.html.haml +28 -40
  49. data/lib/generators/happy_seed/devise/templates/app/views/devise/registrations/new.html.haml +16 -24
  50. data/lib/generators/happy_seed/devise/templates/app/views/devise/sessions/new.html.haml +13 -18
  51. data/lib/generators/happy_seed/devise/templates/app/views/devise/shared/_links.html.erb +25 -0
  52. data/lib/generators/happy_seed/devise/templates/app/views/devise/unlocks/new.html.erb +16 -0
  53. data/lib/generators/happy_seed/devise/templates/docs/README.03.devise.rdoc +2 -2
  54. data/lib/generators/happy_seed/devise/templates/spec/factories/users.rb +5 -4
  55. data/lib/generators/happy_seed/devise/templates/spec/features/registration_spec.rb +149 -0
  56. data/lib/generators/happy_seed/devise/templates/spec/mailers/previews/devise_preview.rb +28 -0
  57. data/lib/generators/happy_seed/devise_confirmable/devise_confirmable_generator.rb +45 -0
  58. data/lib/generators/happy_seed/devise_confirmable/templates/add_confirmable_to_devise.rb +24 -0
  59. data/lib/generators/happy_seed/devise_confirmable/templates/app/controllers/confirmations_controller.rb +10 -0
  60. data/lib/generators/happy_seed/devise_confirmable/templates/app/views/devise/invitations/edit.html.haml +22 -0
  61. data/lib/generators/happy_seed/devise_confirmable/templates/app/views/devise/invitations/new.html.haml +20 -0
  62. data/lib/generators/happy_seed/devise_confirmable/templates/app/views/devise/mailer/invitation_instructions.html.erb +20 -0
  63. data/lib/generators/happy_seed/devise_confirmable/templates/docs/README.03.devise_confirmable.rdoc +23 -0
  64. data/lib/generators/happy_seed/devise_invitable/devise_invitable_generator.rb +3 -1
  65. data/lib/generators/happy_seed/devise_invitable/templates/app/views/devise/invitations/edit.html.haml +3 -2
  66. data/lib/generators/happy_seed/devise_invitable/templates/app/views/devise/invitations/new.html.haml +3 -2
  67. data/lib/generators/happy_seed/devise_invitable/templates/app/views/devise/mailer/invitation_instructions.html.erb +20 -0
  68. data/lib/generators/happy_seed/devise_invitable/templates/spec/features/invitations_spec.rb +61 -0
  69. data/lib/generators/happy_seed/facebook/facebook_generator.rb +2 -0
  70. data/lib/generators/happy_seed/facebook/templates/spec/features/facebook_registration_spec.rb +72 -0
  71. data/lib/generators/happy_seed/googleoauth/googleoauth_generator.rb +1 -1
  72. data/lib/generators/happy_seed/happy_seed_generator.rb +1 -3
  73. data/lib/generators/happy_seed/html_email/html_email_generator.rb +32 -0
  74. data/lib/generators/happy_seed/html_email/templates/app/views/layouts/mailer.html.erb +244 -0
  75. data/lib/generators/happy_seed/html_email/templates/docs/README.01.html_email.rdoc +25 -0
  76. data/lib/generators/happy_seed/omniauth/omniauth_generator.rb +4 -2
  77. data/lib/generators/happy_seed/omniauth/templates/app/controllers/omniauth_callbacks_controller.rb +3 -13
  78. data/lib/generators/happy_seed/omniauth/templates/app/models/identity.rb +13 -9
  79. data/lib/generators/happy_seed/omniauth/templates/docs/README.04.omniauth.rdoc +5 -5
  80. data/lib/generators/happy_seed/omniauth/templates/spec/factories/oauth.rb +6 -1
  81. data/lib/generators/happy_seed/omniauth/templates/spec/features/oauth_registration_spec.rb +80 -0
  82. data/lib/generators/happy_seed/omniauth/templates/spec/models/identity_spec.rb +39 -12
  83. data/lib/generators/happy_seed/omniauth/templates/{app/models/form_user.rb → user.rb} +4 -5
  84. data/lib/generators/happy_seed/plugin/plugin_generator.rb +13 -11
  85. data/lib/generators/happy_seed/react/react_generator.rb +36 -0
  86. data/lib/generators/happy_seed/react/templates/docs/README.10.react.rdoc +20 -0
  87. data/lib/generators/happy_seed/roles/roles_generator.rb +38 -0
  88. data/lib/generators/happy_seed/roles/templates/ability.rb +9 -0
  89. data/lib/generators/happy_seed/roles/templates/docs/README.03.roles.rdoc +23 -0
  90. data/lib/generators/happy_seed/simple_cms/simple_cms_generator.rb +41 -0
  91. data/lib/generators/happy_seed/simple_cms/templates/app/admin/simple_content.rb +42 -0
  92. data/lib/generators/happy_seed/simple_cms/templates/app/controllers/simple_content_controller.rb +7 -0
  93. data/lib/generators/happy_seed/simple_cms/templates/app/models/simple_content.rb +5 -0
  94. data/lib/generators/happy_seed/simple_cms/templates/app/views/splash/faq.html.haml +13 -0
  95. data/lib/generators/happy_seed/simple_cms/templates/app/views/splash/index.html.haml +79 -0
  96. data/lib/generators/happy_seed/simple_cms/templates/application_helper.rb +18 -0
  97. data/lib/generators/happy_seed/simple_cms/templates/create_simple_contents.rb +14 -0
  98. data/lib/generators/happy_seed/simple_cms/templates/docs/README.04.simple_cms.rdoc +32 -0
  99. data/lib/generators/happy_seed/simple_cms/templates/spec/factories/oauth.rb +10 -0
  100. data/lib/generators/happy_seed/simple_cms/templates/spec/features/oauth_registration_spec.rb +80 -0
  101. data/lib/generators/happy_seed/simple_cms/templates/spec/models/identity_spec.rb +49 -0
  102. data/lib/generators/happy_seed/splash/templates/app/assets/stylesheets/splash.css.scss +119 -84
  103. data/lib/generators/happy_seed/splash/templates/app/controllers/splash_controller.rb +1 -1
  104. data/lib/generators/happy_seed/splash/templates/app/views/layouts/splash.html.haml +15 -18
  105. data/lib/generators/happy_seed/splash/templates/app/views/splash/index.html.haml +54 -92
  106. data/lib/generators/happy_seed/splash/templates/docs/README.02.splash.rdoc +2 -2
  107. data/lib/generators/happy_seed/splash/templates/spec/controllers/splash_controller_spec.rb +11 -3
  108. data/lib/generators/happy_seed/static/templates/source/stylesheets/application.css.scss +1 -1
  109. data/lib/generators/happy_seed/static_blog/templates/Gemfile.lock +45 -49
  110. data/lib/generators/happy_seed/twitter/templates/spec/features/twitter_oauth_registration_spec.rb +57 -0
  111. data/lib/generators/happy_seed/twitter/twitter_generator.rb +2 -1
  112. data/lib/happy_seed/cli.rb +1 -1
  113. data/lib/happy_seed/engine.rb +12 -0
  114. data/lib/happy_seed/version.rb +1 -1
  115. data/lib/tasks/seed.rake +56 -0
  116. data/{test → spec}/dummy/Rakefile +0 -0
  117. data/spec/dummy/app/assets/config/manifest.js +5 -0
  118. data/{test → spec}/dummy/app/assets/javascripts/application.js +3 -3
  119. data/spec/dummy/app/assets/javascripts/cable.coffee +11 -0
  120. data/{test → spec}/dummy/app/assets/stylesheets/application.css +4 -4
  121. data/spec/dummy/app/channels/application_cable/channel.rb +5 -0
  122. data/spec/dummy/app/channels/application_cable/connection.rb +5 -0
  123. data/{test → spec}/dummy/app/controllers/application_controller.rb +0 -0
  124. data/{test → spec}/dummy/app/helpers/application_helper.rb +0 -0
  125. data/spec/dummy/app/jobs/application_job.rb +2 -0
  126. data/spec/dummy/app/mailers/application_mailer.rb +4 -0
  127. data/spec/dummy/app/models/application_record.rb +3 -0
  128. data/spec/dummy/app/views/layouts/application.html.erb +15 -0
  129. data/spec/dummy/app/views/layouts/mailer.html.erb +13 -0
  130. data/spec/dummy/app/views/layouts/mailer.text.erb +1 -0
  131. data/{test → spec}/dummy/bin/bundle +0 -0
  132. data/{test → spec}/dummy/bin/rails +1 -1
  133. data/{test → spec}/dummy/bin/rake +0 -0
  134. data/spec/dummy/bin/setup +34 -0
  135. data/spec/dummy/bin/update +29 -0
  136. data/spec/dummy/config.ru +8 -0
  137. data/spec/dummy/config/application.rb +21 -0
  138. data/{test → spec}/dummy/config/boot.rb +0 -0
  139. data/spec/dummy/config/cable.yml +10 -0
  140. data/{test → spec}/dummy/config/database.yml +0 -0
  141. data/{test → spec}/dummy/config/environment.rb +0 -0
  142. data/{test → spec}/dummy/config/environments/development.rb +28 -3
  143. data/{test → spec}/dummy/config/environments/production.rb +29 -24
  144. data/{test → spec}/dummy/config/environments/test.rb +6 -3
  145. data/spec/dummy/config/initializers/active_record_belongs_to_required_by_default.rb +6 -0
  146. data/spec/dummy/config/initializers/application_controller_renderer.rb +6 -0
  147. data/{test → spec}/dummy/config/initializers/assets.rb +3 -0
  148. data/{test → spec}/dummy/config/initializers/backtrace_silencers.rb +0 -0
  149. data/spec/dummy/config/initializers/callback_terminator.rb +6 -0
  150. data/{test → spec}/dummy/config/initializers/cookies_serializer.rb +3 -1
  151. data/{test → spec}/dummy/config/initializers/filter_parameter_logging.rb +0 -0
  152. data/{test → spec}/dummy/config/initializers/inflections.rb +0 -0
  153. data/{test → spec}/dummy/config/initializers/mime_types.rb +0 -0
  154. data/spec/dummy/config/initializers/per_form_csrf_tokens.rb +4 -0
  155. data/spec/dummy/config/initializers/request_forgery_protection.rb +4 -0
  156. data/{test → spec}/dummy/config/initializers/session_store.rb +0 -0
  157. data/{test → spec}/dummy/config/initializers/wrap_parameters.rb +2 -2
  158. data/{test → spec}/dummy/config/locales/en.yml +0 -0
  159. data/spec/dummy/config/puma.rb +47 -0
  160. data/spec/dummy/config/routes.rb +3 -0
  161. data/{test → spec}/dummy/config/secrets.yml +3 -3
  162. data/spec/dummy/db/schema.rb +16 -0
  163. data/{test → spec}/dummy/public/404.html +0 -0
  164. data/{test → spec}/dummy/public/422.html +0 -0
  165. data/{test → spec}/dummy/public/500.html +0 -0
  166. data/{test/dummy/public/favicon.ico → spec/dummy/public/apple-touch-icon-precomposed.png} +0 -0
  167. data/spec/dummy/public/apple-touch-icon.png +0 -0
  168. data/spec/dummy/public/favicon.ico +0 -0
  169. data/spec/rails_helper.rb +58 -0
  170. data/spec/spec_helper.rb +91 -0
  171. metadata +195 -89
  172. data/lib/generators/happy_seed/api/templates/app/controllers/api/v1/configurations_controller.rb +0 -11
  173. data/lib/generators/happy_seed/api/templates/spec/acceptance/api/v1/configurations_spec.rb +0 -21
  174. data/lib/generators/happy_seed/base/templates/config/puma.rb +0 -15
  175. data/lib/generators/happy_seed/base/templates/spec/support/controller_helpers.rb +0 -12
  176. data/lib/generators/happy_seed/bootstrap/templates/app/assets/stylesheets/sections/_profile_page.scss +0 -9
  177. data/lib/generators/happy_seed/bootstrap/templates/lib/templates/haml/scaffold/_form.html.haml +0 -5
  178. data/lib/generators/happy_seed/devise/templates/spec/features/forgot_password_spec.rb +0 -54
  179. data/lib/generators/happy_seed/devise/templates/test/mailers/previews/devise_preview.rb +0 -13
  180. data/lib/generators/happy_seed/omniauth/templates/spec/features/registration_spec.rb +0 -81
  181. data/lib/generators/happy_seed/static/templates/Gemfile.lock +0 -158
  182. data/lib/tasks/seed_tasks.rake +0 -4
  183. data/test/dummy/README.rdoc +0 -28
  184. data/test/dummy/app/views/layouts/application.html.erb +0 -14
  185. data/test/dummy/config.ru +0 -4
  186. data/test/dummy/config/application.rb +0 -23
  187. data/test/dummy/config/initializers/jazz_hands.rb +0 -5
  188. data/test/dummy/config/routes.rb +0 -56
  189. data/test/seed_test.rb +0 -7
  190. data/test/test_helper.rb +0 -15
@@ -1,7 +1,7 @@
1
1
  class Api::V1::BaseController < ApplicationController
2
2
  include ModelHash
3
3
 
4
- attr_accessor :current_user, :current_user_token, :installation_identifier
4
+ attr_accessor :current_user, :current_user_token
5
5
 
6
6
  protected
7
7
 
@@ -10,11 +10,10 @@ class Api::V1::BaseController < ApplicationController
10
10
  end
11
11
 
12
12
  def requires_authentication_token
13
- authenticate_or_request_with_http_token do |token, options|
14
- self.installation_identifier = options[:installation_identifier]
15
- self.current_user_token = UserToken.where(token: token, installation_identifier: installation_identifier).first
13
+ authenticate_or_request_with_http_token do |token, _|
14
+ self.current_user_token = UserToken.find_by access_token: token
16
15
  self.current_user = sign_in(:user, current_user_token.user) if current_user_token.try(:user).present?
17
16
  current_user.present? ? (current_user_token.try(:touch); true) : false
18
17
  end
19
18
  end
20
- end
19
+ end
@@ -1,34 +1,17 @@
1
1
  module Api::V1::ModelHash
2
- def configuration_hash
3
- {
4
- pusher: {
5
- url: Rails.application.secrets.pusher_url
6
- },
7
- aws: {
8
- access_key_id: Rails.application.secrets.aws_access_key_id,
9
- secret_access_key: Rails.application.secrets.aws_secret_access_key,
10
- s3_bucket: Rails.application.secrets.s3_bucket
11
- }
12
- }
13
- end
14
-
15
2
  def user_hash(user)
16
3
  {
17
4
  id: user.id,
18
- login: user.login,
19
- email: user.email,
20
- first_name: user.first_name,
21
- last_name: user.last_name
5
+ email: user.email
22
6
  }
23
7
  end
24
8
 
25
9
  def user_token_hash(user_token, *args)
26
10
  options = args.extract_options!
27
11
  output = {
28
- token: user_token.token,
29
- push_token: user_token.push_token
12
+ access_token: user_token.access_token
30
13
  }
31
14
  output.update(user: user_hash(user_token.user)) if true == options[:user]
32
15
  output
33
16
  end
34
- end
17
+ end
@@ -3,56 +3,33 @@ class Api::V1::UserTokensController < Api::V1::BaseController
3
3
 
4
4
  def create
5
5
  respond_to do |format|
6
- user = User.where('LOWER(email) = ?', user_token_params[:email].try(:downcase)).first
6
+ user = User.where('LOWER(email) = ?', user_params[:email].try(:downcase)).first
7
7
  if user.present?
8
- if user.valid_password?(user_token_params[:password])
8
+ if user.valid_password?(user_params[:password])
9
9
  if user.active_for_authentication?
10
- user_token = user.user_tokens.where(installation_identifier: user_token_params[:installation_identifier]).first_or_initialize
11
- user_token.update push_token: user_token_params[:push_token]
12
- user_token.update form_factor: user_token_params[:form_factor]
13
- user_token.update os: user_token_params[:os]
10
+ user_token = user.user_tokens.create
14
11
  if user_token.persisted?
15
12
  format.json do
16
- render json: {user_token: user_token_hash(user_token, user: true)}, status: :ok
13
+ render json: { user_token: user_token_hash(user_token, user: true) }, status: :ok
17
14
  end
18
15
  else
19
16
  format.json do
20
- render json: {errors: user_token.errors}, status: :unprocessable_entity
17
+ render json: { errors: user_token.errors }, status: :unprocessable_entity
21
18
  end
22
19
  end
23
20
  else
24
21
  format.json do
25
- render json: {errors: {user: 'is locked'}}, status: :forbidden
22
+ render json: { errors: { user: 'is locked' } }, status: :forbidden
26
23
  end
27
24
  end
28
25
  else
29
26
  format.json do
30
- render json: {errors: {password: 'is invalid'}}, status: :forbidden
27
+ render json: { errors: { password: 'is invalid' } }, status: :forbidden
31
28
  end
32
29
  end
33
30
  else
34
31
  format.json do
35
- render json: {errors: {email: 'not found'}}, status: :not_found
36
- end
37
- end
38
- end
39
- end
40
-
41
- def update
42
- respond_to do |format|
43
- if current_user_token.try(:persisted?)
44
- if current_user_token.update(user_token_params.slice :push_token)
45
- format.json do
46
- render json: {user_token: user_token_hash(current_user_token)}, status: :ok
47
- end
48
- else
49
- format.json do
50
- render json: {errors: current_user_token.errors}, status: :unprocessable_entity
51
- end
52
- end
53
- else
54
- format.json do
55
- render json: {errors: {token: 'not found'}}, status: :not_found
32
+ render json: { errors: { email: 'not found' } }, status: :not_found
56
33
  end
57
34
  end
58
35
  end
@@ -63,11 +40,11 @@ class Api::V1::UserTokensController < Api::V1::BaseController
63
40
  if current_user_token.try(:persisted?)
64
41
  current_user_token.destroy
65
42
  format.json do
66
- render json: {user_token: user_token_hash(current_user_token, user: true)}, status: :ok
43
+ render json: { user_token: user_token_hash(current_user_token, user: true) }, status: :ok
67
44
  end
68
45
  else
69
46
  format.json do
70
- render json: {errors: {token: 'not found'}}, status: :not_found
47
+ render json: { errors: { token: 'not found' } }, status: :not_found
71
48
  end
72
49
  end
73
50
  end
@@ -75,7 +52,7 @@ class Api::V1::UserTokensController < Api::V1::BaseController
75
52
 
76
53
  private
77
54
 
78
- def user_token_params
79
- params[:user_token].permit :email, :password, :installation_identifier, :push_token, :form_factor, :os
55
+ def user_params
56
+ params[:user].permit :email, :password
80
57
  end
81
- end
58
+ end
@@ -1,4 +1,3 @@
1
-
2
1
  class Api::V1::UsersController < Api::V1::BaseController
3
2
  before_action :requires_authentication_token, except: %w(create forgot_password reset_password)
4
3
  before_action :set_user, only: %w(show update)
@@ -7,11 +6,11 @@ class Api::V1::UsersController < Api::V1::BaseController
7
6
  respond_to do |format|
8
7
  if @user.present?
9
8
  format.json do
10
- render json: {user: user_hash(@user)}, status: :ok
9
+ render json: { user: user_hash(@user) }, status: :ok
11
10
  end
12
11
  else
13
12
  format.json do
14
- render json: {errors: {id: 'not found'}}, status: :not_found
13
+ render json: { errors: { id: 'not found' } }, status: :not_found
15
14
  end
16
15
  end
17
16
  end
@@ -21,39 +20,19 @@ class Api::V1::UsersController < Api::V1::BaseController
21
20
  respond_to do |format|
22
21
  user = User.new user_params
23
22
  if user.save
24
- user_token = user.user_tokens.where(installation_identifier: user_token_params[:installation_identifier]).first_or_create
23
+ user_token = user.user_tokens.create
25
24
  if user_token.persisted?
26
25
  format.json do
27
- render json: {user_token: user_token_hash(user_token, user: true)}, status: :created
28
- end
29
- else
30
- format.json do
31
- render json: {errors: user_token.errors}, status: :unprocessable_entity
32
- end
33
- end
34
- else
35
- format.json do
36
- render json: {errors: user.errors}, status: :unprocessable_entity
37
- end
38
- end
39
- end
40
- end
41
-
42
- def update
43
- respond_to do |format|
44
- if @user.present?
45
- if @user.update(user_params)
46
- format.json do
47
- render json: {user: user_hash(@user)}, status: :ok
26
+ render json: { user_token: user_token_hash(user_token, user: true) }, status: :created
48
27
  end
49
28
  else
50
29
  format.json do
51
- render json: {errors: @user.errors}, status: :unprocessable_entity
30
+ render json: { errors: user_token.errors }, status: :unprocessable_entity
52
31
  end
53
32
  end
54
33
  else
55
34
  format.json do
56
- render json: {errors: {id: 'not found'}}, status: :not_found
35
+ render json: { errors: user.errors }, status: :unprocessable_entity
57
36
  end
58
37
  end
59
38
  end
@@ -61,14 +40,14 @@ class Api::V1::UsersController < Api::V1::BaseController
61
40
 
62
41
  def forgot_password
63
42
  respond_to do |format|
64
- user = FormUser.where(email: user_params[:email]).first
43
+ user = User.find_by email: user_params[:email]
65
44
  format.json do
66
45
  if user.present?
67
46
  user.send_reset_password_instructions
68
47
  user.save
69
- render json: {user: user_hash(user).slice(:email)}, status: :ok
48
+ render json: { user: user_hash(user).slice(:email) }, status: :ok
70
49
  else
71
- render json: {errors: {email: 'not found'}}, status: :not_found
50
+ render json: { errors: { email: 'not found' } }, status: :not_found
72
51
  end
73
52
  end
74
53
  end
@@ -80,13 +59,12 @@ class Api::V1::UsersController < Api::V1::BaseController
80
59
  format.json do
81
60
  if user.present?
82
61
  if user.errors.empty?
83
- render json: {user: user_hash(user)}, status: :ok
62
+ render json: { user: user_hash(user) }, status: :ok
84
63
  else
85
- p user.errors
86
- render json: {errors: user.errors}, status: :unprocessable_entity
64
+ render json: { errors: user.errors }, status: :unprocessable_entity
87
65
  end
88
66
  else
89
- render json: {errors: {email: 'not found'}}, status: :not_found
67
+ render json: { errors: { email: 'not found' } }, status: :not_found
90
68
  end
91
69
  end
92
70
  end
@@ -99,10 +77,6 @@ class Api::V1::UsersController < Api::V1::BaseController
99
77
  end
100
78
 
101
79
  def user_params
102
- params.require(:user).permit :email, :password, :username, :first_name, :last_name, :avatar, :reset_password_token, :password_confirmation, invited: %w(email full_name).map(&:to_sym)
103
- end
104
-
105
- def user_token_params
106
- params[:user_token].permit :installation_identifier
80
+ params.require(:user).permit :email, :password, :username, :reset_password_token, :password_confirmation, invited: %w(email full_name).map(&:to_sym)
107
81
  end
108
- end
82
+ end
@@ -2,7 +2,7 @@ Apitome.setup do |config|
2
2
  # This determines where the Apitome routes will be mounted. Changing this to '/api/documentation' for instance would
3
3
  # allow you to browse to http://localhost:3000/api/documentation to see your api documentation. Set to nil and mount
4
4
  # it yourself if you need to.
5
- config.mount_at = '/api/docs'
5
+ config.mount_at = '/docs/api'
6
6
 
7
7
  # This defaults to Rails.root if left nil. If you're providing documentation for an engine using a dummy application
8
8
  # it can be useful to set this to your engines root.. E.g. Application::Engine.root
@@ -10,7 +10,10 @@ The `happy_seed:api` generator
10
10
 
11
11
  ### Why do you want this?
12
12
 
13
- This allows you to invite users to the site and have them sign up through a link.
13
+ 1. creates a base api framework for a project that is not exclusively api, and has html as well
14
+ 2. creates user signup, login and logout endpoints
15
+ 3. creates integration tests for these endpoints
16
+ 4. generates documentation at docs/api for these endpoints
14
17
 
15
18
  ### Environment Variables
16
19
 
@@ -1,4 +1,4 @@
1
- Apitome Documentation
2
- =====================
1
+ Documentation
2
+ =============
3
3
 
4
4
  This file was automatically generated, and can be found at `docs/api.md`.
@@ -5,32 +5,25 @@ resource 'Token' do
5
5
  let(:user) { FactoryGirl.create :user_with_token }
6
6
 
7
7
  post '/v1/token', format: :json do
8
- parameter :email, 'Email', required: true, scope: :user_token
9
- parameter :password, 'Password', required: true, scope: :user_token
10
- parameter :installation_identifier, 'Unique Installation Identifier', required: true, scope: :user_token
11
- parameter :push_token, 'Unique push token', required: true, scope: :user_token
12
- parameter :form_factor, 'smartphone tablet10 tablet7 desktop', required: true, scope: :user_token
13
- parameter :os, 'ios android bb wp7', required: true, scope: :user_token
8
+ before { user.user_tokens.destroy }
9
+
10
+ parameter :email, 'Email', required: true, scope: :user
11
+ parameter :password, 'Password', required: true, scope: :user
14
12
 
15
13
  let(:email) { user.email }
16
14
  let(:password) { user.password }
17
- let(:installation_identifier) { Faker::Lorem.characters 10 }
18
- let(:push_token) { Faker::Lorem.characters 10 }
19
- let(:form_factor) { %w(smartphone tablet10 tablet7 desktop).sample }
20
- let(:os) { %w(ios android bb wp7).sample }
21
15
 
22
16
  example_request 'sign in' do
23
17
  response_json = JSON.parse response_body
24
18
 
25
19
  expect(response_headers['Content-Type']).to eq('application/json; charset=utf-8')
26
20
  expect(status).to eq(200)
27
- expect(response_json['user_token']).to have_key('token')
28
- expect(response_json['user_token']['push_token']).to eq(push_token)
21
+ expect(response_json['user_token']).to have_key('access_token')
29
22
  expect(response_json['user_token']).to have_key('user')
30
23
  end
31
24
 
32
25
  example 'sign in with wrong email', document: false do
33
- do_request params.tap { |parameters| parameters['user_token']['email'] = Faker::Internet.free_email }
26
+ do_request params.tap { |parameters| parameters['user']['email'] = Faker::Internet.free_email }
34
27
  response_json = JSON.parse response_body
35
28
 
36
29
  expect(status).to eq(404)
@@ -38,62 +31,26 @@ resource 'Token' do
38
31
  expect(response_json['errors']).to have_key('email')
39
32
  end
40
33
 
41
- # example 'sign in with locked user', document: false do
42
- # user.lock_access! send_instructions: false
43
- # do_request
44
- # response_json = JSON.parse response_body
45
-
46
- # expect(status).to eq(403)
47
- # expect(response_json['id']).to be_nil
48
- # expect(response_json['errors']).to have_key('user')
49
- # end
50
-
51
34
  example 'sign in with wrong password', document: false do
52
- do_request params.tap { |parameters| parameters['user_token']['password'] = Faker::Lorem.characters 8 }
35
+ do_request params.tap { |parameters| parameters['user']['password'] = Faker::Lorem.characters 8 }
53
36
  response_json = JSON.parse response_body
54
37
 
55
38
  expect(status).to eq(403)
56
39
  expect(response_json['id']).to be_nil
57
40
  expect(response_json['errors']).to have_key('password')
58
41
  end
59
-
60
- example 'sign in without installation identifier', document: false do
61
- do_request params.tap { |parameters| parameters['user_token'].delete 'installation_identifier' }
62
- response_json = JSON.parse response_body
63
-
64
- expect(status).to eq(422)
65
- expect(response_json['id']).to be_nil
66
- expect(response_json['errors']).to have_key('installation_identifier')
67
- end
68
- end
69
-
70
- put '/v1/token', format: :json do
71
- header 'AUTHORIZATION', :token
72
-
73
- parameter :push_token, 'Unique push token', required: true, scope: :user_token
74
-
75
- let(:token) { ActionController::HttpAuthentication::Token.encode_credentials user.user_tokens.first.try(:token), installation_identifier: user.user_tokens.first.try(:installation_identifier) }
76
- let(:push_token) { Faker::Lorem.characters 10 }
77
-
78
- example_request 'update' do
79
- explanation 'At the moment, only push token can be updated'
80
- response_json = JSON.parse response_body
81
-
82
- expect(status).to eq(200)
83
- expect(response_json['user_token']['push_token']).to eq(push_token)
84
- end
85
42
  end
86
43
 
87
44
  delete '/v1/token', format: :json do
88
45
  header 'AUTHORIZATION', :token
89
- let(:token) { ActionController::HttpAuthentication::Token.encode_credentials user.user_tokens.first.try(:token), installation_identifier: user.user_tokens.first.try(:installation_identifier) }
46
+ let(:token) { ActionController::HttpAuthentication::Token.encode_credentials user.user_tokens.first.try :access_token }
90
47
 
91
48
  example_request 'sign out' do
92
49
  response_json = JSON.parse response_body
93
50
 
94
51
  expect(status).to eq(200)
95
- expect(response_json['user_token']).to have_key('token')
52
+ expect(response_json['user_token']).to have_key('access_token')
96
53
  expect(response_json['user_token']).to have_key('user')
97
54
  end
98
55
  end
99
- end
56
+ end
@@ -1,51 +1,35 @@
1
1
  require 'rails_helper'
2
2
  require 'rspec_api_documentation/dsl'
3
3
 
4
- class User
5
- def _set_reset_password_token
6
- set_reset_password_token
7
- end
8
- end
9
-
10
4
  resource 'User' do
11
5
  let(:user) { FactoryGirl.build :user_with_token }
12
- # before {
13
- # @request.env["devise.mapping"] = Devise.mappings[:user]
14
- # }
15
6
 
16
7
  post '/v1/users', format: :json do
17
- parameter :first_name, 'First Name', scope: :user
18
- parameter :last_name, 'Last Name', scope: :user
19
- parameter :login, 'Login', required: true, scope: :user
20
8
  parameter :email, 'Email', required: true, scope: :user
21
9
  parameter :password, 'Password', required: true, scope: :user
22
- parameter :installation_identifier, 'Unique Installation Identifier', required: true, scope: :user_token
23
- parameter :avatar, 'Avatar', scope: :user
24
10
 
25
- let(:first_name) { user.first_name }
26
- let(:last_name) { user.last_name }
27
- let(:login) { user.login }
28
11
  let(:email) { user.email }
29
12
  let(:password) { user.password }
30
- let(:installation_identifier) { Faker::Lorem.characters 10 }
31
- # let(:avatar) { fixture_file_upload Rails.root.join('spec', 'resources', 'photo.jpg'), 'image/jpeg' }
32
13
 
33
14
  example_request 'sign up' do
34
15
  response_json = JSON.parse response_body
35
16
 
36
17
  expect(status).to eq(201)
37
- expect(response_json['user_token']).to have_key('token')
18
+ expect(response_json['user_token']).to have_key('access_token')
38
19
  expect(response_json['user_token']).to have_key('user')
39
20
  end
40
- end
41
21
 
42
- post '/v1/users/forgot_password', format: :json do
43
- before do
44
- user.save
45
- # @request.env["devise.mapping"] = :user
46
- # user.send_reset_password_instructions
22
+ example 'sign up error', document: false do
23
+ do_request params.tap { |parameters| parameters['user']['email'] = nil }
24
+ response_json = JSON.parse response_body
25
+
26
+ expect(status).to eq(422)
27
+ expect(response_json['errors']).to have_key('email')
47
28
  end
29
+ end
48
30
 
31
+ post '/v1/users/forgot_password', format: :json do
32
+ before { user.save }
49
33
 
50
34
  parameter :email, 'Email', required: true, scope: :user
51
35
  let(:email) { user.email }
@@ -53,28 +37,26 @@ resource 'User' do
53
37
  example_request 'forgot password' do
54
38
  response_json = JSON.parse response_body
55
39
 
56
- expect(status).to eq(200)
40
+ expect(status).to eq 200
57
41
  expect(response_json['user']['email']).to eq(email)
58
42
  end
59
43
  end
60
44
 
61
45
  put '/v1/users/reset_password', format: :json do
62
- before do
63
- user.save
64
- end
46
+ before { user.save }
65
47
 
66
48
  parameter :reset_password_token, 'Reset password token', required: true, scope: :user
67
49
  parameter :password, 'Password', required: true, scope: :user
68
50
  parameter :password_confirmation, 'Password confirmation', required: true, scope: :user
69
51
 
70
- let(:reset_password_token) { user._set_reset_password_token }
52
+ let(:reset_password_token) { user.send :set_reset_password_token }
71
53
  let(:password) { Faker::Internet.password 8 }
72
54
  let(:password_confirmation) { password }
73
55
 
74
56
  example_request 'reset password' do
75
57
  response_json = JSON.parse response_body
76
58
 
77
- expect(status).to eq(200)
59
+ expect(status).to eq 200
78
60
  expect(response_json['user']).to have_key('id')
79
61
  end
80
62
  end
@@ -86,40 +68,14 @@ resource 'User' do
86
68
 
87
69
  parameter :id, 'User Unique Identifier', required: true
88
70
 
89
- let(:token) { ActionController::HttpAuthentication::Token.encode_credentials user.user_tokens.first.try(:token), installation_identifier: user.user_tokens.first.try(:installation_identifier) }
71
+ let(:token) { ActionController::HttpAuthentication::Token.encode_credentials user.user_tokens.first.try(:access_token) }
90
72
  let(:id) { user.id }
91
73
 
92
74
  example_request 'show' do
93
75
  response_json = JSON.parse response_body
94
76
 
95
- expect(status).to eq(200)
77
+ expect(status).to eq 200
96
78
  expect(response_json['user']).to have_key('id')
97
79
  end
98
80
  end
99
-
100
- put '/v1/users/:id', format: :json do
101
- before { user.save }
102
-
103
- header 'AUTHORIZATION', :token
104
-
105
- parameter :id, 'User Unique Identifier', required: true
106
- parameter :first_name, 'Full Name', scope: :user
107
- parameter :last_name, 'Full Name', scope: :user
108
- parameter :login, 'User Name', scope: :user
109
-
110
- let(:token) { ActionController::HttpAuthentication::Token.encode_credentials user.user_tokens.first.try(:token), installation_identifier: user.user_tokens.first.try(:installation_identifier) }
111
- let(:id) { user.id }
112
- let(:first_name) { Faker::Name.first_name }
113
- let(:last_name) { Faker::Name.last_name }
114
- let(:login) { Faker::Internet.user_name }
115
- # let(:avatar) { fixture_file_upload Rails.root.join('spec', 'resources', 'photo.jpg'), 'image/jpeg' }
116
-
117
- example_request 'update' do
118
- explanation 'While this illustrates all possible parameters, any subset can be used. Example: to change only full_name, omit other optional parameters'
119
- response_json = JSON.parse response_body
120
-
121
- expect(status).to eq(200)
122
- expect(response_json['user']).to have_key('id')
123
- end
124
- end
125
- end
81
+ end