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
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "utils/cloudcube"
4
+
5
+ Rails.application.configure do
6
+ # Set active_storage background queues to low priority
7
+ config.active_storage.queues.analysis = :low
8
+ config.active_storage.queues.purge = :low
9
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "aws-sdk-s3"
4
+ require "active_storage/service/s3_service"
5
+ require "active_support/core_ext/numeric/bytes"
6
+
7
+ # rubocop:disable Style/ClassAndModuleChildren
8
+ module ActiveStorage
9
+ # Adds handling of path-prefixes to S3
10
+ # Adapted from: https://github.com/rails/rails/issues/32790
11
+ class Service::BetterS3Service < Service::S3Service
12
+ attr_reader :client, :bucket, :root, :upload_options
13
+
14
+ def initialize(bucket:, upload: {}, **options)
15
+ @root = options.delete(:root)
16
+ super(bucket: bucket, upload: upload, **options)
17
+ end
18
+
19
+ private
20
+
21
+ def object_for(key)
22
+ path = root.present? ? File.join(root, key) : key
23
+ bucket.object(path)
24
+ end
25
+ end
26
+ end
27
+ # rubocop:enable Style/ClassAndModuleChildren
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "active_support/core_ext/object/blank"
4
+
5
+ module Utils
6
+ # Utilities for working with Cloudcube
7
+ module Cloudcube
8
+ REGION_LOOKUP = {
9
+ "cloud-cube" => "us-east-1",
10
+ "cloud-cube-eu" => "eu-west-1",
11
+ "cloud-cube-jp" => "ap-northeast-1"
12
+ }.freeze
13
+
14
+ def self.region(cloudcube_url)
15
+ REGION_LOOKUP.fetch bucket(cloudcube_url) if cloudcube_url.present?
16
+ end
17
+
18
+ def self.bucket(cloudcube_url)
19
+ URI.parse(cloudcube_url).host.split(".").first if cloudcube_url.present?
20
+ end
21
+
22
+ def self.public_prefix(cloudcube_url)
23
+ prefix(cloudcube_url) + "/public" if cloudcube_url.present?
24
+ end
25
+
26
+ def self.prefix(cloudcube_url)
27
+ URI.parse(cloudcube_url).path[1..-1] if cloudcube_url.present?
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,73 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "utils/cloudcube"
4
+
5
+ RSpec.describe Utils::Cloudcube do
6
+ describe ".bucket" do
7
+ it "handles US regions" do
8
+ bucket = described_class.bucket "https://cloud-cube.s3.amazonaws.com/mycube"
9
+ expect(bucket).to eq "cloud-cube"
10
+ end
11
+
12
+ it "handles EU regions" do
13
+ bucket = described_class.bucket "https://cloud-cube-eu.s3.amazonaws.com/mycube"
14
+ expect(bucket).to eq "cloud-cube-eu"
15
+ end
16
+
17
+ it "handles JP regions" do
18
+ bucket = described_class.bucket "https://cloud-cube-jp.s3.amazonaws.com/mycube"
19
+ expect(bucket).to eq "cloud-cube-jp"
20
+ end
21
+
22
+ it "handles nil" do
23
+ bucket = described_class.bucket nil
24
+ expect(bucket).to be_nil
25
+ end
26
+ end
27
+
28
+ describe ".region" do
29
+ it "handles US regions" do
30
+ region = described_class.region "https://cloud-cube.s3.amazonaws.com/mycube"
31
+ expect(region).to eq "us-east-1"
32
+ end
33
+
34
+ it "handles EU regions" do
35
+ region = described_class.region "https://cloud-cube-eu.s3.amazonaws.com/mycube"
36
+ expect(region).to eq "eu-west-1"
37
+ end
38
+
39
+ it "handles JP regions" do
40
+ region = described_class.region "https://cloud-cube-jp.s3.amazonaws.com/mycube"
41
+ expect(region).to eq "ap-northeast-1"
42
+ end
43
+
44
+ it "handles nil" do
45
+ region = described_class.region nil
46
+ expect(region).to be_nil
47
+ end
48
+ end
49
+
50
+ describe ".public_prefix" do
51
+ it "handles US regions" do
52
+ public_prefix = described_class.public_prefix "https://cloud-cube.s3.amazonaws.com/mycube"
53
+ expect(public_prefix).to eq "mycube/public"
54
+ end
55
+
56
+ it "handles nil" do
57
+ public_prefix = described_class.public_prefix nil
58
+ expect(public_prefix).to be_nil
59
+ end
60
+ end
61
+
62
+ describe ".prefix" do
63
+ it "handles US regions" do
64
+ prefix = described_class.prefix "https://cloud-cube.s3.amazonaws.com/mycube"
65
+ expect(prefix).to eq "mycube"
66
+ end
67
+
68
+ it "handles nil" do
69
+ prefix = described_class.prefix nil
70
+ expect(prefix).to be_nil
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,15 @@
1
+ test:
2
+ service: Disk
3
+ root: <%%= Rails.root.join("tmp/storage") %>
4
+
5
+ local:
6
+ service: Disk
7
+ root: <%%= Rails.root.join("storage") %>
8
+
9
+ cloudcube:
10
+ service: BetterS3
11
+ access_key_id: <%%= ENV["CLOUDCUBE_ACCESS_KEY_ID"] %>
12
+ secret_access_key: <%%= ENV["CLOUDCUBE_SECRET_ACCESS_KEY"] %>
13
+ region: <%%= Utils::Cloudcube.region ENV["CLOUDCUBE_URL"] %>
14
+ bucket: <%%= Utils::Cloudcube.bucket ENV["CLOUDCUBE_URL"] %>
15
+ root: <%%= Utils::Cloudcube.<%= public_files? ? "public_" : "" %>prefix ENV["CLOUDCUBE_URL"] %>
@@ -0,0 +1,8 @@
1
+ Description:
2
+ Uses Memcached as a Rails cache
3
+
4
+ Example:
5
+ rails generate rockstart:storage:memcached
6
+
7
+ This will create:
8
+ Configures memcached as the default Rails.cache
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Rockstart::Storage
4
+ class MemcachedGenerator < Rails::Generators::Base
5
+ # rubocop:disable Metrics/MethodLength
6
+ def configure_production_env
7
+ application(nil, env: :production) do
8
+ <<~MEMCACHED
9
+ # Use Memcached for Rails cache store
10
+ memcache_servers = ENV.fetch("MEMCACHE_SERVERS") { ENV.fetch("MEMCACHIER_SERVERS", "") }
11
+ config.cache_store = :mem_cache_store,
12
+ memcache_servers.split(","),
13
+ {
14
+ username: ENV["MEMCACHIER_USERNAME"],
15
+ password: ENV["MEMCACHIER_PASSWORD"],
16
+ failover: true,
17
+ socket_timeout: 1.5,
18
+ socket_failure_delay: 0.2,
19
+ down_retry_delay: 60,
20
+ pool_size: ENV.fetch("RAILS_MAX_THREADS") { 5 }
21
+ }
22
+ MEMCACHED
23
+ end
24
+ # rubocop:enable Metrics/MethodLength
25
+ end
26
+ end
27
+ end
@@ -2,7 +2,7 @@ Description:
2
2
  Configures a rails application to use postgres in Heroku and Docker
3
3
 
4
4
  Example:
5
- rails generate rockstart:postgres
5
+ rails generate rockstart:storage:postgres
6
6
 
7
7
  This will create:
8
8
  A config/database.yml with known defaults
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "rockstart/generators/migration_helpers"
4
+
5
+ module Rockstart::Storage
6
+ class PostgresGenerator < Rails::Generators::Base
7
+ include Rails::Generators::AppName
8
+ include Rockstart::Generators::MigrationHelpers
9
+
10
+ source_root File.expand_path("templates", __dir__)
11
+
12
+ def copy_database_config
13
+ template "config/database.yml.tt", "config/database.yml"
14
+ end
15
+
16
+ def enable_uuid_support
17
+ migration_template "migration.rb.tt", "db/migrate/enable_uuid.rb"
18
+ end
19
+ end
20
+ end
@@ -4,6 +4,12 @@ default: &default
4
4
  # For details on connection pooling, see Rails configuration guide
5
5
  # https://guides.rubyonrails.org/configuring.html#database-pooling
6
6
  pool: <%%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
7
+ connect_timeout: <%%= ENV.fetch("DB_CONNECT_TIMEOUT") { 2 } %>
8
+ checkout_timeout: <%%= ENV.fetch("DB_CHECKOUT_TIMEOUT") { 5 } %>
9
+ variables:
10
+ # Prevent single queries from taking up all of your database’s resources
11
+ # https://github.com/ankane/the-ultimate-guide-to-ruby-timeouts#postgresql
12
+ statement_timeout: <%%= ENV.fetch("DB_STATEMENT_TIMEOUT") { "5s" } %>
7
13
 
8
14
  development:
9
15
  <<: *default
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "rockstart/generators/class_option_helpers"
4
+
5
+ class Rockstart::StorageGenerator < Rails::Generators::Base
6
+ include Rockstart::Generators::ClassOptionHelpers
7
+
8
+ postgres_class_option
9
+ memcached_class_option
10
+
11
+ def generate_postgres
12
+ return unless postgres?
13
+
14
+ generate "rockstart:storage:postgres"
15
+ end
16
+
17
+ def generate_memcached
18
+ return unless memcached?
19
+
20
+ generate "rockstart:storage:memcached"
21
+ end
22
+
23
+ def generate_active_storage
24
+ generate "rockstart:storage:active_storage"
25
+ end
26
+ end
@@ -0,0 +1,9 @@
1
+ Description:
2
+ Prepare your app for some testing before your Rock
3
+
4
+ Example:
5
+ rails generate rockstart:testing
6
+
7
+ This will create:
8
+ Installs RSpec
9
+ Sets up SimpleCov for code quality coverage
@@ -0,0 +1,8 @@
1
+ Description:
2
+ Generates useful dotfiles for testing
3
+
4
+ Example:
5
+ rails generate rockstart:testing:env
6
+
7
+ This will create:
8
+ Creates a dotfile with common configuration values
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "rockstart/generators/class_option_helpers"
4
+ require "rockstart/generators/template_helpers"
5
+
6
+ module Rockstart::Testing
7
+ class EnvGenerator < Rails::Generators::Base
8
+ include Rockstart::Generators::ClassOptionHelpers
9
+ include Rockstart::Generators::TemplateHelpers
10
+
11
+ source_root File.expand_path("templates", __dir__)
12
+
13
+ devise_class_option
14
+ auth0_class_option
15
+
16
+ def add_dotenv_files
17
+ template "dotenv.test.tt", ".env.test"
18
+ end
19
+
20
+ def add_climate_control_helpers
21
+ copy_spec_support "climate_control_helpers"
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "climate_control"
4
+
5
+ # Helpers for managing ENV configuration within a Test Suite
6
+ module ClimateControlHelpers
7
+ def with_modified_env(options, &block)
8
+ ClimateControl.modify(options, &block)
9
+ end
10
+ end
11
+
12
+ RSpec.configure do |config|
13
+ config.include ClimateControlHelpers
14
+ end
@@ -0,0 +1,8 @@
1
+ APP_HOST=www.example.com
2
+ <%- if devise? -%>
3
+ DEVISE_MAILER_SENDER=devise-mailer@example.com
4
+ <%- elsif auth0? -%>
5
+ AUTH0_CLIENT_ID="auth0-client-id"
6
+ AUTH0_CLIENT_SECRET="auth0-client-secret"
7
+ AUTH0_DOMAIN="auth0-domain"
8
+ <%- end -%>
@@ -2,7 +2,7 @@ Description:
2
2
  Installs RSpec with test libraries
3
3
 
4
4
  Example:
5
- rails generate rockstart:rspec
5
+ rails generate rockstart:testing:rspec
6
6
 
7
7
  This will create:
8
8
  - installs rspec-rails
@@ -0,0 +1,52 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "rockstart/base_generator"
4
+
5
+ module Rockstart::Testing
6
+ class RspecGenerator < Rockstart::BaseGenerator
7
+ source_root File.expand_path("templates", __dir__)
8
+
9
+ def install_rspec_rails
10
+ Dir.mktmpdir do |dir|
11
+ generate_rspec_install(dir)
12
+ template File.join(dir, ".rspec"), ".rspec"
13
+ directory File.join(dir, "spec"), "spec"
14
+ end
15
+ end
16
+
17
+ def add_rspec_support
18
+ directory "support", "spec/support"
19
+ end
20
+
21
+ private
22
+
23
+ def generate_rspec_install(dir)
24
+ require "generators/rspec/install/install_generator"
25
+
26
+ initializer = ::Rspec::Generators::InstallGenerator.new(
27
+ report_stream: StringIO.new
28
+ )
29
+ initializer.destination_root = dir
30
+ initializer.invoke_all
31
+
32
+ prepend_simplecov_start(dir)
33
+ enable_support_directory(dir)
34
+ end
35
+
36
+ def prepend_simplecov_start(dir)
37
+ prepend_file File.join(dir, "spec", "spec_helper.rb"), <<~SIMPLECOV
38
+ # frozen_string_literal: true
39
+
40
+ require "simplecov"
41
+ SimpleCov.start("rails") do
42
+ add_filter "/lib/templates"
43
+ end
44
+
45
+ SIMPLECOV
46
+ end
47
+
48
+ def enable_support_directory(dir)
49
+ uncomment_lines File.join(dir, "spec", "rails_helper.rb"), /Dir.+spec.+support.+\.rb/
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "vcr"
4
+
5
+ VCR.configure do |c|
6
+ # Use rspec tags for vcr cassettes
7
+ c.configure_rspec_metadata!
8
+
9
+ c.cassette_library_dir = "spec/vcr"
10
+ c.hook_into :webmock
11
+ end
@@ -0,0 +1,9 @@
1
+ Description:
2
+ Installs SimpleCov for coverage metrics
3
+
4
+ Example:
5
+ rails generate rockstart:testing:simple_cov
6
+
7
+ This will create:
8
+ Installs simple_cov
9
+ Updates rspec to require it first
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Rockstart::Testing
4
+ class SimplecovGenerator < Rails::Generators::Base
5
+ source_root File.expand_path("templates", __dir__)
6
+
7
+ def add_coverage_to_gitignore
8
+ append_file ".gitignore", "coverage/\n"
9
+ end
10
+ end
11
+ end