happy_seed 0.0.19 → 0.0.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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