jets 4.0.10 → 5.0.0

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 (618) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +5 -1
  3. data/CHANGELOG.md +53 -0
  4. data/Gemfile +1 -5
  5. data/LICENSE.txt +1 -1
  6. data/README.md +20 -36
  7. data/Rakefile +3 -3
  8. data/engines/internal/app/controllers/jets/application_controller.rb +28 -0
  9. data/engines/internal/app/controllers/jets/bare_controller.rb +6 -0
  10. data/engines/internal/app/controllers/jets/health_controller.rb +55 -0
  11. data/engines/internal/app/controllers/jets/info_controller.rb +45 -0
  12. data/{lib/jets → engines}/internal/app/controllers/jets/mailers_controller.rb +12 -14
  13. data/{lib/jets → engines}/internal/app/controllers/jets/mount_controller.rb +6 -10
  14. data/{lib/jets → engines}/internal/app/controllers/jets/public_controller.rb +6 -2
  15. data/engines/internal/app/controllers/jets/welcome_controller.rb +9 -0
  16. data/{lib/jets → engines}/internal/app/functions/jets/base_path.rb +2 -1
  17. data/{lib/jets → engines}/internal/app/functions/jets/base_path_mapping.rb +26 -6
  18. data/engines/internal/app/jobs/jets/preheat_job.rb +67 -0
  19. data/engines/internal/app/views/jets/info/properties.html.erb +1 -0
  20. data/engines/internal/app/views/jets/info/routes.html.erb +10 -0
  21. data/{lib/jets → engines}/internal/app/views/jets/mailers/email.html.erb +37 -17
  22. data/engines/internal/app/views/jets/mailers/index.html.erb +8 -0
  23. data/engines/internal/app/views/jets/mailers/mailer.html.erb +6 -0
  24. data/{lib/jets/commands/templates/skeleton/public/index.html.tt → engines/internal/app/views/jets/welcome/index.html.erb} +8 -4
  25. data/engines/internal/app/views/layouts/application.html.erb +51 -0
  26. data/engines/internal/lib/internal/actiondispatch.rb +39 -0
  27. data/engines/internal/lib/internal/actionmailer.rb +51 -0
  28. data/engines/internal/lib/internal/actionview.rb +152 -0
  29. data/engines/internal/lib/internal/activerecord.rb +37 -0
  30. data/engines/internal/lib/internal/activesupport.rb +47 -0
  31. data/engines/internal/lib/internal/engine.rb +13 -0
  32. data/engines/internal/lib/internal/i18n_engine.rb +19 -0
  33. data/engines/internal/lib/internal/jets_controller.rb +46 -0
  34. data/engines/internal/lib/internal/overrides/debug_exceptions.rb +40 -0
  35. data/engines/internal/lib/internal/templates/rescues/_trace.html.erb +62 -0
  36. data/engines/internal/lib/internal/templates/rescues/_trace.text.erb +9 -0
  37. data/engines/internal/lib/internal/turbines/asset_tag_helper.rb +70 -0
  38. data/engines/internal/lib/internal/turbines/helpers.rb +18 -0
  39. data/engines/internal/lib/internal/turbines/routes_helpers.rb +42 -0
  40. data/exe/jets +1 -10
  41. data/jets.gemspec +14 -11
  42. data/lib/jets/app_loader.rb +77 -0
  43. data/lib/jets/application/bootstrap.rb +100 -0
  44. data/lib/jets/application/configuration/defaults.rb +256 -0
  45. data/lib/jets/application/configuration.rb +494 -0
  46. data/lib/jets/application/default_middleware_stack.rb +140 -0
  47. data/lib/jets/application/dummy_erb_compiler.rb +18 -0
  48. data/lib/jets/application/finisher.rb +266 -0
  49. data/lib/jets/application/routes_reloader.rb +80 -0
  50. data/lib/jets/application.rb +515 -198
  51. data/lib/jets/authorizer/base.rb +1 -0
  52. data/lib/jets/authorizer/dsl.rb +15 -11
  53. data/lib/jets/authorizer/helpers/iam_helper.rb +13 -11
  54. data/lib/jets/autoloaders/gem.rb +70 -0
  55. data/lib/jets/autoloaders/inflector.rb +21 -0
  56. data/lib/jets/autoloaders.rb +38 -101
  57. data/lib/jets/aws_services/stack_status.rb +1 -1
  58. data/lib/jets/backtrace_cleaner.rb +27 -0
  59. data/lib/jets/booter.rb +29 -176
  60. data/lib/jets/builders/code_builder.rb +45 -117
  61. data/lib/jets/builders/code_size.rb +1 -0
  62. data/lib/jets/builders/gem_replacer.rb +5 -6
  63. data/lib/jets/builders/handler_generator.rb +34 -14
  64. data/lib/jets/builders/lambda_layer.rb +2 -7
  65. data/lib/jets/builders/purger.rb +1 -1
  66. data/lib/jets/builders/rack_packager.rb +1 -1
  67. data/lib/jets/builders/ruby_packager.rb +17 -6
  68. data/lib/jets/builders/shim_vars/app.rb +10 -6
  69. data/lib/jets/builders/templates/handlers/one_lambda_for_all_controllers.rb +33 -0
  70. data/lib/jets/builders/templates/handlers/one_lambda_per_controller.rb +20 -0
  71. data/lib/jets/builders/templates/{handler.rb → handlers/one_lambda_per_method.rb} +6 -0
  72. data/lib/jets/bundle.rb +2 -9
  73. data/lib/jets/cfn/base.rb +82 -0
  74. data/lib/jets/cfn/builder/api/base.rb +12 -0
  75. data/lib/jets/cfn/{builders/api_deployment_builder.rb → builder/api/deployment.rb} +10 -20
  76. data/lib/jets/cfn/{builders/api_gateway_builder.rb → builder/api/gateway.rb} +14 -37
  77. data/lib/jets/cfn/builder/api/mapping.rb +54 -0
  78. data/lib/jets/cfn/builder/api/methods.rb +72 -0
  79. data/lib/jets/cfn/builder/api/paged.rb +30 -0
  80. data/lib/jets/cfn/builder/api/pages/base.rb +105 -0
  81. data/lib/jets/cfn/builder/api/pages/methods.rb +17 -0
  82. data/lib/jets/cfn/builder/api/pages/page.rb +19 -0
  83. data/lib/jets/cfn/builder/api/pages/resources.rb +21 -0
  84. data/lib/jets/cfn/builder/api/resources.rb +40 -0
  85. data/lib/jets/cfn/{builders/authorizer_builder.rb → builder/authorizer.rb} +16 -19
  86. data/lib/jets/cfn/builder/controller.rb +28 -0
  87. data/lib/jets/cfn/builder/function.rb +9 -0
  88. data/lib/jets/cfn/{builders → builder}/interface.rb +45 -51
  89. data/lib/jets/cfn/builder/job.rb +10 -0
  90. data/lib/jets/cfn/builder/nested.rb +130 -0
  91. data/lib/jets/cfn/builder/one_controller.rb +53 -0
  92. data/lib/jets/cfn/{builders/parent_builder → builder/parent}/stagger.rb +1 -1
  93. data/lib/jets/cfn/{builders/parent_builder.rb → builder/parent.rb} +54 -54
  94. data/lib/jets/cfn/builder/post_process.rb +25 -0
  95. data/lib/jets/cfn/{builders/rule_builder.rb → builder/rule.rb} +4 -8
  96. data/lib/jets/cfn/{builders/shared_builder.rb → builder/shared.rb} +4 -3
  97. data/lib/jets/cfn/{builders → builder}/util/source.rb +1 -1
  98. data/lib/jets/{commands/build.rb → cfn/builder.rb} +50 -78
  99. data/lib/jets/cfn/deployment.rb +45 -0
  100. data/lib/jets/cfn/download.rb +39 -0
  101. data/lib/jets/cfn/params/api/base.rb +39 -0
  102. data/lib/jets/cfn/params/api/cors.rb +10 -0
  103. data/lib/jets/cfn/params/api/methods.rb +69 -0
  104. data/lib/jets/cfn/params/api/resources.rb +28 -0
  105. data/lib/jets/{resource/child_stack/common_parameters.rb → cfn/params/common.rb} +3 -3
  106. data/lib/jets/{resource → cfn/resource}/api_gateway/authorizer.rb +21 -21
  107. data/lib/jets/cfn/resource/api_gateway/base_path/function.rb +57 -0
  108. data/lib/jets/{resource → cfn/resource}/api_gateway/base_path/mapping.rb +13 -12
  109. data/lib/jets/cfn/resource/api_gateway/base_path/role.rb +70 -0
  110. data/lib/jets/{resource → cfn/resource}/api_gateway/deployment.rb +13 -20
  111. data/lib/jets/{resource → cfn/resource}/api_gateway/domain_name.rb +11 -11
  112. data/lib/jets/{resource → cfn/resource}/api_gateway/method/authorization.rb +1 -1
  113. data/lib/jets/cfn/resource/api_gateway/method.rb +92 -0
  114. data/lib/jets/{resource → cfn/resource}/api_gateway/resource.rb +14 -10
  115. data/lib/jets/cfn/resource/api_gateway/resource_id.rb +25 -0
  116. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/change_detection.rb +1 -1
  117. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/logical_id/message.rb +1 -1
  118. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/logical_id.rb +1 -1
  119. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/base.rb +5 -3
  120. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/media_types.rb +2 -2
  121. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/page.rb +5 -5
  122. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/to.rb +8 -3
  123. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/variable.rb +2 -2
  124. data/lib/jets/cfn/resource/api_gateway/rest_api/routes/change.rb +27 -0
  125. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/collision/variable_exception.rb +1 -1
  126. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/collision.rb +1 -1
  127. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes.rb +1 -1
  128. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api.rb +12 -12
  129. data/lib/jets/{resource → cfn/resource}/associated.rb +1 -1
  130. data/lib/jets/{resource → cfn/resource}/config/config_rule.rb +18 -18
  131. data/lib/jets/{resource → cfn/resource}/config/managed_rule.rb +5 -5
  132. data/lib/jets/{resource → cfn/resource}/events/rule.rb +10 -10
  133. data/lib/jets/{resource → cfn/resource}/iam/application_role.rb +4 -4
  134. data/lib/jets/{resource → cfn/resource}/iam/base_role_definition.rb +15 -15
  135. data/lib/jets/{resource → cfn/resource}/iam/class_role.rb +5 -5
  136. data/lib/jets/{resource → cfn/resource}/iam/function_role.rb +6 -6
  137. data/lib/jets/{resource → cfn/resource}/iam/managed_policy.rb +1 -1
  138. data/lib/jets/{resource → cfn/resource}/iam/policy.rb +8 -8
  139. data/lib/jets/{resource → cfn/resource}/iam/policy_document.rb +10 -9
  140. data/lib/jets/{resource → cfn/resource}/iot/topic_rule.rb +10 -10
  141. data/lib/jets/{resource → cfn/resource}/lambda/event_source_mapping.rb +9 -9
  142. data/lib/jets/cfn/resource/lambda/function/controller.rb +21 -0
  143. data/lib/jets/{resource → cfn/resource}/lambda/function/environment.rb +4 -5
  144. data/lib/jets/cfn/resource/lambda/function.rb +266 -0
  145. data/lib/jets/{resource → cfn/resource}/lambda/gem_layer.rb +2 -2
  146. data/lib/jets/{resource → cfn/resource}/lambda/layer_version.rb +10 -10
  147. data/lib/jets/cfn/resource/lambda/permission.rb +51 -0
  148. data/lib/jets/cfn/resource/logs/subscription_filter.rb +31 -0
  149. data/lib/jets/cfn/resource/nested/api/base.rb +4 -0
  150. data/lib/jets/cfn/resource/nested/api/deployment.rb +53 -0
  151. data/lib/jets/cfn/resource/nested/api/gateway.rb +15 -0
  152. data/lib/jets/cfn/resource/nested/api/mapping.rb +33 -0
  153. data/lib/jets/cfn/resource/nested/api/methods.rb +30 -0
  154. data/lib/jets/cfn/resource/nested/api/page.rb +8 -0
  155. data/lib/jets/cfn/resource/nested/api/resources.rb +22 -0
  156. data/lib/jets/{resource/child_stack → cfn/resource/nested}/app_class.rb +15 -48
  157. data/lib/jets/{resource/child_stack → cfn/resource/nested}/authorizer.rb +8 -14
  158. data/lib/jets/cfn/resource/nested/base.rb +38 -0
  159. data/lib/jets/cfn/resource/nested/one_controller.rb +48 -0
  160. data/lib/jets/{resource/child_stack → cfn/resource/nested}/shared.rb +10 -16
  161. data/lib/jets/cfn/resource/one/function.rb +66 -0
  162. data/lib/jets/cfn/resource/one/permission.rb +17 -0
  163. data/lib/jets/{resource → cfn/resource}/replacer.rb +26 -27
  164. data/lib/jets/{resource → cfn/resource}/route53/record_set.rb +18 -18
  165. data/lib/jets/{resource → cfn/resource}/s3/bucket.rb +4 -4
  166. data/lib/jets/cfn/resource/s3/jets_bucket.rb +68 -0
  167. data/lib/jets/{resource → cfn/resource}/sns/subscription.rb +8 -8
  168. data/lib/jets/{resource → cfn/resource}/sns/topic.rb +10 -10
  169. data/lib/jets/{resource → cfn/resource}/sns/topic_policy.rb +13 -13
  170. data/lib/jets/{resource → cfn/resource}/sqs/queue.rb +5 -5
  171. data/lib/jets/{resource → cfn/resource}/standardizer.rb +8 -9
  172. data/lib/jets/cfn/resource.rb +8 -0
  173. data/lib/jets/cfn/ship.rb +20 -19
  174. data/lib/jets/cfn/template.rb +89 -0
  175. data/lib/jets/cfn/upload.rb +26 -23
  176. data/lib/jets/cli.rb +28 -210
  177. data/lib/jets/command/actions.rb +49 -0
  178. data/lib/jets/command/api_helpers.rb +41 -0
  179. data/lib/jets/command/aws_helpers.rb +26 -0
  180. data/lib/jets/command/base.rb +204 -0
  181. data/lib/jets/command/behavior.rb +83 -0
  182. data/lib/jets/command/environment_argument.rb +42 -0
  183. data/lib/jets/command/help/call.md +48 -0
  184. data/lib/jets/{commands → command}/help/deploy.md +1 -1
  185. data/lib/jets/command/help/logs.md +21 -0
  186. data/lib/jets/{commands → command}/help/new.md +3 -4
  187. data/lib/jets/command/help/projects.md +6 -0
  188. data/lib/jets/command/help/releases.md +37 -0
  189. data/lib/jets/command/help/rollback.md +5 -0
  190. data/lib/jets/command/help/routes.md +15 -0
  191. data/lib/jets/command/help/stacks.md +6 -0
  192. data/lib/jets/command/help.rb +17 -0
  193. data/lib/jets/command/helpers/editor.rb +35 -0
  194. data/lib/jets/command.rb +133 -0
  195. data/lib/jets/commands/application/application_command.rb +40 -0
  196. data/lib/jets/commands/build/build_command.rb +33 -0
  197. data/lib/jets/commands/call/anonymous_guesser.rb +1 -1
  198. data/lib/jets/commands/call/autoload_guesser.rb +2 -2
  199. data/lib/jets/commands/call/base_guesser.rb +4 -4
  200. data/lib/jets/commands/call/call_command.rb +27 -0
  201. data/lib/jets/commands/call/caller.rb +184 -0
  202. data/lib/jets/commands/call/guesser.rb +1 -1
  203. data/lib/jets/commands/clean/base.rb +1 -1
  204. data/lib/jets/commands/clean/build.rb +1 -1
  205. data/lib/jets/commands/clean/clean_command.rb +15 -0
  206. data/lib/jets/commands/clean/log.rb +1 -1
  207. data/lib/jets/commands/configure/configure_command.rb +9 -0
  208. data/lib/jets/commands/console/console_command.rb +38 -0
  209. data/lib/jets/commands/credentials/USAGE +103 -0
  210. data/lib/jets/commands/credentials/credentials_command/diffing.rb +51 -0
  211. data/lib/jets/commands/credentials/credentials_command.rb +139 -0
  212. data/lib/jets/commands/db/system/change/change_command.rb +24 -0
  213. data/lib/jets/commands/dbconsole/dbconsole_command.rb +184 -0
  214. data/lib/jets/commands/degenerate/degenerate_command.rb +21 -0
  215. data/lib/jets/commands/delete/delete_command.rb +155 -0
  216. data/lib/jets/commands/{deploy.rb → deploy/deploy_command.rb} +28 -47
  217. data/lib/jets/commands/dev/dev_command.rb +19 -0
  218. data/lib/jets/commands/{dotenv.rb → dotenv/dotenv_command.rb} +2 -2
  219. data/lib/jets/commands/encrypted/USAGE +46 -0
  220. data/lib/jets/commands/encrypted/encrypted_command.rb +87 -0
  221. data/lib/jets/commands/gems/gems_command.rb +14 -0
  222. data/lib/jets/commands/generate/generate_command.rb +95 -0
  223. data/lib/jets/commands/help/USAGE +20 -0
  224. data/lib/jets/commands/help/help_command.rb +15 -0
  225. data/lib/jets/commands/initializers/initializers_command.rb +19 -0
  226. data/lib/jets/commands/logs/logs_command.rb +45 -0
  227. data/lib/jets/commands/new/new_command.rb +19 -0
  228. data/lib/jets/commands/notes/notes_command.rb +30 -0
  229. data/lib/jets/commands/plugin/plugin_command.rb +45 -0
  230. data/lib/jets/commands/projects/projects_command.rb +30 -0
  231. data/lib/jets/commands/rake/rake_command.rb +59 -0
  232. data/lib/jets/commands/releases/releases_command.rb +72 -0
  233. data/lib/jets/commands/rollback/rollback_command.rb +41 -0
  234. data/lib/jets/commands/routes/routes_command.rb +19 -0
  235. data/lib/jets/commands/runner/runner_command.rb +60 -0
  236. data/lib/jets/commands/server/server_command.rb +291 -0
  237. data/lib/jets/commands/stacks/stacks_command.rb +39 -0
  238. data/lib/jets/commands/status/status_command.rb +9 -0
  239. data/lib/jets/commands/{url.rb → url/url_command.rb} +37 -14
  240. data/lib/jets/commands/version/version_command.rb +11 -0
  241. data/lib/jets/commands.rb +17 -0
  242. data/lib/jets/configuration.rb +166 -0
  243. data/lib/jets/controller/base.rb +105 -183
  244. data/lib/jets/controller/compat/abstract_controller/base.rb +126 -0
  245. data/lib/jets/controller/compat/action_controller/metal.rb +99 -0
  246. data/lib/jets/controller/compat/caching.rb +13 -0
  247. data/lib/jets/controller/compat/future.rb +13 -0
  248. data/lib/jets/controller/compat/route_set.rb +47 -0
  249. data/lib/jets/controller/decorate/apigw_stage.rb +39 -0
  250. data/lib/jets/controller/{authorization.rb → decorate/authorization.rb} +1 -1
  251. data/lib/jets/controller/decorate/logging.rb +90 -0
  252. data/lib/jets/controller/decorate/redirecting.rb +16 -0
  253. data/lib/jets/controller/decorate/url_for.rb +10 -0
  254. data/lib/jets/controller/{rack/adapter.rb → handler/apigw.rb} +36 -37
  255. data/lib/jets/controller/handler.rb +41 -0
  256. data/lib/jets/controller/middleware/main.rb +16 -8
  257. data/lib/jets/controller/middleware/{local/api_gateway.rb → mimic/apigw.rb} +40 -15
  258. data/lib/jets/controller/middleware/mimic/lambda_context.rb +44 -0
  259. data/lib/jets/controller/middleware/{local.rb → mimic.rb} +36 -51
  260. data/lib/jets/controller/rack_adapter/action.rb +35 -0
  261. data/lib/jets/controller/{rack → rack_adapter}/env.rb +39 -24
  262. data/lib/jets/controller/request/compat/params.rb +144 -0
  263. data/lib/jets/controller/request/compat/request.rb +125 -0
  264. data/lib/jets/controller/request.rb +35 -18
  265. data/lib/jets/controller/response/compat/response.rb +67 -0
  266. data/lib/jets/controller/response.rb +91 -8
  267. data/lib/jets/core.rb +142 -51
  268. data/lib/jets/core_ext/kernel.rb +2 -2
  269. data/lib/jets/core_ext/symbol.rb +5 -0
  270. data/lib/jets/core_ext.rb +4 -0
  271. data/lib/jets/dev_caching.rb +44 -0
  272. data/lib/jets/dotenv/ssm.rb +5 -2
  273. data/lib/jets/dotenv.rb +2 -1
  274. data/lib/jets/engine/configuration.rb +96 -0
  275. data/lib/jets/engine/turbines.rb +23 -0
  276. data/lib/jets/engine.rb +380 -0
  277. data/lib/jets/exception_reporting.rb +43 -0
  278. data/lib/jets/generators/job/job_generator.rb +41 -0
  279. data/lib/jets/generators/job/templates/event_types/dynamodb.rb.tt +8 -0
  280. data/lib/jets/generators/job/templates/event_types/iot.rb.tt +8 -0
  281. data/lib/jets/generators/job/templates/event_types/kinesis.rb.tt +9 -0
  282. data/lib/jets/generators/job/templates/event_types/log.rb.tt +9 -0
  283. data/lib/jets/generators/job/templates/event_types/rule.rb.tt +23 -0
  284. data/lib/jets/generators/job/templates/event_types/s3.rb.tt +11 -0
  285. data/lib/jets/{generator/templates/active_job/job/templates/job.rb.tt → generators/job/templates/event_types/scheduled.rb.tt} +3 -3
  286. data/lib/jets/generators/job/templates/event_types/sns.rb.tt +9 -0
  287. data/lib/jets/generators/job/templates/event_types/sqs.rb.tt +9 -0
  288. data/lib/jets/generators/overrides/app/USAGE +38 -0
  289. data/lib/jets/generators/overrides/app/app_generator.rb +148 -0
  290. data/lib/jets/generators/overrides/app/helpers.rb +139 -0
  291. data/lib/jets/generators/overrides/app/templates/.env +10 -0
  292. data/lib/jets/{commands/templates/skeleton/.gitignore → generators/overrides/app/templates/.gitignore.tt} +2 -1
  293. data/lib/jets/generators/overrides/app/templates/Gemfile.tt +25 -0
  294. data/lib/jets/generators/overrides/app/templates/Rakefile +2 -0
  295. data/lib/jets/generators/overrides/app/templates/app/assets/config/manifest.js +3 -0
  296. data/lib/jets/generators/overrides/app/templates/app/assets/stylesheets/application.css +15 -0
  297. data/lib/jets/generators/overrides/app/templates/app/javascript/application.js +5 -0
  298. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/app/models/application_record.rb +1 -1
  299. data/lib/jets/generators/overrides/app/templates/app/views/layouts/application.html.erb.tt +30 -0
  300. data/lib/jets/generators/overrides/app/templates/bin/jets +3 -0
  301. data/lib/jets/generators/overrides/app/templates/config/application.rb.tt +15 -0
  302. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/config/database.yml.tt +1 -1
  303. data/lib/jets/generators/overrides/app/templates/config/environments/development.rb.tt +29 -0
  304. data/lib/jets/generators/overrides/app/templates/config/environments/production.rb.tt +19 -0
  305. data/lib/jets/generators/overrides/app/templates/config/environments/test.rb.tt +23 -0
  306. data/lib/jets/generators/overrides/app/templates/config/initializers/content_security_policy.rb +31 -0
  307. data/lib/jets/generators/overrides/app/templates/config/initializers/filter_parameter_logging.rb +8 -0
  308. data/lib/jets/generators/overrides/app/templates/config/initializers/permissions_policy.rb +11 -0
  309. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/config/routes.rb +5 -1
  310. data/lib/jets/generators/overrides/app/templates/db/.gitkeep +0 -0
  311. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/public/404.html +6 -6
  312. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/public/422.html +6 -6
  313. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/public/500.html +6 -6
  314. data/lib/jets/generators/overrides/templates/erb/scaffold/index.html.erb +22 -0
  315. data/lib/jets/generators/overrides/templates/erb/scaffold/partial.html.erb +8 -0
  316. data/lib/jets/{generator/templates/rails/scaffold_controller/api_controller.rb → generators/overrides/templates/rails/scaffold_controller/api_controller.rb.tt} +5 -9
  317. data/lib/jets/generators/overrides/templates/rails/scaffold_controller/controller.rb.tt +67 -0
  318. data/lib/jets/generators.rb +112 -0
  319. data/lib/jets/info.rb +116 -0
  320. data/lib/jets/initializable.rb +95 -0
  321. data/lib/jets/job/base.rb +3 -2
  322. data/lib/jets/job/dsl/dynamodb_event.rb +19 -9
  323. data/lib/jets/job/dsl/event_source_mapping.rb +1 -1
  324. data/lib/jets/job/dsl/iot_event.rb +6 -6
  325. data/lib/jets/job/dsl/kinesis_event.rb +5 -5
  326. data/lib/jets/job/dsl/log_event.rb +2 -2
  327. data/lib/jets/job/dsl/rule_event.rb +7 -4
  328. data/lib/jets/job/dsl/s3_event.rb +1 -1
  329. data/lib/jets/job/dsl/sns_event.rb +6 -6
  330. data/lib/jets/job/dsl/sqs_event.rb +11 -11
  331. data/lib/jets/klass.rb +5 -6
  332. data/lib/jets/lambda/definition.rb +118 -0
  333. data/lib/jets/lambda/dsl/warnings.rb +57 -0
  334. data/lib/jets/lambda/dsl.rb +64 -53
  335. data/lib/jets/lambda/function.rb +3 -3
  336. data/lib/jets/lambda/function_constructor.rb +6 -6
  337. data/lib/jets/lambda/functions.rb +36 -1
  338. data/lib/jets/mega/request/source.rb +1 -2
  339. data/lib/jets/mega/request.rb +4 -4
  340. data/lib/jets/names.rb +31 -15
  341. data/lib/jets/overrides/dummy/rails.rb +11 -0
  342. data/lib/jets/overrides/lambda/marshaller.rb +10 -0
  343. data/lib/jets/overrides/puma.rb +10 -0
  344. data/lib/jets/paths.rb +243 -0
  345. data/lib/jets/{poly_fun → poly}/base_executor.rb +13 -13
  346. data/lib/jets/{poly_fun → poly}/lambda_executor.rb +2 -2
  347. data/lib/jets/{poly_fun → poly}/node_error.rb +1 -1
  348. data/lib/jets/{poly_fun → poly}/node_executor.rb +4 -4
  349. data/lib/jets/{poly_fun → poly}/python_error.rb +1 -1
  350. data/lib/jets/{poly_fun → poly}/python_executor.rb +2 -2
  351. data/lib/jets/{poly_fun.rb → poly.rb} +12 -12
  352. data/lib/jets/preheat.rb +12 -25
  353. data/lib/jets/processors/deducer.rb +2 -2
  354. data/lib/jets/processors/main_processor.rb +6 -13
  355. data/lib/jets/rack/logger.rb +77 -0
  356. data/lib/jets/router/compat/route_set.rb +177 -0
  357. data/lib/jets/router/dsl/mount.rb +40 -6
  358. data/lib/jets/router/dsl.rb +125 -105
  359. data/lib/jets/router/engine_mount.rb +36 -0
  360. data/lib/jets/router/help.rb +130 -0
  361. data/lib/jets/router/helpers/named_routes/add_full_url.rb +13 -0
  362. data/lib/jets/router/helpers/named_routes/generated.rb +197 -0
  363. data/lib/jets/router/helpers/named_routes/proxy.rb +66 -0
  364. data/lib/jets/router/matcher.rb +140 -17
  365. data/lib/jets/router/resources/options.rb +6 -4
  366. data/lib/jets/router/route/after_initialize.rb +64 -0
  367. data/lib/jets/router/route/as.rb +93 -0
  368. data/lib/jets/router/route/authorizer.rb +1 -0
  369. data/lib/jets/router/route/compat.rb +45 -0
  370. data/lib/jets/router/route/info.rb +74 -0
  371. data/lib/jets/router/route/node.rb +137 -0
  372. data/lib/jets/router/route/path.rb +93 -0
  373. data/lib/jets/router/route.rb +109 -106
  374. data/lib/jets/router/route_set.rb +214 -0
  375. data/lib/jets/router/scope.rb +204 -69
  376. data/lib/jets/router/state.rb +36 -16
  377. data/lib/jets/router/util.rb +1 -31
  378. data/lib/jets/router.rb +64 -162
  379. data/lib/jets/ruby_version_check.rb +15 -0
  380. data/lib/jets/rule/base.rb +1 -0
  381. data/lib/jets/rule/dsl.rb +7 -7
  382. data/lib/jets/secrets.rb +110 -0
  383. data/lib/jets/spec_helpers/controllers/request.rb +22 -16
  384. data/lib/jets/spec_helpers/controllers.rb +32 -24
  385. data/lib/jets/spec_helpers.rb +0 -6
  386. data/lib/jets/stack/builder.rb +3 -2
  387. data/lib/jets/stack/definition.rb +1 -4
  388. data/lib/jets/stack/function.rb +2 -2
  389. data/lib/jets/stack/main/dsl/cloudwatch.rb +4 -4
  390. data/lib/jets/stack/main/dsl/kinesis.rb +2 -2
  391. data/lib/jets/stack/main/dsl/lambda.rb +26 -20
  392. data/lib/jets/stack/main/dsl/sqs.rb +2 -2
  393. data/lib/jets/stack/output/lookup.rb +1 -1
  394. data/lib/jets/stack/output.rb +2 -2
  395. data/lib/jets/stack/parameter.rb +2 -2
  396. data/lib/jets/stack/resource.rb +3 -3
  397. data/lib/jets/stack/s3_event.rb +51 -37
  398. data/lib/jets/stack.rb +1 -1
  399. data/lib/jets/tasks/engine.rake +85 -0
  400. data/lib/jets/tasks/framework.rake +66 -0
  401. data/lib/jets/tasks/log.rake +41 -0
  402. data/lib/jets/tasks/middleware.rake +9 -0
  403. data/lib/jets/tasks/misc.rake +81 -0
  404. data/lib/jets/tasks/statistics.rake +37 -0
  405. data/lib/jets/tasks/tmp.rake +51 -0
  406. data/lib/jets/tasks/yarn.rake +29 -0
  407. data/lib/jets/tasks/zeitwerk.rake +61 -0
  408. data/lib/jets/tasks.rb +18 -0
  409. data/lib/jets/turbine/configurable.rb +36 -0
  410. data/lib/jets/turbine/configuration.rb +101 -0
  411. data/lib/jets/turbine.rb +164 -20
  412. data/lib/jets/util/camelize.rb +24 -0
  413. data/lib/jets/version.rb +1 -1
  414. data/lib/jets.rb +7 -15
  415. metadata +427 -336
  416. data/bin/release +0 -9
  417. data/lib/jets/application/defaults.rb +0 -230
  418. data/lib/jets/builders/reconfigure_rails/config/initializers/jets.rb +0 -16
  419. data/lib/jets/builders/reconfigure_rails.rb +0 -114
  420. data/lib/jets/cfn/builders/api_resources_builder.rb +0 -44
  421. data/lib/jets/cfn/builders/base_child_builder.rb +0 -88
  422. data/lib/jets/cfn/builders/controller_builder.rb +0 -50
  423. data/lib/jets/cfn/builders/function_builder.rb +0 -14
  424. data/lib/jets/cfn/builders/job_builder.rb +0 -14
  425. data/lib/jets/cfn/builders/page_builder.rb +0 -80
  426. data/lib/jets/cfn/built_template.rb +0 -15
  427. data/lib/jets/cfn/template_source.rb +0 -61
  428. data/lib/jets/commands/base.rb +0 -145
  429. data/lib/jets/commands/call.rb +0 -184
  430. data/lib/jets/commands/clean.rb +0 -19
  431. data/lib/jets/commands/configure.rb +0 -51
  432. data/lib/jets/commands/console.rb +0 -18
  433. data/lib/jets/commands/db/environment-task.rake +0 -3
  434. data/lib/jets/commands/db/tasks/dummy/app.rb +0 -25
  435. data/lib/jets/commands/db/tasks/dummy/config.rb +0 -14
  436. data/lib/jets/commands/db/tasks.rb +0 -34
  437. data/lib/jets/commands/db.rb +0 -13
  438. data/lib/jets/commands/dbconsole.rb +0 -134
  439. data/lib/jets/commands/delete.rb +0 -136
  440. data/lib/jets/commands/dynamodb/migrate.rb +0 -9
  441. data/lib/jets/commands/dynamodb/migrator.rb +0 -36
  442. data/lib/jets/commands/dynamodb.rb +0 -19
  443. data/lib/jets/commands/gems.rb +0 -13
  444. data/lib/jets/commands/help/call.md +0 -69
  445. data/lib/jets/commands/help/dynamodb/generate.md +0 -52
  446. data/lib/jets/commands/help/dynamodb/migrate.md +0 -4
  447. data/lib/jets/commands/help/routes.md +0 -16
  448. data/lib/jets/commands/help.rb +0 -9
  449. data/lib/jets/commands/import/base.rb +0 -49
  450. data/lib/jets/commands/import/cheatsheet.rb +0 -35
  451. data/lib/jets/commands/import/rack.rb +0 -16
  452. data/lib/jets/commands/import/rails.rb +0 -74
  453. data/lib/jets/commands/import/sequence.rb +0 -90
  454. data/lib/jets/commands/import/templates/config/database.yml +0 -30
  455. data/lib/jets/commands/import/templates/submodules-cheatsheet.md +0 -89
  456. data/lib/jets/commands/import.rb +0 -12
  457. data/lib/jets/commands/main.rb +0 -169
  458. data/lib/jets/commands/markdown/creator.rb +0 -58
  459. data/lib/jets/commands/markdown/index.rb +0 -27
  460. data/lib/jets/commands/markdown/page.rb +0 -125
  461. data/lib/jets/commands/markdown/shell.rb +0 -11
  462. data/lib/jets/commands/new.rb +0 -173
  463. data/lib/jets/commands/rake_command.rb +0 -61
  464. data/lib/jets/commands/rake_tasks.rb +0 -50
  465. data/lib/jets/commands/runner.rb +0 -16
  466. data/lib/jets/commands/sequence.rb +0 -104
  467. data/lib/jets/commands/stack_info.rb +0 -30
  468. data/lib/jets/commands/templates/skeleton/.env.development.tt +0 -3
  469. data/lib/jets/commands/templates/skeleton/.env.test +0 -3
  470. data/lib/jets/commands/templates/skeleton/.env.tt +0 -3
  471. data/lib/jets/commands/templates/skeleton/.jetskeep +0 -1
  472. data/lib/jets/commands/templates/skeleton/Gemfile.tt +0 -40
  473. data/lib/jets/commands/templates/skeleton/Procfile +0 -7
  474. data/lib/jets/commands/templates/skeleton/Rakefile +0 -2
  475. data/lib/jets/commands/templates/skeleton/app/models/application_item.rb +0 -2
  476. data/lib/jets/commands/templates/skeleton/app/views/layouts/application.html.erb.tt +0 -26
  477. data/lib/jets/commands/templates/skeleton/config/application.rb.tt +0 -72
  478. data/lib/jets/commands/templates/skeleton/config/dynamodb.yml +0 -22
  479. data/lib/jets/commands/templates/skeleton/config/environments/development.rb +0 -7
  480. data/lib/jets/commands/templates/skeleton/config/environments/production.rb +0 -9
  481. data/lib/jets/commands/templates/skeleton/config/environments/test.rb +0 -7
  482. data/lib/jets/commands/templates/webpacker/app/javascript/packs/application.js.tt +0 -23
  483. data/lib/jets/commands/templates/webpacker/app/javascript/packs/theme.scss.tt +0 -24
  484. data/lib/jets/commands/upgrade/templates/bin/webpack +0 -19
  485. data/lib/jets/commands/upgrade/templates/bin/webpack-dev-server +0 -19
  486. data/lib/jets/commands/upgrade/version1.rb +0 -136
  487. data/lib/jets/commands/upgrade.rb +0 -105
  488. data/lib/jets/commands/webpacker_template.rb +0 -18
  489. data/lib/jets/controller/callbacks.rb +0 -73
  490. data/lib/jets/controller/cookies/jar.rb +0 -269
  491. data/lib/jets/controller/cookies.rb +0 -38
  492. data/lib/jets/controller/error/invalid_authenticity_token.rb +0 -6
  493. data/lib/jets/controller/error.rb +0 -4
  494. data/lib/jets/controller/forgery_protection.rb +0 -43
  495. data/lib/jets/controller/layout.rb +0 -17
  496. data/lib/jets/controller/middleware/cors.rb +0 -60
  497. data/lib/jets/controller/middleware/local/mimic_aws_call.rb +0 -38
  498. data/lib/jets/controller/middleware/local/route_matcher.rb +0 -22
  499. data/lib/jets/controller/middleware/reloader.rb +0 -15
  500. data/lib/jets/controller/parameters_filter.rb +0 -29
  501. data/lib/jets/controller/params.rb +0 -117
  502. data/lib/jets/controller/redirection.rb +0 -61
  503. data/lib/jets/controller/rendering/rack_renderer.rb +0 -267
  504. data/lib/jets/controller/rendering.rb +0 -96
  505. data/lib/jets/controller/stage.rb +0 -34
  506. data/lib/jets/controller.rb +0 -3
  507. data/lib/jets/db.rb +0 -15
  508. data/lib/jets/generator/templates/erb/controller/view.html.erb +0 -2
  509. data/lib/jets/generator/templates/erb/scaffold/index.html.erb +0 -29
  510. data/lib/jets/generator/templates/rails/controller/controller.rb +0 -13
  511. data/lib/jets/generator/templates/rails/helper/helper.rb +0 -4
  512. data/lib/jets/generator/templates/rails/scaffold_controller/controller.rb +0 -67
  513. data/lib/jets/generator.rb +0 -112
  514. data/lib/jets/internal/app/controllers/jets/bare_controller.rb +0 -16
  515. data/lib/jets/internal/app/controllers/jets/rack_controller.rb +0 -12
  516. data/lib/jets/internal/app/helpers/jets/mailers_helper.rb +0 -9
  517. data/lib/jets/internal/app/jobs/jets/preheat_job.rb +0 -57
  518. data/lib/jets/internal/app/views/jets/mailers/index.html.erb +0 -8
  519. data/lib/jets/internal/app/views/jets/mailers/mailer.html.erb +0 -6
  520. data/lib/jets/internal/turbines/jets/mailer.rb +0 -52
  521. data/lib/jets/lambda/task.rb +0 -111
  522. data/lib/jets/logger.rb +0 -21
  523. data/lib/jets/middleware/configurator.rb +0 -84
  524. data/lib/jets/middleware/default_stack.rb +0 -53
  525. data/lib/jets/middleware/layer.rb +0 -34
  526. data/lib/jets/middleware/stack.rb +0 -77
  527. data/lib/jets/middleware.rb +0 -33
  528. data/lib/jets/overrides/rails/action_controller.rb +0 -13
  529. data/lib/jets/overrides/rails/asset_tag_helper.rb +0 -114
  530. data/lib/jets/overrides/rails/common_methods.rb +0 -13
  531. data/lib/jets/overrides/rails/migration_checker.rb +0 -34
  532. data/lib/jets/overrides/rails/rendering_helper.rb +0 -27
  533. data/lib/jets/overrides/rails/url_helper.rb +0 -88
  534. data/lib/jets/overrides/rails.rb +0 -6
  535. data/lib/jets/rack_server.rb +0 -86
  536. data/lib/jets/resource/api_gateway/base_path/function.rb +0 -49
  537. data/lib/jets/resource/api_gateway/base_path/role.rb +0 -76
  538. data/lib/jets/resource/api_gateway/cors.rb +0 -61
  539. data/lib/jets/resource/api_gateway/method.rb +0 -102
  540. data/lib/jets/resource/api_gateway/rest_api/routes/change.rb +0 -16
  541. data/lib/jets/resource/base.rb +0 -28
  542. data/lib/jets/resource/child_stack/api_deployment.rb +0 -58
  543. data/lib/jets/resource/child_stack/api_gateway.rb +0 -23
  544. data/lib/jets/resource/child_stack/api_resource/page.rb +0 -20
  545. data/lib/jets/resource/child_stack/api_resource.rb +0 -54
  546. data/lib/jets/resource/child_stack/base.rb +0 -24
  547. data/lib/jets/resource/lambda/function.rb +0 -221
  548. data/lib/jets/resource/logs/subscription_filter.rb +0 -31
  549. data/lib/jets/resource/permission.rb +0 -45
  550. data/lib/jets/resource.rb +0 -71
  551. data/lib/jets/router/error.rb +0 -4
  552. data/lib/jets/router/finder.rb +0 -47
  553. data/lib/jets/router/helpers/core_helper.rb +0 -27
  554. data/lib/jets/router/helpers/named_routes_helper.rb +0 -8
  555. data/lib/jets/router/helpers.rb +0 -4
  556. data/lib/jets/router/method_creator/code.rb +0 -99
  557. data/lib/jets/router/method_creator/edit.rb +0 -12
  558. data/lib/jets/router/method_creator/generic.rb +0 -11
  559. data/lib/jets/router/method_creator/index.rb +0 -48
  560. data/lib/jets/router/method_creator/new.rb +0 -12
  561. data/lib/jets/router/method_creator/root.rb +0 -15
  562. data/lib/jets/router/method_creator/show.rb +0 -12
  563. data/lib/jets/router/method_creator.rb +0 -50
  564. data/lib/jets/turbo/database_yaml.rb +0 -41
  565. data/lib/jets/turbo/project/.gitignore +0 -12
  566. data/lib/jets/turbo/project/.jetskeep +0 -1
  567. data/lib/jets/turbo/project/Gemfile +0 -16
  568. data/lib/jets/turbo/project/Rakefile +0 -2
  569. data/lib/jets/turbo/project/app/controllers/application_controller.rb +0 -2
  570. data/lib/jets/turbo/project/app/helpers/application_helper.rb +0 -2
  571. data/lib/jets/turbo/project/app/jobs/application_job.rb +0 -4
  572. data/lib/jets/turbo/project/config/application.rb +0 -5
  573. data/lib/jets/turbo/project/config/routes.rb +0 -4
  574. data/lib/jets/turbo/project/config.ru +0 -5
  575. data/lib/jets/turbo/rails.rb +0 -127
  576. data/lib/jets/turbo/templates/config/database.yml +0 -30
  577. data/lib/jets/turbo.rb +0 -56
  578. data/readme/prerelease.md +0 -6
  579. data/readme/testing.md +0 -60
  580. /data/{lib/jets → engines}/internal/app/shared/functions/jets/s3_bucket_config.rb +0 -0
  581. /data/lib/jets/{commands → command}/help/build.md +0 -0
  582. /data/lib/jets/{commands → command}/help/clean/build.md +0 -0
  583. /data/lib/jets/{commands → command}/help/clean/log.md +0 -0
  584. /data/lib/jets/{commands → command}/help/console.md +0 -0
  585. /data/lib/jets/{commands → command}/help/db/generate.md +0 -0
  586. /data/lib/jets/{commands → command}/help/dbconsole.md +0 -0
  587. /data/lib/jets/{commands → command}/help/degenerate.md +0 -0
  588. /data/lib/jets/{commands → command}/help/delete.md +0 -0
  589. /data/lib/jets/{commands → command}/help/gems/check.md +0 -0
  590. /data/lib/jets/{commands → command}/help/generate.md +0 -0
  591. /data/lib/jets/{commands → command}/help/import/rack.md +0 -0
  592. /data/lib/jets/{commands → command}/help/import/rails.md +0 -0
  593. /data/lib/jets/{commands → command}/help/runner.md +0 -0
  594. /data/lib/jets/{commands → command}/help/server.md +0 -0
  595. /data/lib/jets/{commands → command}/help/status.md +0 -0
  596. /data/lib/jets/{commands → command}/help/upgrade.md +0 -0
  597. /data/lib/jets/{commands → command}/help/url.md +0 -0
  598. /data/lib/jets/{generator/templates/active_job → generators}/job/templates/application_job.rb.tt +0 -0
  599. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/.rspec +0 -0
  600. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/README.md +0 -0
  601. /data/{.gitmodules → lib/jets/generators/overrides/app/templates/app/assets/images/.keep} +0 -0
  602. /data/lib/jets/{commands/templates/skeleton/db/.gitkeep → generators/overrides/app/templates/app/assets/javascripts/.keep} +0 -0
  603. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/app/controllers/application_controller.rb +0 -0
  604. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/app/helpers/application_helper.rb +0 -0
  605. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/app/jobs/application_job.rb +0 -0
  606. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/config.ru +0 -0
  607. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/public/favicon.ico +0 -0
  608. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/spec/controllers/posts_controller_spec.rb +0 -0
  609. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/spec/fixtures/payloads/posts-index.json +0 -0
  610. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/spec/fixtures/payloads/posts-show.json +0 -0
  611. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/spec/spec_helper.rb.tt +0 -0
  612. /data/lib/jets/{generator → generators/overrides}/templates/erb/scaffold/_form.html.erb +0 -0
  613. /data/lib/jets/{generator → generators/overrides}/templates/erb/scaffold/edit.html.erb +0 -0
  614. /data/lib/jets/{generator → generators/overrides}/templates/erb/scaffold/new.html.erb +0 -0
  615. /data/lib/jets/{generator → generators/overrides}/templates/erb/scaffold/show.html.erb +0 -0
  616. /data/lib/jets/{generator → generators/overrides}/templates/rails/assets/javascript.js +0 -0
  617. /data/lib/jets/{generator → generators/overrides}/templates/rails/assets/stylesheet.css +0 -0
  618. /data/lib/jets/{generator → generators/overrides}/templates/rails/scaffold/scaffold.css +0 -0
@@ -1,6 +1,6 @@
1
1
  # CloudFormation SQS Queue docs: https://amzn.to/2MVWk0j
2
- module Jets::Resource::Sqs
3
- class Queue < Jets::Resource::Base
2
+ module Jets::Cfn::Resource::Sqs
3
+ class Queue < Jets::Cfn::Base
4
4
  def initialize(props={})
5
5
  @props = props # associated_properties from dsl.rb
6
6
  end
@@ -8,14 +8,14 @@ module Jets::Resource::Sqs
8
8
  def definition
9
9
  {
10
10
  queue_logical_id => {
11
- type: "AWS::SQS::Queue",
12
- properties: @props,
11
+ Type: "AWS::SQS::Queue",
12
+ Properties: @props,
13
13
  }
14
14
  }
15
15
  end
16
16
 
17
17
  def queue_logical_id
18
- "{namespace}_sqs_queue"
18
+ "{namespace}SqsQueue"
19
19
  end
20
20
  end
21
21
  end
@@ -1,5 +1,7 @@
1
- class Jets::Resource
1
+ class Jets::Cfn::Resource
2
2
  class Standardizer
3
+ include Jets::Util::Camelize
4
+
3
5
  attr_reader :definition
4
6
  def initialize(*definition)
5
7
  @definition = definition.flatten
@@ -9,30 +11,27 @@ class Jets::Resource
9
11
  camelize(standarize(@definition))
10
12
  end
11
13
 
12
- def camelize(attributes)
13
- Jets::Camelizer.transform(attributes)
14
- end
15
-
16
14
  def standarize(definition)
15
+ definition = camelize(definition)
17
16
  first, second, third, _ = definition
18
17
  if definition.size == 1 && first.is_a?(Hash) # long form
19
18
  first # pass through
20
19
  elsif definition.size == 2 && second.is_a?(Hash) # medium form
21
20
  logical_id, attributes = first, second
22
- attributes.delete(:properties) if attributes[:properties].nil? || attributes[:properties].empty?
21
+ attributes.delete(:Properties) if attributes[:Properties].nil? || attributes[:Properties].empty?
23
22
  { logical_id => attributes }
24
23
  elsif definition.size == 2 && second.is_a?(String) # short form
25
24
  logical_id, type = first, second
26
25
  { logical_id => {
27
- type: type
26
+ Type: type
28
27
  }}
29
28
  elsif definition.size == 3 && (second.is_a?(String) || second.is_a?(NilClass))# short form
30
29
  logical_id, type, properties = first, second, third
31
30
  template = { logical_id => {
32
- type: type
31
+ Type: type
33
32
  }}
34
33
  attributes = template.values.first
35
- attributes[:properties] = properties unless properties.empty?
34
+ attributes[:Properties] = properties unless properties.empty?
36
35
  template
37
36
  else # Dont understand this form
38
37
  raise "Invalid form provided. definition #{definition.inspect}"
@@ -0,0 +1,8 @@
1
+ module Jets::Cfn
2
+ class Resource < Base
3
+ attr_reader :definition
4
+ def initialize(definition, replacements)
5
+ @definition, @replacements = definition, replacements
6
+ end
7
+ end
8
+ end
data/lib/jets/cfn/ship.rb CHANGED
@@ -48,10 +48,20 @@ module Jets::Cfn
48
48
  clean_deploy_logs
49
49
  show_api_endpoint
50
50
  show_custom_domain
51
+ create_deployment_record
52
+ end
53
+
54
+ def create_deployment_record
55
+ return if @options[:stack_type] == :minimal
56
+ resp = Jets::Cfn::Deployment.new(@options.merge(stack_name: @parent_stack_name)).create
57
+ if resp
58
+ version = resp["version"]
59
+ Jets::Cfn::Upload.new.upload_cfn_templates(version) if version
60
+ end
51
61
  end
52
62
 
53
63
  def set_resource_tags
54
- @tags = Jets.config.resource_tags.map { |key, value| { key: key, value: value } }
64
+ @tags = Jets.config.cfn.build.resource_tags.map { |key, value| { key: key, value: value } }
55
65
  end
56
66
 
57
67
  def save_stack
@@ -83,11 +93,11 @@ module Jets::Cfn
83
93
  capabilities: capabilities, # ["CAPABILITY_IAM", "CAPABILITY_NAMED_IAM"]
84
94
  # disable_rollback: !@options[:rollback],
85
95
  tags: @tags,
86
- }.merge!(template.to_h)
96
+ }.merge!(template.stack_option)
87
97
  end
88
98
 
89
99
  def template
90
- @template ||= TemplateSource.new(Jets::Names.parent_template_path, @options)
100
+ @template ||= Template.new(Jets::Names.parent_template_path, @options)
91
101
  end
92
102
 
93
103
  # check for /(_COMPLETE|_FAILED)$/ status
@@ -96,9 +106,7 @@ module Jets::Cfn
96
106
  end
97
107
 
98
108
  def save_apigw_state
99
- state = Jets::Router::State.new
100
- state.save("pages", Jets::Cfn::Builders::PageBuilder.pages)
101
- state.save("routes", Jets::Router.routes)
109
+ Jets::Router::State.save_apigw_state
102
110
  end
103
111
 
104
112
  def prewarm
@@ -120,7 +128,7 @@ module Jets::Cfn
120
128
 
121
129
  def endpoint_unavailable?
122
130
  return true unless @options[:stack_type] == :full # s3 bucket is available
123
- return true if Jets::Router.routes.empty?
131
+ return true if Jets::Router.no_routes?
124
132
  _, status = stack_status
125
133
  return true if status.include?("ROLLBACK")
126
134
  return true unless api_gateway
@@ -154,12 +162,12 @@ module Jets::Cfn
154
162
  def show_custom_domain
155
163
  return unless endpoint_available? && Jets.custom_domain? && Jets.config.domain.route53
156
164
 
157
- domain_name = Jets::Resource::ApiGateway::DomainName.new
165
+ domain_name = Jets::Cfn::Resource::ApiGateway::DomainName.new
158
166
  # Looks funny but its right.
159
- # domain_name is a method on the Jets::Resource::ApiGateway::Domain instance
167
+ # domain_name is a method on the Jets::Cfn::Resource::ApiGateway::Domain instance
160
168
  url = "https://#{domain_name.domain_name}"
161
169
  puts "Custom Domain: #{url}"
162
- puts "App Domain: #{Jets.config.app.domain}" if Jets.config.app.domain
170
+ puts "App Domain: https://#{Jets.config.app.domain}" if Jets.config.app.domain
163
171
  end
164
172
 
165
173
  # All CloudFormation states listed here:
@@ -183,19 +191,12 @@ module Jets::Cfn
183
191
  end
184
192
 
185
193
  def capabilities
186
- ["CAPABILITY_IAM", "CAPABILITY_NAMED_IAM"] # TODO: remove capabilities hardcode
187
- # return @options[:capabilities] if @options[:capabilities]
188
- # if @options[:iam]
189
- # ["CAPABILITY_IAM", "CAPABILITY_NAMED_IAM"]
190
- # end
194
+ ["CAPABILITY_IAM", "CAPABILITY_NAMED_IAM"]
191
195
  end
192
196
 
193
197
  # Upload both code and child templates to s3
194
198
  def upload_to_s3
195
- raise "Did not specify @options[:s3_bucket] #{@options[:s3_bucket].inspect}" unless @options[:s3_bucket]
196
-
197
- uploader = Upload.new(@options[:s3_bucket])
198
- uploader.upload
199
+ Upload.new.upload
199
200
  end
200
201
  end
201
202
  end
@@ -0,0 +1,89 @@
1
+ module Jets::Cfn
2
+ class Template
3
+ include Jets::AwsServices
4
+
5
+ attr_reader :path
6
+
7
+ def initialize(path, options={})
8
+ @path = path
9
+ @options = options
10
+ end
11
+
12
+ def body
13
+ @body ||= IO.read(path)
14
+ end
15
+
16
+ def url
17
+ @url ||= upload_file_to_s3
18
+ end
19
+
20
+ def stack_option
21
+ if upload_to_s3?
22
+ from_s3
23
+ else
24
+ from_path
25
+ end
26
+ end
27
+
28
+ private
29
+ def upload_to_s3?
30
+ return false if @options[:stack_type] == :minimal # bucket not yet available
31
+ bucket_name.present?
32
+ end
33
+
34
+ def bucket_name
35
+ Jets.s3_bucket
36
+ end
37
+
38
+ def from_s3
39
+ {
40
+ template_url: url
41
+ }
42
+ end
43
+
44
+ def from_path
45
+ {
46
+ template_body: body
47
+ }
48
+ end
49
+
50
+ def upload_file_to_s3
51
+ obj = s3_resource.bucket(bucket_name).object(s3_key)
52
+ obj.upload_file(path)
53
+
54
+ "https://s3.amazonaws.com/#{bucket_name}/#{s3_key}"
55
+ end
56
+
57
+ def s3_key
58
+ @s3_key ||= "jets/cfn-templates/#{File.basename(path)}"
59
+ end
60
+
61
+ class << self
62
+ # Caches reduce filesystem IO calls
63
+ @@cache = {}
64
+ def load_file(path)
65
+ if @@cache[path]
66
+ @@cache[path]
67
+ else
68
+ @@cache[path] = Jets::Util::Yamler.load_file(path).deep_symbolize_keys
69
+ end
70
+ end
71
+
72
+ # Jets::Cfn::Template.lookup_logical_id(template_name, key)
73
+ # Jets::Cfn::Template.lookup_logical_id("api-resources", "UpApiResource")
74
+ def lookup_logical_id(template_name, key)
75
+ expr = "#{Jets::Names.templates_folder}/#{template_name}-*"
76
+ template_paths = Dir.glob(expr).sort.to_a
77
+ found_template = template_paths.detect do |path|
78
+ next unless File.file?(path)
79
+
80
+ template = Jets::Cfn::Template.load_file(path)
81
+ template[:Outputs].keys.include?(key.to_sym)
82
+ end
83
+
84
+ name = File.basename(found_template).sub(/\.yml$/,'')
85
+ name.underscore.camelize # IE: ApiResources1
86
+ end
87
+ end
88
+ end
89
+ end
@@ -1,17 +1,11 @@
1
- require 'action_view'
1
+ require 'active_support/number_helper'
2
2
  require 'digest'
3
3
  require 'rack/mime'
4
4
 
5
5
  module Jets::Cfn
6
6
  class Upload
7
7
  include Jets::AwsServices
8
- include ActionView::Helpers::NumberHelper # number_to_human_size
9
-
10
- attr_reader :bucket_name
11
-
12
- def initialize(bucket_name)
13
- @bucket_name = bucket_name
14
- end
8
+ include ActiveSupport::NumberHelper # number_to_human_size
15
9
 
16
10
  def upload
17
11
  upload_cfn_templates
@@ -19,14 +13,25 @@ module Jets::Cfn
19
13
  upload_assets
20
14
  end
21
15
 
22
- def upload_cfn_templates
23
- puts "Uploading CloudFormation templates to S3."
24
- expression = "#{Jets::Names.template_path_prefix}-*"
16
+ def bucket_name
17
+ Jets.s3_bucket
18
+ end
19
+
20
+ def upload_cfn_templates(version=nil)
21
+ puts "Uploading CloudFormation templates to S3." unless version # hide message when version is passed in
22
+ expression = "#{Jets::Names.templates_folder}/*"
23
+ if version # outside of each loop to avoid repeating
24
+ version = "versions/#{version}"
25
+ else
26
+ checksum = Jets::Builders::Md5.checksums["stage/code"]
27
+ version = "shas/#{checksum}"
28
+ end
29
+ checksum = Jets::Builders::Md5.checksums["stage/code"]
25
30
  Dir.glob(expression).each do |path|
26
31
  next unless File.file?(path)
27
-
28
- key = "jets/cfn-templates/#{File.basename(path)}"
32
+ key = ["jets/cfn-templates", version, File.basename(path)].compact.join('/')
29
33
  obj = s3_resource.bucket(bucket_name).object(key)
34
+ puts "Uploading #{path} to s3://#{bucket_name}/#{key}".color(:green) if ENV['JETS_DEBUG']
30
35
  obj.upload_file(path)
31
36
  end
32
37
  end
@@ -60,17 +65,11 @@ module Jets::Cfn
60
65
 
61
66
  def upload_public_assets
62
67
  public_folders = %w[public]
63
- public_folders = add_rack_assets(public_folders)
64
68
  public_folders.each do |folder|
65
69
  upload_asset_folder(folder)
66
70
  end
67
71
  end
68
72
 
69
- def add_rack_assets(public_folders)
70
- return public_folders unless Jets.rack?
71
- public_folders + %w[rack/public]
72
- end
73
-
74
73
  def upload_asset_folder(folder)
75
74
  expression = "#{Jets.root}/#{folder}/**/*"
76
75
  group_size = 10
@@ -88,12 +87,17 @@ module Jets::Cfn
88
87
  end
89
88
 
90
89
  def upload_to_s3(full_path)
91
- return if identical_on_s3?(full_path) && !ENV['JETS_ASSET_UPLOAD_FORCE']
90
+ if identical_on_s3?(full_path) && !ENV['JETS_ASSET_UPLOAD_FORCE']
91
+ puts "Asset is identical on s3: #{full_path}" if ENV['JETS_DEBUG_ASSETS']
92
+ return
93
+ end
92
94
 
93
95
  key = s3_key(full_path)
94
96
  obj = s3_resource.bucket(bucket_name).object(key)
95
97
  content_type = content_type_headers(full_path)
96
- Jets.logger.debug "Uploading and setting content type for s3://#{bucket_name}/#{key} content_type #{content_type[:content_type].inspect}"
98
+ if ENV['JETS_DEBUG_ASSETS']
99
+ puts "Uploading and setting content type for s3://#{bucket_name}/#{key} content_type #{content_type[:content_type].inspect}"
100
+ end
97
101
  obj.upload_file(full_path, { acl: "public-read", cache_control: cache_control }.merge(content_type))
98
102
  end
99
103
 
@@ -152,6 +156,5 @@ module Jets::Cfn
152
156
  "#{minutes.to_i}m #{seconds.to_i}s"
153
157
  end
154
158
  end
155
-
156
159
  end
157
- end
160
+ end
data/lib/jets/cli.rb CHANGED
@@ -1,215 +1,33 @@
1
- require "thor"
2
-
3
- class Jets::CLI
4
- def self.start(given_args=ARGV)
5
- new(given_args).start
6
- end
7
-
8
- def self.thor_tasks
9
- Jets::Commands::Base.namespaced_commands
10
- end
11
-
12
- def initialize(given_args=ARGV, **config)
13
- @given_args = given_args.dup
14
- @config = config
15
- end
16
-
17
- def start
18
- # Needs to be at the beginning to avoid boot_jets which causes some load errors
19
- if version_requested?
20
- puts Jets.version
21
- return
22
- end
23
-
24
- # Need to boot jets at this point for commands like: jets routes, deploy, console, etc to work
25
- boot_jets
26
- command_class = lookup(full_command)
27
- if command_class
28
- command_class.perform(full_command, thor_args)
29
- else
30
- main_help
31
- end
32
- end
33
-
34
- # The commands new and help do not call Jets.boot. Main reason is that Jets.boot should be run in a Jets project.
35
- #
36
- # * jets new - need to generate a project outside a project folder.
37
- # * jets help - don't need to be in a project folder general help.
38
- #
39
- # When you are inside a project folder though, more help commands are available and displayed.
40
- #
41
- def boot_jets
42
- set_jets_env_from_cli_arg!
43
- command = thor_args.first
44
- unless %w[new help].include?(command)
45
- Jets::Turbo.new.charge # handles Afterburner mode
46
- Jets.boot
47
- end
48
- end
49
-
50
- def version_requested?
51
- # jets --version
52
- # jets -v
53
- version_flags = ["--version", "-v"]
54
- @given_args.length == 1 && !(@given_args & version_flags).empty?
55
- end
56
-
57
- # Adjust JETS_ENV before boot_jets is called for the `jets deploy` command. Must do this early in the process
58
- # before Jets.boot because because `bundler_require` is called as part of the bootup process. It sets the Jets.env
59
- # to whatever the JETS_ENV is at the time to require the right bundler group.
60
- #
61
- # Defaults to development when not set.
62
- def set_jets_env_from_cli_arg!
63
- # Pretty tricky, we need to use the raw @given_args as thor_args eventually calls Commands::Base#eager_load!
64
- # which uses Jets.env before we get a chance to override ENV['JETS_ENV']
65
- command, env = @given_args[0..1]
66
-
67
- return unless %w[deploy delete console c].include?(command)
68
- env = nil if env&.starts_with?('-')
69
- return unless env
70
- ENV['JETS_ENV'] = env ? env : 'development'
71
- end
72
-
73
- # thor_args normalized the args Array to work with our Thor command
74
- # subclasses.
75
- # 1. The namespace is stripe
76
- # 2. Help is shifted in front if a help flag is detected
77
- def thor_args
78
- args = @given_args.clone
79
-
80
- # jets generate is a special command requires doesn't puts out the help menu automatically when
81
- # `jets generate` is called without additional args. We'll take it over early and fix it here.
82
- generate = full_command == "generate"
83
-
84
- if generate && ((args.size == 1 || help_flags.include?(args.last)) || args.size == 2)
85
- puts Jets::Generator.help
86
- exit
87
- end
88
-
89
- help_args = args & help_flags
90
- unless help_args.empty?
91
- # Allow using help flags at the end of the command to trigger help menu
92
- args -= help_flags # remove "help" and help flags from args
93
- args[0] = meth # first command will always be the meth now since
94
- # we removed the help flags
95
- args.unshift("help")
96
- args.compact!
97
- return args
98
- end
99
-
100
- # reassigns the command without the namespace if reached here
101
- args[0] = meth
102
- args.compact
103
- end
104
-
105
- def meth
106
- return nil unless full_command
107
-
108
- if full_command.include?(':')
109
- full_command.split(':').pop
110
- else
111
- full_command
112
- end
113
- end
114
-
115
- ALIASES = {
116
- "g" => "generate",
117
- "c" => "console",
118
- "s" => "server",
119
- "db" => "dbconsole",
120
- }
121
- def full_command
122
- # Removes any args that starts with -, those are option args.
123
- # Also remove "help" flag.
124
- args = @given_args.reject {|o| o =~ /^-/ } - help_flags
125
- command = args[0] # first argument should always be the command
126
- command = ALIASES[command] || command
127
- Jets::Commands::Base.autocomplete(command)
128
- end
129
-
130
- # 1. look up Thor tasks
131
- # 2. look up Rake tasks
132
- # 3. help menu with all commands when both Thor and Rake tasks are not found
133
- def lookup(full_command)
134
- thor_task_found = Jets::Commands::Base.namespaced_commands.include?(full_command)
135
- if thor_task_found
136
- return Jets::Commands::Base.klass_from_namespace(namespace)
137
- end
138
-
139
- return unless jets_project?
140
-
141
- Jets::Commands::RakeCommand if rake_task_found
142
- end
143
-
144
- def rake_task_found
145
- return false unless full_command # can be nil for subcommands and would break jets help without this check
146
- bracket_regex = /\[.*/ # matches everything after the first [
147
- command = full_command.sub(bracket_regex, '') # remove everything after the first [
148
- namespaced_commands = Jets::Commands::RakeCommand.namespaced_commands.map {|x| x.sub(bracket_regex, '') }
149
- namespaced_commands.include?(command)
150
- end
151
-
152
- def jets_project?
153
- File.exist?("config/application.rb")
154
- end
155
-
156
- # ["-h", "-?", "--help", "-D", "help"]
157
- def help_flags
158
- Thor::HELP_MAPPINGS + ["help"]
159
- end
160
-
161
- def namespace
162
- return nil unless full_command
163
-
164
- if full_command.include?(':')
165
- words = full_command.split(':')
166
- words.pop
167
- words.join(':')
168
- end
169
- end
170
-
171
- def main_help
172
- shell = Thor::Shell::Basic.new
173
- shell.say "Commands:"
174
- shell.print_table(thor_list, :indent => 2, :truncate => true)
175
-
176
- if jets_project? && !rake_list.empty?
177
- shell.say "\nCommands via rake:"
178
- shell.print_table(rake_list, :indent => 2, :truncate => true)
179
- end
180
-
181
- shell.say "\n"
182
- shell.say main_help_body
183
- end
184
-
185
- def thor_list
186
- Jets::Commands::Base.help_list(show_all_tasks)
187
- end
188
-
189
- def rake_list
190
- list = Jets::Commands::RakeCommand.formatted_rake_tasks(show_all_tasks)
191
- list.map do |array|
192
- array[0] = "jets #{array[0]}"
193
- array
194
- end
195
- end
196
-
197
- def show_all_tasks
198
- @given_args.include?("--all") || @given_args.include?("-A")
199
- end
1
+ # frozen_string_literal: true
2
+
3
+ require "jets/app_loader"
4
+
5
+ # If we are inside a Jets application this method performs an exec and thus
6
+ # the rest of this script is not run.
7
+ # exec_app either runs bin/jets or an inline version of it.
8
+ Jets::AppLoader.exec_app
9
+
10
+ # Allow running jets with local source code when bin/jets does not exist
11
+ # Useful for development: jets build
12
+ # Also allows jets to work without a bin/jets file in the project.
13
+ if File.exist?("config/application.rb")
14
+ APP_PATH = File.expand_path("config/application", Dir.pwd)
15
+ require "jets"
16
+ require "jets/commands"
17
+ return
18
+ end
200
19
 
201
- def main_help_body
202
- <<-EOL
203
- Add -h to any of the commands for more help. Examples:
20
+ # The rest of the script runs if outside of Jets application. IE:
21
+ # jets new demo
204
22
 
205
- jets call -h
206
- jets routes -h
207
- jets deploy -h
208
- jets status -h
209
- jets dynamodb:create -h
210
- jets db:create -h
23
+ require "jets/ruby_version_check"
24
+ Signal.trap("INT") { puts; exit(1) }
211
25
 
212
- EOL
213
- end
26
+ require "jets/command"
214
27
 
28
+ if ARGV.first == "plugin"
29
+ ARGV.shift
30
+ Jets::Command.invoke :plugin, ARGV
31
+ else
32
+ Jets::Command.invoke :application, ARGV
215
33
  end
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Jets
4
+ module Command
5
+ module Actions
6
+ # Change to the application's path if there is no <tt>config.ru</tt> file in current directory.
7
+ # This allows us to run <tt>jets server</tt> from other directories, but still get
8
+ # the main <tt>config.ru</tt> and properly set the <tt>tmp</tt> directory.
9
+ def set_application_directory!
10
+ Dir.chdir(File.expand_path("../..", APP_PATH)) unless File.exist?(File.expand_path("config.ru"))
11
+ end
12
+
13
+ def require_application_and_environment!
14
+ Jets.boot
15
+ end
16
+
17
+ def require_application!
18
+ require ENGINE_PATH if defined?(ENGINE_PATH)
19
+
20
+ if defined?(APP_PATH)
21
+ require APP_PATH
22
+ end
23
+ end
24
+
25
+ if defined?(ENGINE_PATH)
26
+ def load_tasks
27
+ Rake.application.init("jets")
28
+ Rake.application.load_rakefile
29
+ end
30
+
31
+ def load_generators
32
+ engine = ::Jets::Engine.find(ENGINE_ROOT)
33
+ Jets::Generators.namespace = engine.railtie_namespace
34
+ engine.load_generators
35
+ end
36
+ else
37
+ def load_tasks
38
+ Jets.boot # hack
39
+ Jets.application.load_tasks
40
+ end
41
+
42
+ def load_generators
43
+ Jets.application.load_generators
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
49
+
@@ -0,0 +1,41 @@
1
+ module Jets
2
+ module Command
3
+ module ApiHelpers # :nodoc:
4
+ extend ActiveSupport::Concern
5
+
6
+ include Jets::Api
7
+
8
+ def no_token_exit!
9
+ return if Jets::Api.token
10
+ puts "ERROR: This command requires Jets Api".color(:red)
11
+ puts "Please run `jets configure` first"
12
+ exit 1
13
+ end
14
+
15
+ def check_for_error_message!(resp)
16
+ # IE: {"error":"Invalid token. Please check your token in ~/.jets/config.yml"}
17
+ if resp && resp["error"]
18
+ $stderr.puts "ERROR: #{resp["error"]}"
19
+ exit 1
20
+ end
21
+ end
22
+
23
+ def paging_params
24
+ Jets.boot
25
+ params = {}
26
+ params[:page] = @options[:page] if @options[:page]
27
+ params[:order] = @options[:order] if @options[:order]
28
+ params
29
+ end
30
+
31
+ module ClassMethods
32
+ def paging_options(defaults={})
33
+ Proc.new do
34
+ option :page, aliases: :p, type: :numeric, desc: "Page number"
35
+ option :order, default: defaults[:order] || 'asc', desc: "Order: asc or desc"
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end