rockstart 0.1.0 → 0.1.1

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 (240) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +6 -0
  3. data/lib/generators/rockstart/authorization/USAGE +9 -0
  4. data/lib/generators/rockstart/authorization/auth0/USAGE +10 -0
  5. data/lib/generators/rockstart/authorization/auth0/auth0_generator.rb +49 -0
  6. data/lib/generators/rockstart/authorization/auth0/templates/app/controllers/auth_controller.rb.tt +47 -0
  7. data/lib/generators/rockstart/authorization/auth0/templates/app/controllers/concerns/session_auth.rb +23 -0
  8. data/lib/generators/rockstart/authorization/auth0/templates/app/models/user.rb.tt +82 -0
  9. data/lib/generators/rockstart/authorization/auth0/templates/app/views/auth/new.html.erb +3 -0
  10. data/lib/generators/rockstart/authorization/auth0/templates/app/views/auth/sign_out.html.erb +1 -0
  11. data/lib/generators/rockstart/authorization/auth0/templates/auth0.en.yml +5 -0
  12. data/lib/generators/rockstart/authorization/auth0/templates/auth0_initializer.rb +27 -0
  13. data/lib/generators/rockstart/authorization/auth0/templates/auth0_util.rb.tt +38 -0
  14. data/lib/generators/rockstart/authorization/auth0/templates/auth0_util_spec.rb +21 -0
  15. data/lib/generators/rockstart/authorization/auth0/templates/spec/factories/users.rb.tt +32 -0
  16. data/lib/generators/rockstart/authorization/auth0/templates/spec/models/user_spec.rb.tt +91 -0
  17. data/lib/generators/rockstart/authorization/auth0/templates/spec/requests/auth_spec.rb +94 -0
  18. data/lib/generators/rockstart/authorization/auth0/templates/spec/support/auth_request_helper.rb +27 -0
  19. data/lib/generators/rockstart/authorization/authorization_generator.rb +29 -0
  20. data/lib/generators/rockstart/{devise → authorization/devise}/USAGE +3 -1
  21. data/lib/generators/rockstart/authorization/devise/devise_generator.rb +208 -0
  22. data/lib/generators/rockstart/authorization/devise/templates/add_devise_to_users_migration.rb.tt +50 -0
  23. data/lib/generators/rockstart/{devise → authorization/devise}/templates/controllers/passwords_controller.rb +0 -0
  24. data/lib/generators/rockstart/{devise → authorization/devise}/templates/controllers/registrations_controller.rb +0 -0
  25. data/lib/generators/rockstart/{devise → authorization/devise}/templates/controllers/sessions_controller.rb +0 -0
  26. data/lib/generators/rockstart/{devise → authorization/devise}/templates/create_user_migration.rb.tt +0 -0
  27. data/lib/generators/rockstart/{devise → authorization/devise}/templates/models/user.rb +14 -2
  28. data/lib/generators/rockstart/{devise → authorization/devise}/templates/spec/factories/users.rb +0 -0
  29. data/lib/generators/rockstart/{devise → authorization/devise}/templates/spec/models/user_spec.rb +9 -21
  30. data/lib/generators/rockstart/{devise → authorization/devise}/templates/spec/requests/users/passwords_spec.rb +0 -0
  31. data/lib/generators/rockstart/{devise → authorization/devise}/templates/spec/requests/users/registrations_spec.rb +2 -11
  32. data/lib/generators/rockstart/{devise → authorization/devise}/templates/spec/requests/users/sessions_spec.rb +1 -38
  33. data/lib/generators/rockstart/{devise → authorization/devise}/templates/spec/support/devise_request_spec_helper.rb +0 -0
  34. data/lib/generators/rockstart/{devise → authorization/devise}/templates/translations.en.yml +0 -0
  35. data/lib/generators/rockstart/{pundit → authorization/pundit}/USAGE +1 -1
  36. data/lib/generators/rockstart/authorization/pundit/pundit_generator.rb +41 -0
  37. data/lib/generators/rockstart/{pundit → authorization/pundit}/templates/app/controllers/concerns/pundit_error_handling.rb +0 -0
  38. data/lib/generators/rockstart/{pundit → authorization/pundit}/templates/app/policies/application_policy.rb +0 -0
  39. data/lib/generators/rockstart/{pundit/templates/app/policies/user_policy.rb → authorization/pundit/templates/app/policies/user_policy.rb.tt} +4 -0
  40. data/lib/generators/rockstart/{pundit → authorization/pundit}/templates/config/locales/pundit.en.yml +0 -0
  41. data/lib/generators/rockstart/authorization/pundit/templates/lib/admin_constraint.rb +11 -0
  42. data/lib/generators/rockstart/{pundit/templates/lib/templates/pundit/policy/policy.rb → authorization/pundit/templates/scaffold/policy.rb.tt} +0 -0
  43. data/lib/generators/rockstart/{pundit/templates/lib/templates/rspec/policy/policy_spec.rb → authorization/pundit/templates/scaffold/policy_spec.rb.tt} +0 -0
  44. data/lib/generators/rockstart/{pundit/templates/spec/policies/user_policy_spec.rb → authorization/pundit/templates/spec/policies/user_policy_spec.rb.tt} +43 -5
  45. data/lib/generators/rockstart/{pundit → authorization/pundit}/templates/spec/support/pundit_matchers.rb +0 -0
  46. data/lib/generators/rockstart/deployment/USAGE +8 -0
  47. data/lib/generators/rockstart/deployment/deployment_generator.rb +78 -0
  48. data/lib/generators/rockstart/{docker → deployment/docker}/USAGE +0 -0
  49. data/lib/generators/rockstart/deployment/docker/docker_generator.rb +70 -0
  50. data/lib/generators/rockstart/{docker → deployment/docker}/templates/app/Dockerfile-app +6 -5
  51. data/lib/generators/rockstart/{docker → deployment/docker}/templates/docker-compose.test.yml +5 -2
  52. data/lib/generators/rockstart/deployment/docker/templates/docker-compose.yml +74 -0
  53. data/lib/generators/rockstart/{docker → deployment/docker}/templates/dockerignore +0 -0
  54. data/lib/generators/rockstart/deployment/docker/templates/dotenv.docker-db.tt +3 -0
  55. data/lib/generators/rockstart/deployment/docker/templates/dotenv.docker.tt +20 -0
  56. data/lib/generators/rockstart/{docker → deployment/docker}/templates/web/Dockerfile-web +0 -0
  57. data/lib/generators/rockstart/{docker → deployment/docker}/templates/web/nginx.conf +24 -1
  58. data/lib/generators/rockstart/deployment/heroku/USAGE +9 -0
  59. data/lib/generators/rockstart/deployment/heroku/heroku_generator.rb +50 -0
  60. data/lib/generators/rockstart/deployment/heroku/templates/Procfile.tt +5 -0
  61. data/lib/generators/rockstart/deployment/heroku/templates/app.json.tt +50 -0
  62. data/lib/generators/rockstart/deployment/heroku/templates/deploy-heroku.tt +42 -0
  63. data/lib/generators/rockstart/deployment/heroku/templates/heroku.rake.tt +25 -0
  64. data/lib/generators/rockstart/deployment/heroku/templates/slugignore +3 -0
  65. data/lib/generators/rockstart/deployment/nginx/USAGE +8 -0
  66. data/lib/generators/rockstart/deployment/nginx/nginx_generator.rb +20 -0
  67. data/lib/generators/rockstart/deployment/templates/hooks-postdeploy.tt +22 -0
  68. data/lib/generators/rockstart/deployment/templates/hooks-release.tt +17 -0
  69. data/lib/generators/rockstart/deployment/templates/rack_deflater_spec.rb +28 -0
  70. data/lib/generators/rockstart/deployment/templates/web.tt +3 -0
  71. data/lib/generators/rockstart/deployment/templates/worker.tt +3 -0
  72. data/lib/generators/rockstart/development/USAGE +10 -0
  73. data/lib/generators/rockstart/development/audited/USAGE +10 -0
  74. data/lib/generators/rockstart/development/audited/audited_generator.rb +35 -0
  75. data/lib/generators/rockstart/development/audited/templates/audit.rb.tt +35 -0
  76. data/lib/generators/rockstart/development/audited/templates/audit_spec.rb.tt +54 -0
  77. data/lib/generators/rockstart/development/audited/templates/audited_initializer.rb +5 -0
  78. data/lib/generators/rockstart/development/audited/templates/audited_support.rb +3 -0
  79. data/lib/generators/rockstart/development/audited/templates/install_audited.rb.tt +45 -0
  80. data/lib/generators/rockstart/development/development_generator.rb +42 -0
  81. data/lib/generators/rockstart/development/env/USAGE +8 -0
  82. data/lib/generators/rockstart/development/env/env_generator.rb +17 -0
  83. data/lib/generators/rockstart/development/env/templates/dotenv.development.tt +4 -0
  84. data/lib/generators/rockstart/development/friendly_id/USAGE +8 -0
  85. data/lib/generators/rockstart/development/friendly_id/friendly_id_generator.rb +15 -0
  86. data/lib/generators/rockstart/development/friendly_id/templates/friendly_id_initializer.rb +52 -0
  87. data/lib/generators/rockstart/development/generator_overrides/USAGE +8 -0
  88. data/lib/generators/rockstart/development/generator_overrides/generator_overrides_generator.rb +31 -0
  89. data/lib/generators/rockstart/development/generator_overrides/templates/resource_route_generator.rb.tt +54 -0
  90. data/lib/generators/rockstart/development/localhost_setup/USAGE +8 -0
  91. data/lib/generators/rockstart/development/localhost_setup/localhost_setup_generator.rb +34 -0
  92. data/lib/generators/rockstart/{docker → development/localhost_setup}/templates/localhost_domains.ext.tt +0 -0
  93. data/lib/generators/rockstart/{docker → development/localhost_setup}/templates/setup-localhost.tt +5 -5
  94. data/lib/generators/rockstart/development/readme/USAGE +8 -0
  95. data/lib/generators/rockstart/development/readme/readme_generator.rb +18 -0
  96. data/lib/generators/rockstart/development/readme/templates/README.md +74 -0
  97. data/lib/generators/rockstart/development/rebuild/USAGE +8 -0
  98. data/lib/generators/rockstart/development/rebuild/rebuild_generator.rb +21 -0
  99. data/lib/generators/rockstart/development/rebuild/templates/rockstart.tt +28 -0
  100. data/lib/generators/rockstart/{scaffold_templates → development/scaffolds}/USAGE +1 -1
  101. data/lib/generators/rockstart/development/scaffolds/scaffolds_generator.rb +46 -0
  102. data/lib/generators/rockstart/{scaffold_templates → development/scaffolds}/templates/api_controller.rb.tt +15 -7
  103. data/lib/generators/rockstart/{scaffold_templates → development/scaffolds}/templates/controller.rb.tt +18 -9
  104. data/lib/generators/rockstart/development/scaffolds/templates/factory_bot/factories.erb +8 -0
  105. data/lib/generators/rockstart/development/scaffolds/templates/model.rb.tt +61 -0
  106. data/lib/generators/rockstart/development/scaffolds/templates/rspec/api_request_spec.rb.tt +142 -0
  107. data/lib/generators/rockstart/development/scaffolds/templates/rspec/model_spec.rb.tt +35 -0
  108. data/lib/generators/rockstart/development/scaffolds/templates/rspec/request_spec.rb.tt +492 -0
  109. data/lib/generators/rockstart/frontend_app/USAGE +10 -0
  110. data/lib/generators/rockstart/frontend_app/application_urls/USAGE +8 -0
  111. data/lib/generators/rockstart/frontend_app/application_urls/application_urls_generator.rb +28 -0
  112. data/lib/generators/rockstart/{frontend_helpers → frontend_app/application_urls}/templates/application_urls.rb +0 -0
  113. data/lib/generators/rockstart/{frontend_helpers → frontend_app/application_urls}/templates/application_urls_helper.rb +0 -0
  114. data/lib/generators/rockstart/frontend_app/assets/USAGE +8 -0
  115. data/lib/generators/rockstart/frontend_app/assets/assets_generator.rb +11 -0
  116. data/lib/generators/rockstart/frontend_app/assets/templates/assets.rake +22 -0
  117. data/lib/generators/rockstart/frontend_app/frontend_app_generator.rb +38 -0
  118. data/lib/generators/rockstart/frontend_app/simple_form/USAGE +8 -0
  119. data/lib/generators/rockstart/frontend_app/simple_form/simple_form_generator.rb +9 -0
  120. data/lib/generators/rockstart/frontend_app/titles/USAGE +8 -0
  121. data/lib/generators/rockstart/{frontend_helpers → frontend_app/titles}/templates/titles.en.yml.tt +0 -0
  122. data/lib/generators/rockstart/frontend_app/titles/titles_generator.rb +22 -0
  123. data/lib/generators/rockstart/gemset/USAGE +8 -0
  124. data/lib/generators/rockstart/gemset/gemset_generator.rb +129 -0
  125. data/lib/generators/rockstart/mailers/USAGE +8 -0
  126. data/lib/generators/rockstart/mailers/mailers_generator.rb +7 -0
  127. data/lib/generators/rockstart/{smtp_mailer → mailers/smtp_mailer}/USAGE +0 -0
  128. data/lib/generators/rockstart/mailers/smtp_mailer/smtp_mailer_generator.rb +36 -0
  129. data/lib/generators/rockstart/{smtp_mailer/templates/config/initializers/action_mailer.rb → mailers/smtp_mailer/templates/action_mailer_initializer.rb} +0 -0
  130. data/lib/generators/rockstart/monitoring/USAGE +8 -0
  131. data/lib/generators/rockstart/{logging → monitoring/lograge}/USAGE +1 -1
  132. data/lib/generators/rockstart/monitoring/lograge/lograge_generator.rb +19 -0
  133. data/lib/generators/rockstart/monitoring/lograge/templates/lograge_initializer.rb +44 -0
  134. data/lib/generators/rockstart/monitoring/lograge/templates/lograge_util.rb +42 -0
  135. data/lib/generators/rockstart/monitoring/monitoring_generator.rb +35 -0
  136. data/lib/generators/rockstart/monitoring/okcomputer/USAGE +8 -0
  137. data/lib/generators/rockstart/monitoring/okcomputer/okcomputer_generator.rb +28 -0
  138. data/lib/generators/rockstart/monitoring/okcomputer/templates/okcomputer.en.yml +5 -0
  139. data/lib/generators/rockstart/monitoring/okcomputer/templates/okcomputer_initializer.rb.tt +34 -0
  140. data/lib/generators/rockstart/monitoring/okcomputer/templates/okcomputer_spec.rb +62 -0
  141. data/lib/generators/rockstart/monitoring/rollbar/USAGE +8 -0
  142. data/lib/generators/rockstart/monitoring/rollbar/rollbar_generator.rb +20 -0
  143. data/lib/generators/rockstart/monitoring/rollbar/templates/rollbar_initializer.rb.tt +80 -0
  144. data/lib/generators/rockstart/monitoring/sidekiq_ui/USAGE +8 -0
  145. data/lib/generators/rockstart/monitoring/sidekiq_ui/sidekiq_ui_generator.rb +38 -0
  146. data/lib/generators/rockstart/monitoring/sidekiq_ui/templates/sidekiq_spec.rb +32 -0
  147. data/lib/generators/rockstart/quality/quality_generator.rb +5 -16
  148. data/lib/generators/rockstart/quality/rubocop/USAGE +11 -0
  149. data/lib/generators/rockstart/quality/rubocop/rubocop_generator.rb +23 -0
  150. data/lib/generators/rockstart/quality/rubocop/templates/rubocop.rake +19 -0
  151. data/lib/generators/rockstart/quality/{templates → rubocop/templates}/rubocop.yml +0 -0
  152. data/lib/generators/rockstart/rockstart_generator.rb +13 -65
  153. data/lib/generators/rockstart/run/USAGE +17 -0
  154. data/lib/generators/rockstart/run/run_generator.rb +73 -0
  155. data/lib/generators/rockstart/security/brakeman/USAGE +9 -0
  156. data/lib/generators/rockstart/security/brakeman/brakeman_generator.rb +15 -0
  157. data/lib/generators/rockstart/security/{templates → brakeman/templates}/brakeman.rake +1 -1
  158. data/lib/generators/rockstart/security/bundler_audit/USAGE +8 -0
  159. data/lib/generators/rockstart/security/bundler_audit/bundler_audit_generator.rb +11 -0
  160. data/lib/generators/rockstart/security/bundler_audit/templates/bundler_audit.rake +14 -0
  161. data/lib/generators/rockstart/security/content_security/USAGE +8 -0
  162. data/lib/generators/rockstart/security/content_security/content_security_generator.rb +41 -0
  163. data/lib/generators/rockstart/security/{templates → content_security/templates}/content_security_policy_initializer.rb.tt +2 -2
  164. data/lib/generators/rockstart/security/{templates → content_security/templates}/content_security_spec.rb.tt +12 -13
  165. data/lib/generators/rockstart/security/{templates/csp_violations_controller.rb → content_security/templates/csp_violations_controller.rb.tt} +14 -6
  166. data/lib/generators/rockstart/security/{templates → content_security/templates}/session_store_initializer.rb.tt +1 -2
  167. data/lib/generators/rockstart/security/rack_attack/USAGE +8 -0
  168. data/lib/generators/rockstart/security/rack_attack/rack_attack_generator.rb +37 -0
  169. data/lib/generators/rockstart/security/{templates → rack_attack/templates}/cache_support.rb +1 -1
  170. data/lib/generators/rockstart/security/{templates/rack_attack.rb → rack_attack/templates/rack_attack_initializer.rb.tt} +34 -1
  171. data/lib/generators/rockstart/security/rack_attack/templates/rack_attack_spec.rb.tt +116 -0
  172. data/lib/generators/rockstart/security/security_generator.rb +20 -84
  173. data/lib/generators/rockstart/storage/USAGE +8 -0
  174. data/lib/generators/rockstart/storage/active_storage/USAGE +8 -0
  175. data/lib/generators/rockstart/storage/active_storage/active_storage_generator.rb +59 -0
  176. data/lib/generators/rockstart/storage/active_storage/templates/active_storage_initializer.rb +9 -0
  177. data/lib/generators/rockstart/storage/active_storage/templates/better_s3_service.rb +27 -0
  178. data/lib/generators/rockstart/storage/active_storage/templates/cloudcube_util.rb +30 -0
  179. data/lib/generators/rockstart/storage/active_storage/templates/cloudcube_util_spec.rb +73 -0
  180. data/lib/generators/rockstart/storage/active_storage/templates/storage.yml.tt +15 -0
  181. data/lib/generators/rockstart/storage/memcached/USAGE +8 -0
  182. data/lib/generators/rockstart/storage/memcached/memcached_generator.rb +27 -0
  183. data/lib/generators/rockstart/{postgres → storage/postgres}/USAGE +1 -1
  184. data/lib/generators/rockstart/storage/postgres/postgres_generator.rb +20 -0
  185. data/lib/generators/rockstart/{postgres → storage/postgres}/templates/config/database.yml.tt +6 -0
  186. data/lib/generators/rockstart/{postgres → storage/postgres}/templates/migration.rb.tt +0 -0
  187. data/lib/generators/rockstart/storage/storage_generator.rb +26 -0
  188. data/lib/generators/rockstart/testing/USAGE +9 -0
  189. data/lib/generators/rockstart/testing/env/USAGE +8 -0
  190. data/lib/generators/rockstart/testing/env/env_generator.rb +24 -0
  191. data/lib/generators/rockstart/testing/env/templates/climate_control_helpers_support.rb +14 -0
  192. data/lib/generators/rockstart/testing/env/templates/dotenv.test.tt +8 -0
  193. data/lib/generators/rockstart/{rspec → testing/rspec}/USAGE +1 -1
  194. data/lib/generators/rockstart/testing/rspec/rspec_generator.rb +52 -0
  195. data/lib/generators/rockstart/{rspec → testing/rspec}/templates/support/factory_bot.rb +0 -0
  196. data/lib/generators/rockstart/{rspec → testing/rspec}/templates/support/shoulda_matchers.rb +0 -0
  197. data/lib/generators/rockstart/{rspec → testing/rspec}/templates/support/test_helpers.rb +0 -0
  198. data/lib/generators/rockstart/testing/rspec/templates/support/vcr.rb +11 -0
  199. data/lib/generators/rockstart/testing/simplecov/USAGE +9 -0
  200. data/lib/generators/rockstart/testing/simplecov/simplecov_generator.rb +11 -0
  201. data/lib/generators/rockstart/testing/testing_generator.rb +24 -0
  202. data/lib/generators/rockstart/workers/USAGE +8 -0
  203. data/lib/generators/rockstart/workers/sidekiq/USAGE +9 -0
  204. data/lib/generators/rockstart/workers/sidekiq/sidekiq_generator.rb +29 -0
  205. data/lib/generators/rockstart/workers/sidekiq/templates/sidekiq.yml.tt +5 -0
  206. data/lib/generators/rockstart/workers/sidekiq/templates/sidekiq_initializer.rb +5 -0
  207. data/lib/generators/rockstart/workers/workers_generator.rb +18 -0
  208. data/lib/rockstart/base_generator.rb +4 -5
  209. data/lib/rockstart/env.rb +3 -1
  210. data/lib/rockstart/generators/class_option_helpers.rb +154 -0
  211. data/lib/rockstart/generators/content_security_options.rb +61 -0
  212. data/lib/rockstart/generators/migration_helpers.rb +30 -0
  213. data/lib/rockstart/generators/system_helpers.rb +14 -0
  214. data/lib/rockstart/generators/template_helpers.rb +27 -0
  215. data/lib/rockstart/version.rb +1 -1
  216. metadata +212 -83
  217. data/lib/generators/rockstart/devise/devise_generator.rb +0 -258
  218. data/lib/generators/rockstart/docker/docker_generator.rb +0 -86
  219. data/lib/generators/rockstart/docker/templates/docker-compose.yml +0 -47
  220. data/lib/generators/rockstart/docker/templates/dotenv.docker.tt +0 -4
  221. data/lib/generators/rockstart/frontend_helpers/USAGE +0 -8
  222. data/lib/generators/rockstart/frontend_helpers/frontend_helpers_generator.rb +0 -65
  223. data/lib/generators/rockstart/logging/logging_generator.rb +0 -12
  224. data/lib/generators/rockstart/logging/templates/rockstart/lograge_initializer.rb +0 -50
  225. data/lib/generators/rockstart/postgres/postgres_generator.rb +0 -32
  226. data/lib/generators/rockstart/pundit/pundit_generator.rb +0 -32
  227. data/lib/generators/rockstart/quality/templates/rubocop.rake +0 -4
  228. data/lib/generators/rockstart/rspec/rspec_generator.rb +0 -70
  229. data/lib/generators/rockstart/rspec/templates/dotenv.development +0 -1
  230. data/lib/generators/rockstart/rspec/templates/dotenv.test +0 -1
  231. data/lib/generators/rockstart/rspec/templates/rspec_templates/model/model_spec.rb +0 -13
  232. data/lib/generators/rockstart/scaffold_templates/scaffold_templates_generator.rb +0 -39
  233. data/lib/generators/rockstart/scaffold_templates/templates/rspec/scaffold/api_request_spec.rb +0 -139
  234. data/lib/generators/rockstart/scaffold_templates/templates/rspec/scaffold/request_spec.rb +0 -408
  235. data/lib/generators/rockstart/security/templates/bundler_audit.rake +0 -4
  236. data/lib/generators/rockstart/smtp_mailer/smtp_mailer_generator.rb +0 -30
  237. data/lib/generators/rockstart/tailwindcss/USAGE +0 -8
  238. data/lib/generators/rockstart/tailwindcss/tailwindcss_generator.rb +0 -30
  239. data/lib/generators/rockstart/tailwindcss/templates/application.css +0 -3
  240. data/lib/generators/rockstart/tailwindcss/templates/postcss.config.js +0 -32
@@ -15,27 +15,22 @@ RSpec.describe User, type: :model do
15
15
  # deleted_at:datetime
16
16
  it { is_expected.to have_db_column(:deleted_at).of_type(:datetime) }
17
17
 
18
- describe "#given" do
18
+ describe "#first_name" do
19
19
  it "returns the given name from the name" do
20
20
  user = User.new(name: "John Smith")
21
- expect(user.given).to eq "John"
21
+ expect(user.first_name).to eq "John"
22
22
  end
23
23
 
24
24
  it "handles nil name valeus" do
25
25
  user = User.new(name: nil)
26
- expect(user.given).to be_nil
26
+ expect(user.first_name).to be_nil
27
27
  end
28
28
  end
29
29
 
30
- describe "#family" do
31
- it "returns the family name from the name" do
32
- user = User.new(name: "John Smith")
33
- expect(user.family).to eq "Smith"
34
- end
35
-
36
- it "handles nil name valeus" do
37
- user = User.new(name: nil)
38
- expect(user.family).to be_nil
30
+ describe "#image" do
31
+ it "returns a gravatar image based off the email address" do
32
+ user = User.new(email: "test@example.com")
33
+ expect(user.image).to eq "https://s.gravatar.com/avatar/55502f40dc8b7c769880b10874abc9d0?s=480"
39
34
  end
40
35
  end
41
36
 
@@ -49,16 +44,9 @@ RSpec.describe User, type: :model do
49
44
  expect(user.to_s).to eq "John Smith"
50
45
  end
51
46
 
52
- it "falls back to a generic label when name is not present" do
47
+ it "falls back to a generic label" do
53
48
  user = build_stubbed(:user, name: nil)
54
- allow(user).to receive(:id?).and_return(true)
55
- allow(user).to receive(:id).and_return(1234)
56
- expect(user.to_s).to eq "User #1234"
57
- end
58
-
59
- it "returns a generic label when user is not persisted" do
60
- user = User.new(name: nil)
61
- expect(user.to_s).to eq "Guest User"
49
+ expect(user.to_s).to start_with "#<User:"
62
50
  end
63
51
  end
64
52
  end
@@ -28,7 +28,7 @@ RSpec.describe "Users::Registrations", type: :request do
28
28
  end
29
29
  end
30
30
 
31
- describe "POST /users", :cache_testing do
31
+ describe "POST /users" do
32
32
  context "with valid create user params" do
33
33
  let(:valid_password) { Faker::Internet.password }
34
34
  let(:valid_registration_params) do
@@ -149,7 +149,7 @@ RSpec.describe "Users::Registrations", type: :request do
149
149
  end
150
150
  end
151
151
 
152
- describe "PUT /users", :cache_testing do
152
+ describe "PUT /users" do
153
153
  context "with update user email params" do
154
154
  let(:original_email) { Faker::Internet.email }
155
155
  let(:updated_email) { Faker::Internet.email }
@@ -193,15 +193,6 @@ RSpec.describe "Users::Registrations", type: :request do
193
193
  expect(delivery.to).to eq [original_email]
194
194
  expect(delivery.subject).to eq t("devise.mailer.email_changed.subject")
195
195
  end
196
-
197
- it "rate limits requests based off ip address" do
198
- 5.times do
199
- put user_registration_path, params: update_user_email_params
200
- end
201
-
202
- put user_registration_path, params: update_user_email_params
203
- expect(response).to have_http_status(:too_many_requests)
204
- end
205
196
  end
206
197
 
207
198
  context "as a guest" do
@@ -41,7 +41,7 @@ RSpec.describe "Users::Passwords", type: :request do
41
41
  end
42
42
  end
43
43
 
44
- describe "POST /users/sign_in", :cache_testing do
44
+ describe "POST /users/sign_in" do
45
45
  context "with known user credentials" do
46
46
  let(:valid_password) { Faker::Internet.password }
47
47
  let(:known_user) { create(:user, password: valid_password) }
@@ -102,43 +102,6 @@ RSpec.describe "Users::Passwords", type: :request do
102
102
  expect(response.body).to have_selector(".alert-alert", text: t("devise.failure.invalid", authentication_keys: "Email"))
103
103
  end
104
104
  end
105
-
106
- it "rate limits requests based off ip address" do
107
- 5.times do
108
- post new_user_session_path, params: {
109
- user: {
110
- email: Faker::Internet.email,
111
- password: Faker::Internet.password
112
- }
113
- }
114
- end
115
-
116
- post new_user_session_path, params: {
117
- user: {
118
- email: Faker::Internet.email,
119
- password: Faker::Internet.password
120
- }
121
- }
122
- expect(response).to have_http_status(:too_many_requests)
123
- end
124
-
125
- it "rate limits requests based off email address" do
126
- valid_email_parameters = {
127
- user: {
128
- email: Faker::Internet.email,
129
- password: Faker::Internet.password
130
- }
131
- }
132
-
133
- 5.times do |n|
134
- post new_user_session_path, params: valid_email_parameters, headers: {
135
- "REMOTE_ADDR" => format("120.0.1.%<n>d", n: n)
136
- }
137
- end
138
-
139
- post new_user_session_path, params: valid_email_parameters
140
- expect(response).to have_http_status(:too_many_requests)
141
- end
142
105
  end
143
106
 
144
107
  describe "DELETE /users/sign_outs" do
@@ -2,7 +2,7 @@ Description:
2
2
  Adds authentication to a project with simple authentication needs
3
3
 
4
4
  Example:
5
- rails generate rockstart:pundit
5
+ rails generate rockstart:authorization:pundit
6
6
 
7
7
  This will create:
8
8
  Installs pundit gem
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "rockstart/generators/class_option_helpers"
4
+
5
+ module Rockstart::Authorization
6
+ class PunditGenerator < Rails::Generators::Base
7
+ include Rockstart::Generators::ClassOptionHelpers
8
+
9
+ source_root File.expand_path("templates", __dir__)
10
+
11
+ auth0_class_option
12
+
13
+ def add_pundit_exception_handling
14
+ application <<~PUNDIT
15
+ # Treat Pundit authentication failures as forbidden
16
+ config.action_dispatch.rescue_responses["Pundit::NotAuthorizedError"] = :forbidden
17
+ PUNDIT
18
+ end
19
+
20
+ def add_pundit_to_application_controller
21
+ inject_into_file "app/controllers/application_controller.rb",
22
+ " include Pundit\n",
23
+ before: /^end$/
24
+ end
25
+
26
+ def add_pundit_configuration
27
+ directory "config"
28
+ end
29
+
30
+ def add_prebuilt_resources
31
+ directory "app"
32
+ directory "lib"
33
+ directory "spec"
34
+ end
35
+
36
+ def add_scaffold_templates
37
+ copy_file "scaffold/policy.rb.tt", "lib/templates/pundit/policy/policy.rb"
38
+ copy_file "scaffold/policy_spec.rb.tt", "lib/templates/rspec/policy/policy_spec.rb"
39
+ end
40
+ end
41
+ end
@@ -41,7 +41,11 @@ class UserPolicy < ApplicationPolicy
41
41
  # Safe scope for User
42
42
  class Scope < Scope
43
43
  def resolve
44
+ <%- if auth0? -%>
45
+ raise Pundit::NotDefinedError, "Cannot scope Users"
46
+ <%- else -%>
44
47
  user.persisted? ? scope.where(id: user.id) : scope.none
48
+ <%- end -%>
45
49
  end
46
50
  end
47
51
  end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Constraint for limiting routes to admin users
4
+ class AdminConstraint
5
+ def self.matches?(request)
6
+ return false unless request.session[:userinfo].present?
7
+
8
+ user = User.new(request.session[:userinfo])
9
+ user&.admin?
10
+ end
11
+ end
@@ -5,15 +5,23 @@ require "rails_helper"
5
5
  RSpec.describe UserPolicy, type: :policy do
6
6
  subject { described_class.new(user, user_record) }
7
7
 
8
+ <%- if auth0? -%>
9
+ let(:resolved_scope) { described_class::Scope.new(user, []).resolve }
10
+ <%- else -%>
8
11
  let(:resolved_scope) { described_class::Scope.new(user, User.all).resolve }
12
+ <%- end -%>
9
13
 
10
14
  let(:user_record) do
15
+ <%- if auth0? -%>
16
+ build(:user, uid: 123)
17
+ <%- else -%>
11
18
  build_stubbed(:user).tap do |record|
12
19
  allow(record).to receive(:id).and_return(123)
13
20
  end
21
+ <%- end -%>
14
22
  end
15
23
 
16
- context "with a guest" do
24
+ context "as a guest" do
17
25
  let(:user) { nil }
18
26
 
19
27
  it { is_expected.to forbid_action(:index) }
@@ -22,12 +30,18 @@ RSpec.describe UserPolicy, type: :policy do
22
30
  it { is_expected.to forbid_actions(%i[edit update]) }
23
31
  it { is_expected.to forbid_action(:destroy) }
24
32
 
33
+ <%- if auth0? -%>
34
+ it "raises a Pundit::NotDefinedError" do
35
+ expect { resolved_scope }.to raise_error(Pundit::NotDefinedError)
36
+ end
37
+ <%- else -%>
25
38
  it "returns no items in scope" do
26
39
  expect(resolved_scope.to_sql).to eq(User.none.to_sql)
27
40
  end
41
+ <%- end -%>
28
42
  end
29
43
 
30
- context "with the same user" do
44
+ context "as the same user" do
31
45
  let(:user) { user_record }
32
46
 
33
47
  it { is_expected.to permit_actions(%i[edit update]) }
@@ -39,14 +53,24 @@ RSpec.describe UserPolicy, type: :policy do
39
53
 
40
54
  it { is_expected.to permit_mass_assignment_of(:name).for_action(:update) }
41
55
 
56
+ <%- if auth0? -%>
57
+ it "raises a Pundit::NotDefinedError" do
58
+ expect { resolved_scope }.to raise_error(Pundit::NotDefinedError)
59
+ end
60
+ <%- else -%>
42
61
  it "returns the a scope with only the user" do
43
62
  expect(resolved_scope.to_sql).to eq(User.where(id: user.id).to_sql)
44
63
  end
64
+ <%- end -%>
45
65
 
46
- context "when the user is an admin" do
66
+ context "as a user with admin persmission" do
67
+ <%- if auth0? -%>
68
+ let(:user) { build(:user, :admin, uid: 123) }
69
+ <%- else -%>
47
70
  before do
48
71
  user.admin = true
49
72
  end
73
+ <%- end -%>
50
74
 
51
75
  it { is_expected.to permit_actions(%i[edit update]) }
52
76
 
@@ -57,17 +81,27 @@ RSpec.describe UserPolicy, type: :policy do
57
81
 
58
82
  it { is_expected.to permit_mass_assignment_of(:name).for_action(:update) }
59
83
 
84
+ <%- if auth0? -%>
85
+ it "raises a Pundit::NotDefinedError" do
86
+ expect { resolved_scope }.to raise_error(Pundit::NotDefinedError)
87
+ end
88
+ <%- else -%>
60
89
  it "returns the a scope with only the user" do
61
90
  expect(resolved_scope.to_sql).to eq(User.where(id: user.id).to_sql)
62
91
  end
92
+ <%- end -%>
63
93
  end
64
94
  end
65
95
 
66
96
  context "with a different user" do
67
97
  let(:user) do
68
- build_stubbed(:user).tap do |user|
69
- allow(user).to receive(:id).and_return(987)
98
+ <%- if auth0? -%>
99
+ build(:user, uid: 987)
100
+ <%- else -%>
101
+ build_stubbed(:user).tap do |record|
102
+ allow(record).to receive(:id).and_return(987)
70
103
  end
104
+ <%- end -%>
71
105
  end
72
106
 
73
107
  it { is_expected.to forbid_action(:index) }
@@ -79,9 +113,13 @@ RSpec.describe UserPolicy, type: :policy do
79
113
  it { is_expected.to forbid_mass_assignment_of(:name).for_action(:update) }
80
114
 
81
115
  context "when the user is an admin" do
116
+ <%- if auth0? -%>
117
+ let(:user) { build(:user, :admin, uid: 987) }
118
+ <%- else -%>
82
119
  before do
83
120
  user.admin = true
84
121
  end
122
+ <%- end -%>
85
123
 
86
124
  it { is_expected.to forbid_action(:index) }
87
125
  it { is_expected.to forbid_action(:show) }
@@ -0,0 +1,8 @@
1
+ Description:
2
+ Setups up a Rails application for Continuous Integration, Delivery and Deployment (CI/CD)
3
+
4
+ Example:
5
+ rails generate rockstart:deployment
6
+
7
+ This will create:
8
+ bin/hooks-release script for fresh deployments
@@ -0,0 +1,78 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "rockstart/generators/class_option_helpers"
4
+ require "rockstart/generators/template_helpers"
5
+
6
+ class Rockstart::DeploymentGenerator < Rails::Generators::Base
7
+ include Rockstart::Generators::ClassOptionHelpers
8
+ include Rockstart::Generators::TemplateHelpers
9
+
10
+ source_root File.expand_path("templates", __dir__)
11
+
12
+ auth0_class_option
13
+ devise_class_option
14
+ frontend_class_option
15
+ memcached_class_option
16
+ postgres_class_option
17
+ rollbar_class_option
18
+ sidekiq_class_option
19
+
20
+ def configure_environment
21
+ application(nil, env: :production) do
22
+ <<~APP_HOST
23
+ config.action_controller.default_url_options = { host: ENV["APP_HOST"] }
24
+ config.action_controller.asset_host = ENV.fetch("ASSET_HOST") { ENV["APP_HOST"] }
25
+ APP_HOST
26
+ end
27
+ end
28
+
29
+ def create_run_scripts
30
+ script_template "web"
31
+ script_template "worker" if sidekiq?
32
+ end
33
+
34
+ def create_deployment_scripts
35
+ script_template "hooks-postdeploy"
36
+ script_template "hooks-release"
37
+ end
38
+
39
+ def add_rack_deflater
40
+ application do
41
+ <<~RACK_DEFLATER
42
+ if ENV["RAILS_SERVE_STATIC_FILES"].present?
43
+ config.middleware.insert_after ActionDispatch::Static, Rack::Deflater
44
+ config.static_cache_control = "public, max-age=\#{2.days.to_i}"
45
+ else
46
+ config.middleware.insert_after Rack::Sendfile, Rack::Deflater
47
+ end
48
+ RACK_DEFLATER
49
+ end
50
+ end
51
+
52
+ def add_rack_deflater_spec
53
+ copy_file "rack_deflater_spec.rb", "spec/requests/rack_deflater_spec.rb"
54
+ end
55
+
56
+ def generate_nginx
57
+ generate "rockstart:deployment:nginx"
58
+ end
59
+
60
+ def generate_heroku
61
+ generate "rockstart:deployment:heroku",
62
+ auth0_option,
63
+ memcached_option,
64
+ postgres_option,
65
+ rollbar_option,
66
+ sidekiq_option
67
+ end
68
+
69
+ def generate_docker
70
+ generate "rockstart:deployment:docker",
71
+ devise_option,
72
+ frontend_option,
73
+ memcached_option,
74
+ postgres_option,
75
+ rollbar_option,
76
+ sidekiq_option
77
+ end
78
+ end
@@ -0,0 +1,70 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "rockstart/generators/class_option_helpers"
4
+
5
+ module Rockstart::Deployment
6
+ class DockerGenerator < Rails::Generators::Base
7
+ include Rails::Generators::AppName
8
+ include Rockstart::Generators::ClassOptionHelpers
9
+
10
+ source_root File.expand_path("templates", __dir__)
11
+
12
+ desc "This generator configures a Rails Application to work with Docker"
13
+
14
+ class_option :root_image, type: :string,
15
+ desc: "Docker image to build the container from",
16
+ default: "ruby:#{RUBY_VERSION}"
17
+
18
+ class_option :app_home, type: :string,
19
+ desc: "Mount directory used within Docker image",
20
+ default: Rails.application.engine_name
21
+
22
+ devise_class_option
23
+ frontend_class_option
24
+ memcached_class_option
25
+ postgres_class_option
26
+ rollbar_class_option
27
+ sidekiq_class_option
28
+
29
+ def create_dockerignore
30
+ copy_file "dockerignore", ".dockerignore"
31
+ end
32
+
33
+ def create_dockerfile
34
+ @root_image = options[:root_image]
35
+ @app_home = options[:app_home]
36
+ template "app/Dockerfile-app", "Dockerfile"
37
+ end
38
+
39
+ def create_nginx_image
40
+ @root_image = options[:root_image]
41
+ @app_home = options[:app_home]
42
+ template "web/Dockerfile-web", "docker/web/Dockerfile"
43
+ template "web/nginx.conf", "docker/web/nginx.conf"
44
+ end
45
+
46
+ def add_docker_compose
47
+ @app_home = options[:app_home]
48
+ template "docker-compose.yml", "docker-compose.yml"
49
+ template "docker-compose.test.yml", "docker-compose.test.yml"
50
+ end
51
+
52
+ def create_certs_directory
53
+ FileUtils.mkdir_p(Rails.root.join("docker", "certs", "web"))
54
+ append_file ".gitignore", "\n# Docker Configuration\ndocker/certs\n"
55
+ end
56
+
57
+ def create_dotenv_files
58
+ template "dotenv.docker.tt", ".env.docker"
59
+ template "dotenv.docker-db.tt", ".env.docker-db"
60
+ end
61
+
62
+ private
63
+
64
+ # Generates an example password
65
+ def example_db_password
66
+ require "base64"
67
+ Base64.urlsafe_encode64(Rails.application.engine_name)
68
+ end
69
+ end
70
+ end