jets 3.1.0 → 5.0.10

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 (650) hide show
  1. checksums.yaml +4 -4
  2. data/.github/FUNDING.yml +1 -0
  3. data/.gitignore +5 -1
  4. data/CHANGELOG.md +190 -1
  5. data/CONTRIBUTING.md +1 -1
  6. data/Gemfile +1 -5
  7. data/LICENSE.txt +1 -1
  8. data/README.md +28 -50
  9. data/Rakefile +3 -3
  10. data/backers.md +0 -5
  11. data/engines/internal/app/controllers/jets/application_controller.rb +28 -0
  12. data/engines/internal/app/controllers/jets/bare_controller.rb +6 -0
  13. data/engines/internal/app/controllers/jets/health_controller.rb +55 -0
  14. data/engines/internal/app/controllers/jets/info_controller.rb +45 -0
  15. data/{lib/jets → engines}/internal/app/controllers/jets/mailers_controller.rb +12 -14
  16. data/{lib/jets → engines}/internal/app/controllers/jets/mount_controller.rb +6 -10
  17. data/{lib/jets → engines}/internal/app/controllers/jets/public_controller.rb +6 -2
  18. data/engines/internal/app/controllers/jets/welcome_controller.rb +9 -0
  19. data/engines/internal/app/functions/jets/base_path.rb +109 -0
  20. data/engines/internal/app/functions/jets/base_path_mapping.rb +191 -0
  21. data/engines/internal/app/jobs/jets/preheat_job.rb +68 -0
  22. data/engines/internal/app/views/jets/info/properties.html.erb +1 -0
  23. data/engines/internal/app/views/jets/info/routes.html.erb +10 -0
  24. data/{lib/jets → engines}/internal/app/views/jets/mailers/email.html.erb +37 -17
  25. data/engines/internal/app/views/jets/mailers/index.html.erb +8 -0
  26. data/engines/internal/app/views/jets/mailers/mailer.html.erb +6 -0
  27. data/{lib/jets/commands/templates/skeleton/public/index.html.tt → engines/internal/app/views/jets/welcome/index.html.erb} +8 -4
  28. data/engines/internal/app/views/layouts/application.html.erb +51 -0
  29. data/engines/internal/lib/internal/actiondispatch.rb +39 -0
  30. data/engines/internal/lib/internal/actionmailer.rb +51 -0
  31. data/engines/internal/lib/internal/actionview.rb +152 -0
  32. data/engines/internal/lib/internal/activerecord.rb +37 -0
  33. data/engines/internal/lib/internal/activesupport.rb +47 -0
  34. data/engines/internal/lib/internal/engine.rb +13 -0
  35. data/engines/internal/lib/internal/i18n_engine.rb +19 -0
  36. data/engines/internal/lib/internal/jets_controller.rb +46 -0
  37. data/engines/internal/lib/internal/overrides/debug_exceptions.rb +40 -0
  38. data/engines/internal/lib/internal/templates/rescues/_trace.html.erb +62 -0
  39. data/engines/internal/lib/internal/templates/rescues/_trace.text.erb +9 -0
  40. data/engines/internal/lib/internal/turbines/asset_tag_helper.rb +70 -0
  41. data/engines/internal/lib/internal/turbines/helpers.rb +18 -0
  42. data/engines/internal/lib/internal/turbines/routes_helpers.rb +42 -0
  43. data/exe/jets +1 -10
  44. data/jets.gemspec +17 -13
  45. data/lib/jets/app_loader.rb +77 -0
  46. data/lib/jets/application/bootstrap.rb +100 -0
  47. data/lib/jets/application/configuration/defaults.rb +256 -0
  48. data/lib/jets/application/configuration.rb +494 -0
  49. data/lib/jets/application/default_middleware_stack.rb +140 -0
  50. data/lib/jets/application/dummy_erb_compiler.rb +18 -0
  51. data/lib/jets/application/finisher.rb +266 -0
  52. data/lib/jets/application/routes_reloader.rb +80 -0
  53. data/lib/jets/application.rb +515 -199
  54. data/lib/jets/authorizer/base.rb +1 -0
  55. data/lib/jets/authorizer/dsl.rb +15 -11
  56. data/lib/jets/authorizer/helpers/iam_helper.rb +13 -11
  57. data/lib/jets/autoloaders/gem.rb +70 -0
  58. data/lib/jets/autoloaders/inflector.rb +21 -0
  59. data/lib/jets/autoloaders.rb +38 -101
  60. data/lib/jets/aws_info.rb +2 -2
  61. data/lib/jets/aws_services/stack_status.rb +2 -2
  62. data/lib/jets/aws_services.rb +8 -0
  63. data/lib/jets/backtrace_cleaner.rb +27 -0
  64. data/lib/jets/booter.rb +30 -118
  65. data/lib/jets/builders/code_builder.rb +67 -125
  66. data/lib/jets/builders/code_size.rb +1 -0
  67. data/lib/jets/builders/gem_replacer.rb +6 -12
  68. data/lib/jets/builders/handler_generator.rb +43 -15
  69. data/lib/jets/builders/lambda_layer.rb +2 -7
  70. data/lib/jets/builders/purger.rb +1 -1
  71. data/lib/jets/builders/rack_packager.rb +1 -1
  72. data/lib/jets/builders/ruby_packager.rb +54 -10
  73. data/lib/jets/builders/shim_vars/app.rb +10 -6
  74. data/lib/jets/builders/templates/handlers/one_lambda_for_all_controllers.rb +33 -0
  75. data/lib/jets/builders/templates/handlers/one_lambda_per_controller.rb +20 -0
  76. data/lib/jets/builders/templates/{handler.rb → handlers/one_lambda_per_method.rb} +6 -0
  77. data/lib/jets/bundle.rb +2 -9
  78. data/lib/jets/cfn/base.rb +82 -0
  79. data/lib/jets/cfn/builder/api/base.rb +12 -0
  80. data/lib/jets/cfn/{builders/api_deployment_builder.rb → builder/api/deployment.rb} +11 -21
  81. data/lib/jets/cfn/builder/api/gateway.rb +104 -0
  82. data/lib/jets/cfn/builder/api/mapping.rb +54 -0
  83. data/lib/jets/cfn/builder/api/methods.rb +72 -0
  84. data/lib/jets/cfn/builder/api/paged.rb +30 -0
  85. data/lib/jets/cfn/builder/api/pages/base.rb +105 -0
  86. data/lib/jets/cfn/builder/api/pages/methods.rb +17 -0
  87. data/lib/jets/cfn/builder/api/pages/page.rb +19 -0
  88. data/lib/jets/cfn/builder/api/pages/resources.rb +21 -0
  89. data/lib/jets/cfn/builder/api/resources.rb +40 -0
  90. data/lib/jets/cfn/{builders/authorizer_builder.rb → builder/authorizer.rb} +16 -19
  91. data/lib/jets/cfn/builder/controller.rb +28 -0
  92. data/lib/jets/cfn/builder/function.rb +9 -0
  93. data/lib/jets/cfn/builder/interface.rb +146 -0
  94. data/lib/jets/cfn/builder/job.rb +10 -0
  95. data/lib/jets/cfn/builder/nested.rb +130 -0
  96. data/lib/jets/cfn/builder/one_controller.rb +53 -0
  97. data/lib/jets/cfn/{builders/parent_builder → builder/parent}/stagger.rb +1 -1
  98. data/lib/jets/cfn/builder/parent.rb +149 -0
  99. data/lib/jets/cfn/builder/post_process.rb +25 -0
  100. data/lib/jets/cfn/{builders/rule_builder.rb → builder/rule.rb} +4 -8
  101. data/lib/jets/cfn/{builders/shared_builder.rb → builder/shared.rb} +5 -4
  102. data/lib/jets/cfn/{builders → builder}/util/source.rb +1 -1
  103. data/lib/jets/{commands/build.rb → cfn/builder.rb} +58 -80
  104. data/lib/jets/cfn/deployment.rb +85 -0
  105. data/lib/jets/cfn/download.rb +39 -0
  106. data/lib/jets/cfn/params/api/base.rb +39 -0
  107. data/lib/jets/cfn/params/api/cors.rb +10 -0
  108. data/lib/jets/cfn/params/api/methods.rb +69 -0
  109. data/lib/jets/cfn/params/api/resources.rb +28 -0
  110. data/lib/jets/{resource/child_stack/common_parameters.rb → cfn/params/common.rb} +4 -4
  111. data/lib/jets/{resource → cfn/resource}/api_gateway/authorizer.rb +21 -21
  112. data/lib/jets/cfn/resource/api_gateway/base_path/function.rb +57 -0
  113. data/lib/jets/{resource → cfn/resource}/api_gateway/base_path/mapping.rb +13 -12
  114. data/lib/jets/cfn/resource/api_gateway/base_path/role.rb +70 -0
  115. data/lib/jets/{resource → cfn/resource}/api_gateway/deployment.rb +13 -20
  116. data/lib/jets/{resource → cfn/resource}/api_gateway/domain_name.rb +11 -11
  117. data/lib/jets/{resource → cfn/resource}/api_gateway/method/authorization.rb +1 -1
  118. data/lib/jets/cfn/resource/api_gateway/method.rb +92 -0
  119. data/lib/jets/{resource → cfn/resource}/api_gateway/resource.rb +14 -10
  120. data/lib/jets/cfn/resource/api_gateway/resource_id.rb +25 -0
  121. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/change_detection.rb +1 -1
  122. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/logical_id/message.rb +14 -4
  123. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/logical_id.rb +4 -4
  124. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/base.rb +15 -41
  125. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/media_types.rb +3 -3
  126. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/page.rb +6 -6
  127. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/to.rb +8 -3
  128. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/variable.rb +2 -2
  129. data/lib/jets/cfn/resource/api_gateway/rest_api/routes/change.rb +27 -0
  130. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/collision/variable_exception.rb +1 -1
  131. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/collision.rb +1 -1
  132. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes.rb +1 -1
  133. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api.rb +22 -12
  134. data/lib/jets/{resource → cfn/resource}/associated.rb +1 -1
  135. data/lib/jets/{resource → cfn/resource}/config/config_rule.rb +18 -18
  136. data/lib/jets/{resource → cfn/resource}/config/managed_rule.rb +5 -5
  137. data/lib/jets/{resource → cfn/resource}/events/rule.rb +10 -10
  138. data/lib/jets/{resource → cfn/resource}/iam/application_role.rb +4 -4
  139. data/lib/jets/cfn/resource/iam/base_role_definition.rb +56 -0
  140. data/lib/jets/{resource → cfn/resource}/iam/class_role.rb +5 -5
  141. data/lib/jets/{resource → cfn/resource}/iam/function_role.rb +6 -6
  142. data/lib/jets/{resource → cfn/resource}/iam/managed_policy.rb +1 -1
  143. data/lib/jets/cfn/resource/iam/policy.rb +31 -0
  144. data/lib/jets/{resource → cfn/resource}/iam/policy_document.rb +10 -9
  145. data/lib/jets/{resource → cfn/resource}/iot/topic_rule.rb +10 -10
  146. data/lib/jets/{resource → cfn/resource}/lambda/event_source_mapping.rb +9 -9
  147. data/lib/jets/cfn/resource/lambda/function/controller.rb +21 -0
  148. data/lib/jets/{resource → cfn/resource}/lambda/function/environment.rb +9 -7
  149. data/lib/jets/cfn/resource/lambda/function.rb +266 -0
  150. data/lib/jets/{resource → cfn/resource}/lambda/gem_layer.rb +2 -2
  151. data/lib/jets/{resource → cfn/resource}/lambda/layer_version.rb +10 -10
  152. data/lib/jets/cfn/resource/lambda/permission.rb +51 -0
  153. data/lib/jets/cfn/resource/logs/subscription_filter.rb +31 -0
  154. data/lib/jets/cfn/resource/nested/api/base.rb +4 -0
  155. data/lib/jets/cfn/resource/nested/api/deployment.rb +53 -0
  156. data/lib/jets/cfn/resource/nested/api/gateway.rb +15 -0
  157. data/lib/jets/cfn/resource/nested/api/mapping.rb +33 -0
  158. data/lib/jets/cfn/resource/nested/api/methods.rb +30 -0
  159. data/lib/jets/cfn/resource/nested/api/page.rb +8 -0
  160. data/lib/jets/cfn/resource/nested/api/resources.rb +22 -0
  161. data/lib/jets/{resource/child_stack → cfn/resource/nested}/app_class.rb +15 -48
  162. data/lib/jets/{resource/child_stack → cfn/resource/nested}/authorizer.rb +8 -14
  163. data/lib/jets/cfn/resource/nested/base.rb +38 -0
  164. data/lib/jets/cfn/resource/nested/one_controller.rb +48 -0
  165. data/lib/jets/{resource/child_stack → cfn/resource/nested}/shared.rb +10 -16
  166. data/lib/jets/cfn/resource/one/function.rb +66 -0
  167. data/lib/jets/cfn/resource/one/permission.rb +17 -0
  168. data/lib/jets/{resource → cfn/resource}/replacer.rb +26 -27
  169. data/lib/jets/{resource → cfn/resource}/route53/record_set.rb +18 -18
  170. data/lib/jets/{resource → cfn/resource}/s3/bucket.rb +4 -4
  171. data/lib/jets/cfn/resource/s3/jets_bucket.rb +68 -0
  172. data/lib/jets/{resource → cfn/resource}/sns/subscription.rb +8 -8
  173. data/lib/jets/{resource → cfn/resource}/sns/topic.rb +10 -10
  174. data/lib/jets/{resource → cfn/resource}/sns/topic_policy.rb +13 -13
  175. data/lib/jets/{resource → cfn/resource}/sqs/queue.rb +5 -5
  176. data/lib/jets/{resource → cfn/resource}/standardizer.rb +8 -9
  177. data/lib/jets/cfn/resource.rb +8 -0
  178. data/lib/jets/cfn/ship.rb +33 -29
  179. data/lib/jets/cfn/status.rb +46 -3
  180. data/lib/jets/cfn/template.rb +89 -0
  181. data/lib/jets/cfn/upload.rb +29 -23
  182. data/lib/jets/cli.rb +28 -203
  183. data/lib/jets/command/actions.rb +49 -0
  184. data/lib/jets/command/api_helpers.rb +42 -0
  185. data/lib/jets/command/aws_helpers.rb +26 -0
  186. data/lib/jets/command/base.rb +209 -0
  187. data/lib/jets/command/behavior.rb +83 -0
  188. data/lib/jets/command/environment_argument.rb +42 -0
  189. data/lib/jets/command/help/call.md +48 -0
  190. data/lib/jets/{commands → command}/help/deploy.md +1 -1
  191. data/lib/jets/command/help/gems/check.md +1 -0
  192. data/lib/jets/command/help/logs.md +21 -0
  193. data/lib/jets/{commands → command}/help/new.md +3 -4
  194. data/lib/jets/command/help/projects.md +6 -0
  195. data/lib/jets/command/help/releases.md +19 -0
  196. data/lib/jets/command/help/rollback.md +5 -0
  197. data/lib/jets/command/help/routes.md +15 -0
  198. data/lib/jets/command/help/runner.md +40 -0
  199. data/lib/jets/command/help/stacks.md +6 -0
  200. data/lib/jets/command/help.rb +17 -0
  201. data/lib/jets/command/helpers/editor.rb +35 -0
  202. data/lib/jets/command/rake_decorate.rb +38 -0
  203. data/lib/jets/command.rb +142 -0
  204. data/lib/jets/commands/application/application_command.rb +46 -0
  205. data/lib/jets/commands/build/build_command.rb +33 -0
  206. data/lib/jets/commands/call/anonymous_guesser.rb +1 -1
  207. data/lib/jets/commands/call/autoload_guesser.rb +2 -2
  208. data/lib/jets/commands/call/base_guesser.rb +5 -5
  209. data/lib/jets/commands/call/call_command.rb +27 -0
  210. data/lib/jets/commands/call/caller.rb +184 -0
  211. data/lib/jets/commands/call/guesser.rb +1 -1
  212. data/lib/jets/commands/clean/base.rb +1 -1
  213. data/lib/jets/commands/clean/build.rb +1 -1
  214. data/lib/jets/commands/clean/clean_command.rb +15 -0
  215. data/lib/jets/commands/clean/log.rb +4 -4
  216. data/lib/jets/commands/configure/configure_command.rb +9 -0
  217. data/lib/jets/commands/console/console_command.rb +38 -0
  218. data/lib/jets/commands/credentials/USAGE +103 -0
  219. data/lib/jets/commands/credentials/credentials_command/diffing.rb +51 -0
  220. data/lib/jets/commands/credentials/credentials_command.rb +139 -0
  221. data/lib/jets/commands/db/system/change/change_command.rb +24 -0
  222. data/lib/jets/commands/dbconsole/dbconsole_command.rb +184 -0
  223. data/lib/jets/commands/degenerate/degenerate_command.rb +21 -0
  224. data/lib/jets/commands/delete/delete_command.rb +154 -0
  225. data/lib/jets/commands/{deploy.rb → deploy/deploy_command.rb} +34 -53
  226. data/lib/jets/commands/dev/dev_command.rb +19 -0
  227. data/lib/jets/commands/{dotenv.rb → dotenv/dotenv_command.rb} +2 -2
  228. data/lib/jets/commands/encrypted/USAGE +46 -0
  229. data/lib/jets/commands/encrypted/encrypted_command.rb +87 -0
  230. data/lib/jets/commands/gems/gems_command.rb +14 -0
  231. data/lib/jets/commands/generate/generate_command.rb +95 -0
  232. data/lib/jets/commands/help/USAGE +20 -0
  233. data/lib/jets/commands/help/help_command.rb +15 -0
  234. data/lib/jets/commands/initializers/initializers_command.rb +19 -0
  235. data/lib/jets/commands/logs/logs_command.rb +45 -0
  236. data/lib/jets/commands/new/new_command.rb +19 -0
  237. data/lib/jets/commands/notes/notes_command.rb +30 -0
  238. data/lib/jets/commands/plugin/plugin_command.rb +45 -0
  239. data/lib/jets/commands/projects/projects_command.rb +30 -0
  240. data/lib/jets/commands/rake/rake_command.rb +59 -0
  241. data/lib/jets/commands/releases/releases_command.rb +124 -0
  242. data/lib/jets/commands/rollback/rollback_command.rb +33 -0
  243. data/lib/jets/commands/routes/routes_command.rb +19 -0
  244. data/lib/jets/commands/runner/runner_command.rb +60 -0
  245. data/lib/jets/commands/server/server_command.rb +291 -0
  246. data/lib/jets/commands/stacks/stacks_command.rb +39 -0
  247. data/lib/jets/commands/status/status_command.rb +16 -0
  248. data/lib/jets/commands/url/url_command.rb +92 -0
  249. data/lib/jets/commands/version/version_command.rb +11 -0
  250. data/lib/jets/commands.rb +17 -0
  251. data/lib/jets/configuration.rb +166 -0
  252. data/lib/jets/controller/base.rb +105 -183
  253. data/lib/jets/controller/compat/abstract_controller/base.rb +126 -0
  254. data/lib/jets/controller/compat/action_controller/metal.rb +99 -0
  255. data/lib/jets/controller/compat/caching.rb +13 -0
  256. data/lib/jets/controller/compat/future.rb +13 -0
  257. data/lib/jets/controller/compat/route_set.rb +47 -0
  258. data/lib/jets/controller/decorate/apigw_stage.rb +39 -0
  259. data/lib/jets/controller/{authorization.rb → decorate/authorization.rb} +1 -1
  260. data/lib/jets/controller/decorate/logging.rb +90 -0
  261. data/lib/jets/controller/decorate/redirecting.rb +16 -0
  262. data/lib/jets/controller/decorate/url_for.rb +10 -0
  263. data/lib/jets/controller/{rack/adapter.rb → handler/apigw.rb} +36 -37
  264. data/lib/jets/controller/handler.rb +41 -0
  265. data/lib/jets/controller/middleware/main.rb +16 -8
  266. data/lib/jets/controller/middleware/{local/api_gateway.rb → mimic/apigw.rb} +41 -4
  267. data/lib/jets/controller/middleware/mimic/lambda_context.rb +44 -0
  268. data/lib/jets/controller/middleware/{local.rb → mimic.rb} +36 -51
  269. data/lib/jets/controller/rack_adapter/action.rb +35 -0
  270. data/lib/jets/controller/{rack → rack_adapter}/env.rb +39 -18
  271. data/lib/jets/controller/request/compat/params.rb +144 -0
  272. data/lib/jets/controller/request/compat/request.rb +125 -0
  273. data/lib/jets/controller/request.rb +35 -18
  274. data/lib/jets/controller/response/compat/response.rb +67 -0
  275. data/lib/jets/controller/response.rb +91 -8
  276. data/lib/jets/core.rb +159 -52
  277. data/lib/jets/core_ext/file.rb +9 -0
  278. data/lib/jets/core_ext/kernel.rb +2 -2
  279. data/lib/jets/core_ext/symbol.rb +5 -0
  280. data/lib/jets/core_ext.rb +4 -0
  281. data/lib/jets/dev_caching.rb +44 -0
  282. data/lib/jets/dotenv/ssm.rb +6 -3
  283. data/lib/jets/dotenv.rb +4 -3
  284. data/lib/jets/engine/configuration.rb +96 -0
  285. data/lib/jets/engine/turbines.rb +23 -0
  286. data/lib/jets/engine.rb +380 -0
  287. data/lib/jets/erb.rb +1 -1
  288. data/lib/jets/exception_reporting.rb +43 -0
  289. data/lib/jets/generators/job/job_generator.rb +41 -0
  290. data/lib/jets/generators/job/templates/event_types/dynamodb.rb.tt +8 -0
  291. data/lib/jets/generators/job/templates/event_types/iot.rb.tt +8 -0
  292. data/lib/jets/generators/job/templates/event_types/kinesis.rb.tt +9 -0
  293. data/lib/jets/generators/job/templates/event_types/log.rb.tt +9 -0
  294. data/lib/jets/generators/job/templates/event_types/rule.rb.tt +23 -0
  295. data/lib/jets/generators/job/templates/event_types/s3.rb.tt +11 -0
  296. data/lib/jets/generators/job/templates/event_types/scheduled.rb.tt +8 -0
  297. data/lib/jets/generators/job/templates/event_types/sns.rb.tt +11 -0
  298. data/lib/jets/generators/job/templates/event_types/sqs.rb.tt +11 -0
  299. data/lib/jets/generators/overrides/app/USAGE +38 -0
  300. data/lib/jets/generators/overrides/app/app_generator.rb +148 -0
  301. data/lib/jets/generators/overrides/app/helpers.rb +139 -0
  302. data/lib/jets/generators/overrides/app/templates/.env +10 -0
  303. data/lib/jets/{commands/templates/skeleton/.gitignore → generators/overrides/app/templates/.gitignore.tt} +2 -1
  304. data/lib/jets/generators/overrides/app/templates/.jetsignore +6 -0
  305. data/lib/jets/generators/overrides/app/templates/Gemfile.tt +28 -0
  306. data/lib/jets/generators/overrides/app/templates/Rakefile +2 -0
  307. data/lib/jets/generators/overrides/app/templates/app/assets/config/manifest.js +3 -0
  308. data/lib/jets/generators/overrides/app/templates/app/assets/stylesheets/application.css +15 -0
  309. data/lib/jets/generators/overrides/app/templates/app/javascript/application.js +5 -0
  310. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/app/models/application_record.rb +1 -1
  311. data/lib/jets/generators/overrides/app/templates/app/views/layouts/application.html.erb.tt +30 -0
  312. data/lib/jets/generators/overrides/app/templates/bin/jets +3 -0
  313. data/lib/jets/generators/overrides/app/templates/config/application.rb.tt +15 -0
  314. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/config/database.yml.tt +1 -1
  315. data/lib/jets/generators/overrides/app/templates/config/environments/development.rb.tt +29 -0
  316. data/lib/jets/generators/overrides/app/templates/config/environments/production.rb.tt +21 -0
  317. data/lib/jets/generators/overrides/app/templates/config/environments/test.rb.tt +23 -0
  318. data/lib/jets/generators/overrides/app/templates/config/initializers/content_security_policy.rb +31 -0
  319. data/lib/jets/generators/overrides/app/templates/config/initializers/filter_parameter_logging.rb +8 -0
  320. data/lib/jets/generators/overrides/app/templates/config/initializers/permissions_policy.rb +11 -0
  321. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/config/routes.rb +5 -1
  322. data/lib/jets/generators/overrides/app/templates/db/.gitkeep +0 -0
  323. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/public/404.html +6 -6
  324. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/public/422.html +6 -6
  325. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/public/500.html +6 -6
  326. data/lib/jets/generators/overrides/templates/erb/scaffold/index.html.erb +22 -0
  327. data/lib/jets/generators/overrides/templates/erb/scaffold/partial.html.erb +8 -0
  328. data/lib/jets/{generator/templates/rails/scaffold_controller/api_controller.rb → generators/overrides/templates/rails/scaffold_controller/api_controller.rb.tt} +5 -9
  329. data/lib/jets/generators/overrides/templates/rails/scaffold_controller/controller.rb.tt +67 -0
  330. data/lib/jets/generators.rb +112 -0
  331. data/lib/jets/inflections.rb +1 -1
  332. data/lib/jets/info.rb +116 -0
  333. data/lib/jets/initializable.rb +95 -0
  334. data/lib/jets/job/base.rb +11 -8
  335. data/lib/jets/job/dsl/dynamodb_event.rb +25 -14
  336. data/lib/jets/job/dsl/event_source_mapping.rb +1 -1
  337. data/lib/jets/job/dsl/iot_event.rb +6 -6
  338. data/lib/jets/job/dsl/kinesis_event.rb +10 -9
  339. data/lib/jets/job/dsl/log_event.rb +2 -2
  340. data/lib/jets/job/dsl/rule_event.rb +7 -4
  341. data/lib/jets/job/dsl/s3_event.rb +5 -5
  342. data/lib/jets/job/dsl/sns_event.rb +6 -6
  343. data/lib/jets/job/dsl/sqs_event.rb +15 -14
  344. data/lib/jets/job/helpers/{kinesis_event_helper.rb → kinesis_event.rb} +5 -1
  345. data/lib/jets/job/helpers/{log_event_helper.rb → log_event.rb} +5 -1
  346. data/lib/jets/job/helpers/s3_event.rb +50 -0
  347. data/lib/jets/job/helpers/sns_event.rb +26 -0
  348. data/lib/jets/job/helpers/sqs_event.rb +26 -0
  349. data/lib/jets/klass.rb +5 -6
  350. data/lib/jets/lambda/definition.rb +118 -0
  351. data/lib/jets/lambda/dsl/warnings.rb +57 -0
  352. data/lib/jets/lambda/dsl.rb +70 -53
  353. data/lib/jets/lambda/function.rb +3 -3
  354. data/lib/jets/lambda/function_constructor.rb +6 -6
  355. data/lib/jets/lambda/functions.rb +36 -1
  356. data/lib/jets/mega/hash_converter.rb +2 -2
  357. data/lib/jets/mega/request/source.rb +1 -2
  358. data/lib/jets/mega/request.rb +4 -4
  359. data/lib/jets/names.rb +79 -0
  360. data/lib/jets/overrides/dummy/rails.rb +11 -0
  361. data/lib/jets/overrides/lambda/marshaller.rb +10 -0
  362. data/lib/jets/overrides/puma.rb +10 -0
  363. data/lib/jets/paths.rb +243 -0
  364. data/lib/jets/{poly_fun → poly}/base_executor.rb +13 -13
  365. data/lib/jets/{poly_fun → poly}/lambda_executor.rb +2 -2
  366. data/lib/jets/{poly_fun → poly}/node_error.rb +1 -1
  367. data/lib/jets/{poly_fun → poly}/node_executor.rb +4 -4
  368. data/lib/jets/{poly_fun → poly}/python_error.rb +1 -1
  369. data/lib/jets/{poly_fun → poly}/python_executor.rb +2 -2
  370. data/lib/jets/{poly_fun.rb → poly.rb} +12 -12
  371. data/lib/jets/preheat.rb +26 -33
  372. data/lib/jets/processors/deducer.rb +2 -2
  373. data/lib/jets/processors/main_processor.rb +6 -13
  374. data/lib/jets/rack/logger.rb +77 -0
  375. data/lib/jets/router/compat/route_set.rb +177 -0
  376. data/lib/jets/router/dsl/mount.rb +40 -6
  377. data/lib/jets/router/dsl.rb +125 -105
  378. data/lib/jets/router/engine_mount.rb +36 -0
  379. data/lib/jets/router/help.rb +130 -0
  380. data/lib/jets/router/helpers/named_routes/add_full_url.rb +13 -0
  381. data/lib/jets/router/helpers/named_routes/generated.rb +197 -0
  382. data/lib/jets/router/helpers/named_routes/proxy.rb +66 -0
  383. data/lib/jets/router/matcher.rb +140 -17
  384. data/lib/jets/router/resources/options.rb +6 -4
  385. data/lib/jets/router/route/after_initialize.rb +64 -0
  386. data/lib/jets/router/route/as.rb +93 -0
  387. data/lib/jets/router/route/authorizer.rb +1 -0
  388. data/lib/jets/router/route/compat.rb +45 -0
  389. data/lib/jets/router/route/info.rb +74 -0
  390. data/lib/jets/router/route/node.rb +137 -0
  391. data/lib/jets/router/route/path.rb +93 -0
  392. data/lib/jets/router/route.rb +109 -90
  393. data/lib/jets/router/route_set.rb +214 -0
  394. data/lib/jets/router/scope.rb +204 -69
  395. data/lib/jets/router/state.rb +67 -0
  396. data/lib/jets/router/util.rb +1 -31
  397. data/lib/jets/router.rb +64 -150
  398. data/lib/jets/ruby_version_check.rb +15 -0
  399. data/lib/jets/rule/base.rb +1 -0
  400. data/lib/jets/rule/dsl.rb +7 -7
  401. data/lib/jets/secrets.rb +110 -0
  402. data/lib/jets/spec_helpers/controllers/request.rb +22 -16
  403. data/lib/jets/spec_helpers/controllers.rb +32 -24
  404. data/lib/jets/spec_helpers.rb +0 -6
  405. data/lib/jets/stack/builder.rb +3 -2
  406. data/lib/jets/stack/definition.rb +1 -4
  407. data/lib/jets/stack/function.rb +4 -2
  408. data/lib/jets/stack/main/dsl/cloudwatch.rb +4 -4
  409. data/lib/jets/stack/main/dsl/kinesis.rb +2 -2
  410. data/lib/jets/stack/main/dsl/lambda.rb +26 -19
  411. data/lib/jets/stack/main/dsl/sqs.rb +1 -1
  412. data/lib/jets/stack/output/lookup.rb +6 -2
  413. data/lib/jets/stack/output.rb +2 -2
  414. data/lib/jets/stack/parameter.rb +2 -2
  415. data/lib/jets/stack/resource.rb +3 -3
  416. data/lib/jets/stack/s3_event.rb +51 -37
  417. data/lib/jets/stack.rb +1 -1
  418. data/lib/jets/tasks/engine.rake +85 -0
  419. data/lib/jets/tasks/framework.rake +66 -0
  420. data/lib/jets/tasks/log.rake +41 -0
  421. data/lib/jets/tasks/middleware.rake +9 -0
  422. data/lib/jets/tasks/misc.rake +81 -0
  423. data/lib/jets/tasks/statistics.rake +37 -0
  424. data/lib/jets/tasks/tmp.rake +51 -0
  425. data/lib/jets/tasks/yarn.rake +29 -0
  426. data/lib/jets/tasks/zeitwerk.rake +61 -0
  427. data/lib/jets/tasks.rb +18 -0
  428. data/lib/jets/tmp_loader.rb +1 -1
  429. data/lib/jets/turbine/configurable.rb +36 -0
  430. data/lib/jets/turbine/configuration.rb +101 -0
  431. data/lib/jets/turbine.rb +164 -20
  432. data/lib/jets/util/camelize.rb +24 -0
  433. data/lib/jets/util/yamler.rb +18 -0
  434. data/lib/jets/version.rb +1 -1
  435. data/lib/jets.rb +9 -14
  436. metadata +462 -349
  437. data/.python-version +0 -1
  438. data/.ruby-version +0 -1
  439. data/bin/release +0 -9
  440. data/lib/jets/application/defaults.rb +0 -200
  441. data/lib/jets/builders/reconfigure_rails/config/initializers/jets.rb +0 -16
  442. data/lib/jets/builders/reconfigure_rails.rb +0 -114
  443. data/lib/jets/cfn/builders/api_gateway_builder.rb +0 -123
  444. data/lib/jets/cfn/builders/api_resources_builder.rb +0 -44
  445. data/lib/jets/cfn/builders/base_child_builder.rb +0 -69
  446. data/lib/jets/cfn/builders/controller_builder.rb +0 -50
  447. data/lib/jets/cfn/builders/function_builder.rb +0 -14
  448. data/lib/jets/cfn/builders/interface.rb +0 -133
  449. data/lib/jets/cfn/builders/job_builder.rb +0 -14
  450. data/lib/jets/cfn/builders/parent_builder.rb +0 -130
  451. data/lib/jets/cfn/built_template.rb +0 -15
  452. data/lib/jets/cfn/template_source.rb +0 -61
  453. data/lib/jets/commands/base.rb +0 -145
  454. data/lib/jets/commands/call.rb +0 -182
  455. data/lib/jets/commands/clean.rb +0 -19
  456. data/lib/jets/commands/configure.rb +0 -51
  457. data/lib/jets/commands/console.rb +0 -12
  458. data/lib/jets/commands/db/environment-task.rake +0 -3
  459. data/lib/jets/commands/db/tasks/dummy/app.rb +0 -25
  460. data/lib/jets/commands/db/tasks/dummy/config.rb +0 -14
  461. data/lib/jets/commands/db/tasks.rb +0 -34
  462. data/lib/jets/commands/db.rb +0 -13
  463. data/lib/jets/commands/dbconsole.rb +0 -134
  464. data/lib/jets/commands/delete.rb +0 -136
  465. data/lib/jets/commands/dynamodb/migrate.rb +0 -9
  466. data/lib/jets/commands/dynamodb/migrator.rb +0 -36
  467. data/lib/jets/commands/dynamodb.rb +0 -19
  468. data/lib/jets/commands/gems.rb +0 -13
  469. data/lib/jets/commands/help/call.md +0 -69
  470. data/lib/jets/commands/help/dynamodb/generate.md +0 -52
  471. data/lib/jets/commands/help/dynamodb/migrate.md +0 -4
  472. data/lib/jets/commands/help/gems/check.md +0 -6
  473. data/lib/jets/commands/help/routes.md +0 -16
  474. data/lib/jets/commands/help/runner.md +0 -17
  475. data/lib/jets/commands/help.rb +0 -9
  476. data/lib/jets/commands/import/base.rb +0 -49
  477. data/lib/jets/commands/import/cheatsheet.rb +0 -35
  478. data/lib/jets/commands/import/rack.rb +0 -16
  479. data/lib/jets/commands/import/rails.rb +0 -74
  480. data/lib/jets/commands/import/sequence.rb +0 -90
  481. data/lib/jets/commands/import/templates/config/database.yml +0 -30
  482. data/lib/jets/commands/import/templates/submodules-cheatsheet.md +0 -89
  483. data/lib/jets/commands/import.rb +0 -12
  484. data/lib/jets/commands/main.rb +0 -166
  485. data/lib/jets/commands/markdown/creator.rb +0 -58
  486. data/lib/jets/commands/markdown/index.rb +0 -27
  487. data/lib/jets/commands/markdown/page.rb +0 -125
  488. data/lib/jets/commands/markdown/shell.rb +0 -11
  489. data/lib/jets/commands/new.rb +0 -173
  490. data/lib/jets/commands/rake_command.rb +0 -61
  491. data/lib/jets/commands/rake_tasks.rb +0 -50
  492. data/lib/jets/commands/runner.rb +0 -16
  493. data/lib/jets/commands/sequence.rb +0 -105
  494. data/lib/jets/commands/stack_info.rb +0 -30
  495. data/lib/jets/commands/templates/skeleton/.env.development.tt +0 -3
  496. data/lib/jets/commands/templates/skeleton/.env.test +0 -3
  497. data/lib/jets/commands/templates/skeleton/.env.tt +0 -3
  498. data/lib/jets/commands/templates/skeleton/.jetskeep +0 -1
  499. data/lib/jets/commands/templates/skeleton/Gemfile.tt +0 -40
  500. data/lib/jets/commands/templates/skeleton/Procfile +0 -7
  501. data/lib/jets/commands/templates/skeleton/Rakefile +0 -2
  502. data/lib/jets/commands/templates/skeleton/app/models/application_item.rb +0 -2
  503. data/lib/jets/commands/templates/skeleton/app/views/layouts/application.html.erb.tt +0 -26
  504. data/lib/jets/commands/templates/skeleton/config/application.rb.tt +0 -71
  505. data/lib/jets/commands/templates/skeleton/config/dynamodb.yml +0 -22
  506. data/lib/jets/commands/templates/skeleton/config/environments/development.rb +0 -7
  507. data/lib/jets/commands/templates/skeleton/config/environments/production.rb +0 -9
  508. data/lib/jets/commands/templates/skeleton/config/environments/test.rb +0 -7
  509. data/lib/jets/commands/templates/webpacker/app/javascript/packs/application.js.tt +0 -23
  510. data/lib/jets/commands/templates/webpacker/app/javascript/packs/theme.scss.tt +0 -24
  511. data/lib/jets/commands/upgrade/templates/bin/webpack +0 -19
  512. data/lib/jets/commands/upgrade/templates/bin/webpack-dev-server +0 -19
  513. data/lib/jets/commands/upgrade/version1.rb +0 -136
  514. data/lib/jets/commands/upgrade.rb +0 -105
  515. data/lib/jets/commands/url.rb +0 -69
  516. data/lib/jets/commands/webpacker_template.rb +0 -18
  517. data/lib/jets/controller/callbacks.rb +0 -73
  518. data/lib/jets/controller/cookies/jar.rb +0 -269
  519. data/lib/jets/controller/cookies.rb +0 -38
  520. data/lib/jets/controller/error/invalid_authenticity_token.rb +0 -6
  521. data/lib/jets/controller/error.rb +0 -4
  522. data/lib/jets/controller/forgery_protection.rb +0 -43
  523. data/lib/jets/controller/layout.rb +0 -17
  524. data/lib/jets/controller/middleware/cors.rb +0 -60
  525. data/lib/jets/controller/middleware/local/mimic_aws_call.rb +0 -38
  526. data/lib/jets/controller/middleware/local/route_matcher.rb +0 -22
  527. data/lib/jets/controller/middleware/reloader.rb +0 -15
  528. data/lib/jets/controller/parameters_filter.rb +0 -29
  529. data/lib/jets/controller/params.rb +0 -117
  530. data/lib/jets/controller/redirection.rb +0 -61
  531. data/lib/jets/controller/rendering/rack_renderer.rb +0 -267
  532. data/lib/jets/controller/rendering.rb +0 -96
  533. data/lib/jets/controller/stage.rb +0 -34
  534. data/lib/jets/controller.rb +0 -3
  535. data/lib/jets/db.rb +0 -15
  536. data/lib/jets/generator/templates/active_job/job/templates/job.rb.tt +0 -8
  537. data/lib/jets/generator/templates/erb/controller/view.html.erb +0 -2
  538. data/lib/jets/generator/templates/erb/scaffold/index.html.erb +0 -29
  539. data/lib/jets/generator/templates/rails/controller/controller.rb +0 -13
  540. data/lib/jets/generator/templates/rails/helper/helper.rb +0 -4
  541. data/lib/jets/generator/templates/rails/scaffold_controller/controller.rb +0 -67
  542. data/lib/jets/generator.rb +0 -112
  543. data/lib/jets/internal/app/controllers/jets/bare_controller.rb +0 -16
  544. data/lib/jets/internal/app/controllers/jets/rack_controller.rb +0 -12
  545. data/lib/jets/internal/app/functions/jets/base_path.rb +0 -18
  546. data/lib/jets/internal/app/functions/jets/base_path_mapping.rb +0 -100
  547. data/lib/jets/internal/app/helpers/jets/mailers_helper.rb +0 -9
  548. data/lib/jets/internal/app/jobs/jets/preheat_job.rb +0 -70
  549. data/lib/jets/internal/app/views/jets/mailers/index.html.erb +0 -8
  550. data/lib/jets/internal/app/views/jets/mailers/mailer.html.erb +0 -6
  551. data/lib/jets/internal/turbines/jets/mailer.rb +0 -52
  552. data/lib/jets/job/helpers/s3_event_helper.rb +0 -13
  553. data/lib/jets/lambda/task.rb +0 -111
  554. data/lib/jets/logger.rb +0 -21
  555. data/lib/jets/middleware/configurator.rb +0 -84
  556. data/lib/jets/middleware/default_stack.rb +0 -53
  557. data/lib/jets/middleware/layer.rb +0 -34
  558. data/lib/jets/middleware/stack.rb +0 -77
  559. data/lib/jets/middleware.rb +0 -33
  560. data/lib/jets/naming.rb +0 -63
  561. data/lib/jets/overrides/rails/action_controller.rb +0 -13
  562. data/lib/jets/overrides/rails/asset_tag_helper.rb +0 -114
  563. data/lib/jets/overrides/rails/common_methods.rb +0 -13
  564. data/lib/jets/overrides/rails/migration_checker.rb +0 -34
  565. data/lib/jets/overrides/rails/rendering_helper.rb +0 -27
  566. data/lib/jets/overrides/rails/url_helper.rb +0 -88
  567. data/lib/jets/overrides/rails.rb +0 -6
  568. data/lib/jets/rack_server.rb +0 -86
  569. data/lib/jets/resource/api_gateway/base_path/function.rb +0 -49
  570. data/lib/jets/resource/api_gateway/base_path/role.rb +0 -76
  571. data/lib/jets/resource/api_gateway/cors.rb +0 -61
  572. data/lib/jets/resource/api_gateway/method.rb +0 -102
  573. data/lib/jets/resource/api_gateway/rest_api/routes/change.rb +0 -16
  574. data/lib/jets/resource/base.rb +0 -28
  575. data/lib/jets/resource/child_stack/api_deployment.rb +0 -58
  576. data/lib/jets/resource/child_stack/api_gateway.rb +0 -23
  577. data/lib/jets/resource/child_stack/api_resource/page.rb +0 -20
  578. data/lib/jets/resource/child_stack/api_resource.rb +0 -54
  579. data/lib/jets/resource/child_stack/base.rb +0 -24
  580. data/lib/jets/resource/iam/base_role_definition.rb +0 -47
  581. data/lib/jets/resource/lambda/function.rb +0 -221
  582. data/lib/jets/resource/logs/subscription_filter.rb +0 -31
  583. data/lib/jets/resource/permission.rb +0 -45
  584. data/lib/jets/resource.rb +0 -71
  585. data/lib/jets/router/error.rb +0 -4
  586. data/lib/jets/router/finder.rb +0 -47
  587. data/lib/jets/router/helpers/core_helper.rb +0 -27
  588. data/lib/jets/router/helpers/named_routes_helper.rb +0 -8
  589. data/lib/jets/router/helpers.rb +0 -4
  590. data/lib/jets/router/method_creator/code.rb +0 -99
  591. data/lib/jets/router/method_creator/edit.rb +0 -12
  592. data/lib/jets/router/method_creator/generic.rb +0 -11
  593. data/lib/jets/router/method_creator/index.rb +0 -48
  594. data/lib/jets/router/method_creator/new.rb +0 -12
  595. data/lib/jets/router/method_creator/root.rb +0 -15
  596. data/lib/jets/router/method_creator/show.rb +0 -12
  597. data/lib/jets/router/method_creator.rb +0 -50
  598. data/lib/jets/turbo/database_yaml.rb +0 -41
  599. data/lib/jets/turbo/project/.gitignore +0 -12
  600. data/lib/jets/turbo/project/.jetskeep +0 -1
  601. data/lib/jets/turbo/project/Gemfile +0 -16
  602. data/lib/jets/turbo/project/Rakefile +0 -2
  603. data/lib/jets/turbo/project/app/controllers/application_controller.rb +0 -2
  604. data/lib/jets/turbo/project/app/helpers/application_helper.rb +0 -2
  605. data/lib/jets/turbo/project/app/jobs/application_job.rb +0 -4
  606. data/lib/jets/turbo/project/config/application.rb +0 -5
  607. data/lib/jets/turbo/project/config/routes.rb +0 -4
  608. data/lib/jets/turbo/project/config.ru +0 -5
  609. data/lib/jets/turbo/rails.rb +0 -127
  610. data/lib/jets/turbo/templates/config/database.yml +0 -30
  611. data/lib/jets/turbo.rb +0 -56
  612. data/readme/prerelease.md +0 -6
  613. data/readme/testing.md +0 -60
  614. /data/{lib/jets → engines}/internal/app/shared/functions/jets/s3_bucket_config.rb +0 -0
  615. /data/lib/jets/{commands → command}/help/build.md +0 -0
  616. /data/lib/jets/{commands → command}/help/clean/build.md +0 -0
  617. /data/lib/jets/{commands → command}/help/clean/log.md +0 -0
  618. /data/lib/jets/{commands → command}/help/console.md +0 -0
  619. /data/lib/jets/{commands → command}/help/db/generate.md +0 -0
  620. /data/lib/jets/{commands → command}/help/dbconsole.md +0 -0
  621. /data/lib/jets/{commands → command}/help/degenerate.md +0 -0
  622. /data/lib/jets/{commands → command}/help/delete.md +0 -0
  623. /data/lib/jets/{commands → command}/help/generate.md +0 -0
  624. /data/lib/jets/{commands → command}/help/import/rack.md +0 -0
  625. /data/lib/jets/{commands → command}/help/import/rails.md +0 -0
  626. /data/lib/jets/{commands → command}/help/server.md +0 -0
  627. /data/lib/jets/{commands → command}/help/status.md +0 -0
  628. /data/lib/jets/{commands → command}/help/upgrade.md +0 -0
  629. /data/lib/jets/{commands → command}/help/url.md +0 -0
  630. /data/lib/jets/{generator/templates/active_job → generators}/job/templates/application_job.rb.tt +0 -0
  631. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/.rspec +0 -0
  632. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/README.md +0 -0
  633. /data/{.gitmodules → lib/jets/generators/overrides/app/templates/app/assets/images/.keep} +0 -0
  634. /data/lib/jets/{commands/templates/skeleton/db/.gitkeep → generators/overrides/app/templates/app/assets/javascripts/.keep} +0 -0
  635. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/app/controllers/application_controller.rb +0 -0
  636. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/app/helpers/application_helper.rb +0 -0
  637. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/app/jobs/application_job.rb +0 -0
  638. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/config.ru +0 -0
  639. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/public/favicon.ico +0 -0
  640. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/spec/controllers/posts_controller_spec.rb +0 -0
  641. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/spec/fixtures/payloads/posts-index.json +0 -0
  642. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/spec/fixtures/payloads/posts-show.json +0 -0
  643. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/spec/spec_helper.rb.tt +0 -0
  644. /data/lib/jets/{generator → generators/overrides}/templates/erb/scaffold/_form.html.erb +0 -0
  645. /data/lib/jets/{generator → generators/overrides}/templates/erb/scaffold/edit.html.erb +0 -0
  646. /data/lib/jets/{generator → generators/overrides}/templates/erb/scaffold/new.html.erb +0 -0
  647. /data/lib/jets/{generator → generators/overrides}/templates/erb/scaffold/show.html.erb +0 -0
  648. /data/lib/jets/{generator → generators/overrides}/templates/rails/assets/javascript.js +0 -0
  649. /data/lib/jets/{generator → generators/overrides}/templates/rails/assets/stylesheet.css +0 -0
  650. /data/lib/jets/{generator → generators/overrides}/templates/rails/scaffold/scaffold.css +0 -0
@@ -1,26 +1,37 @@
1
1
  module Jets::Job::Dsl
2
2
  module DynamodbEvent
3
- def dynamodb_event(table_name, options={})
4
- return if ENV['JETS_BUILD_NO_INTERNET'] # Disable during build since jets build tries to init this
3
+ def dynamodb_event(table_name_without_namespace, options={})
4
+ return if ENV['JETS_NO_INTERNET'] # Disable during build since jets build tries to init this
5
5
 
6
+ table_name = add_dynamodb_table_namespace(table_name_without_namespace)
6
7
  stream_arn = full_dynamodb_stream_arn(table_name)
7
8
  default_iam_policy = default_dynamodb_stream_policy(stream_arn)
8
9
 
9
- # Create iam policy allows access to queue
10
- # Allow disabling in case use wants to add permission application-wide and not have extra IAM policy
11
- iam_policy_props = options.delete(:iam_policy) || @iam_policy || default_iam_policy
12
- iam_policy(iam_policy_props) unless iam_policy_props == :disable
10
+ # Create iam policy allows access to dynamodb
11
+ iam_policy_option = [options.delete(:iam_policy)].compact.flatten
12
+ user_iam_policy = [@iam_policy].compact.flatten
13
+ iam_policy_props = iam_policy_option + user_iam_policy + [default_iam_policy]
14
+ iam_policy(iam_policy_props)
13
15
 
14
16
  props = options # by this time options only has EventSourceMapping properties
15
17
  default = {
16
- event_source_arn: stream_arn,
17
- starting_position: "TRIM_HORIZON",
18
+ EventSourceArn: stream_arn,
19
+ StartingPosition: "TRIM_HORIZON",
18
20
  }
19
21
  props = default.merge(props)
20
22
 
21
23
  event_source_mapping(props)
22
24
  end
23
25
 
26
+ def add_dynamodb_table_namespace(table_name_without_namespace)
27
+ ns = if Jets.config.events.dynamodb.table_namespace == true
28
+ Jets.table_namespace # does not include extra
29
+ elsif Jets.config.events.dynamodb.table_namespace
30
+ Jets.config.events.dynamodb.table_namespace # allow user to fully control namespace
31
+ end
32
+ ns_separator = Jets.config.events.dynamodb.table_namespace_separator
33
+ [ns, table_name_without_namespace].compact.join(ns_separator)
34
+ end
24
35
 
25
36
  # Expands table name to the full stream arn. Example:
26
37
  #
@@ -48,18 +59,18 @@ module Jets::Job::Dsl
48
59
 
49
60
  def default_dynamodb_stream_policy(stream_name_arn='*')
50
61
  stream = {
51
- action: ["dynamodb:GetRecords",
62
+ Action: ["dynamodb:GetRecords",
52
63
  "dynamodb:GetShardIterator",
53
64
  "dynamodb:DescribeStream",
54
65
  "dynamodb:ListStreams"],
55
- effect: "Allow",
56
- resource: stream_name_arn,
66
+ Effect: "Allow",
67
+ Resource: stream_name_arn,
57
68
  }
58
69
  table_name_arn = stream_name_arn.gsub(%r{/stream/20.*},'')
59
70
  table = {
60
- action: ["dynamodb:DescribeTable"],
61
- effect: "Allow",
62
- resource: table_name_arn,
71
+ Action: ["dynamodb:DescribeTable"],
72
+ Effect: "Allow",
73
+ Resource: table_name_arn,
63
74
  }
64
75
  [stream, table]
65
76
  end
@@ -2,7 +2,7 @@
2
2
  module Jets::Job::Dsl
3
3
  module EventSourceMapping
4
4
  def event_source_mapping(props={})
5
- r = Jets::Resource::Lambda::EventSourceMapping.new(props)
5
+ r = Jets::Cfn::Resource::Lambda::EventSourceMapping.new(props)
6
6
  with_fresh_properties do
7
7
  resource(r.definition) # add associated resource immediately
8
8
  end
@@ -3,19 +3,19 @@ module Jets::Job::Dsl
3
3
  # The user must at least pass in an SQL statement
4
4
  def iot_event(props={})
5
5
  if props.is_a?(String) # SQL Statement
6
- props = {sql: props}
7
- topic_props = {topic_rule_payload: props}
8
- elsif props.key?(:topic_rule_payload) # full properties structure
6
+ props = {Sql: props}
7
+ topic_props = {TopicRulePayload: props}
8
+ elsif props.key?(:TopicRulePayload) # full properties structure
9
9
  topic_props = props
10
- else # just the topic_rule_payload
11
- topic_props = {topic_rule_payload: props}
10
+ else # just the TopicRulePayload
11
+ topic_props = {TopicRulePayload: props}
12
12
  end
13
13
 
14
14
  declare_iot_topic(topic_props)
15
15
  end
16
16
 
17
17
  def declare_iot_topic(props={})
18
- r = Jets::Resource::Iot::TopicRule.new(props)
18
+ r = Jets::Cfn::Resource::Iot::TopicRule.new(props)
19
19
  with_fresh_properties do
20
20
  resource(r.definition) # add associated resource immediately
21
21
  end
@@ -4,15 +4,16 @@ module Jets::Job::Dsl
4
4
  stream_arn = full_kinesis_stream_arn(stream_name)
5
5
  default_iam_policy = default_kinesis_stream_policy(stream_arn)
6
6
 
7
- # Create iam policy allows access to queue
8
- # Allow disabling in case use wants to add permission application-wide and not have extra IAM policy
9
- iam_policy_props = options.delete(:iam_policy) || @iam_policy || default_iam_policy
10
- iam_policy(iam_policy_props) unless iam_policy_props == :disable
7
+ # Create iam policy allows access to kinesis
8
+ iam_policy_option = [options.delete(:iam_policy)].compact.flatten
9
+ user_iam_policy = [@iam_policy].compact.flatten
10
+ iam_policy_props = iam_policy_option + user_iam_policy + [default_iam_policy]
11
+ iam_policy(iam_policy_props)
11
12
 
12
13
  props = options # by this time options only has EventSourceMapping properties
13
14
  default = {
14
- event_source_arn: stream_arn,
15
- starting_position: "LATEST",
15
+ EventSourceArn: stream_arn,
16
+ StartingPosition: "LATEST",
16
17
  }
17
18
  props = default.merge(props)
18
19
 
@@ -34,12 +35,12 @@ module Jets::Job::Dsl
34
35
 
35
36
  def default_kinesis_stream_policy(stream_name_arn='*')
36
37
  {
37
- action: ["kinesis:GetRecords",
38
+ Action: ["kinesis:GetRecords",
38
39
  "kinesis:GetShardIterator",
39
40
  "kinesis:DescribeStream",
40
41
  "kinesis:ListStreams"],
41
- effect: "Allow",
42
- resource: stream_name_arn,
42
+ Effect: "Allow",
43
+ Resource: stream_name_arn,
43
44
  }
44
45
  end
45
46
  end
@@ -1,12 +1,12 @@
1
1
  module Jets::Job::Dsl
2
2
  module LogEvent
3
3
  def log_event(log_group_name, props={})
4
- props.merge!(log_group_name: log_group_name)
4
+ props.merge!(LogGroupName: log_group_name)
5
5
  declare_log_subscription_filter(props)
6
6
  end
7
7
 
8
8
  def declare_log_subscription_filter(props={})
9
- r = Jets::Resource::Logs::SubscriptionFilter.new(props)
9
+ r = Jets::Cfn::Resource::Logs::SubscriptionFilter.new(props)
10
10
  with_fresh_properties do
11
11
  resource(r.definition) # add associated resource immediately
12
12
  end
@@ -27,16 +27,19 @@ module Jets::Job::Dsl
27
27
  end
28
28
 
29
29
  def schedule_job(expression, props={})
30
- props = props.merge(schedule_expression: expression)
30
+ props = props.merge(ScheduleExpression: expression)
31
31
  rule_event(props)
32
32
  end
33
33
 
34
34
  def rule_event(props={})
35
+ # detail should all be lowercase: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-events-rule.html
36
+ # source should also all be lowercase
35
37
  if props.key?(:detail)
38
+ # :description should be lowercased. It's a convenience property, and belongs at a higher level
36
39
  description = props.key?(:description) ? props.delete(:description) : rule_description
37
- rule_props = { event_pattern: props, description: description }
40
+ rule_props = { EventPattern: props, Description: description }
38
41
  else # if props.key?(:event_pattern)
39
- props[:description] ||= rule_description
42
+ props[:Description] ||= rule_description
40
43
  rule_props = props
41
44
  end
42
45
 
@@ -52,7 +55,7 @@ module Jets::Job::Dsl
52
55
  end
53
56
 
54
57
  def events_rule_definition
55
- resource = Jets::Resource::Events::Rule.new(associated_properties)
58
+ resource = Jets::Cfn::Resource::Events::Rule.new(associated_properties)
56
59
  resource.definition # returns a definition to be added by associated_resources
57
60
  end
58
61
 
@@ -2,7 +2,7 @@ module Jets::Job::Dsl
2
2
  module S3Event
3
3
  def s3_event(bucket_name, props={})
4
4
  stack_name = declare_s3_bucket_resources(bucket_name) # only set up once per bucket
5
- declare_sns_subscription(topic_arn: "!Ref #{stack_name}SnsTopic") # set up subscription every time
5
+ declare_sns_subscription(TopicArn: "!Ref #{stack_name}SnsTopic") # set up subscription every time
6
6
  end
7
7
 
8
8
  # Returns stack_name
@@ -11,7 +11,7 @@ module Jets::Job::Dsl
11
11
  # We will not generate them again. However, we still need to always
12
12
  # add the depends_on declaration to ensure that the shared stack parameters
13
13
  # are properly passed to the nested child stack.
14
- stack_name = s3_events[bucket_name] # already registered
14
+ stack_name = _s3_events[bucket_name] # already registered
15
15
  if stack_name
16
16
  depends_on stack_name.underscore.to_sym, class_prefix: true # always add this
17
17
  return stack_name
@@ -20,7 +20,7 @@ module Jets::Job::Dsl
20
20
  # Create shared resources - one time
21
21
  stack_name = declare_shared_s3_event_resources(bucket_name)
22
22
  depends_on stack_name.underscore.to_sym, class_prefix: true # always add this
23
- self.s3_events[bucket_name] = stack_name # tracks buckets already set up
23
+ self._s3_events[bucket_name] = stack_name # tracks buckets already set up
24
24
  end
25
25
 
26
26
  def declare_shared_s3_event_resources(bucket_name)
@@ -29,8 +29,8 @@ module Jets::Job::Dsl
29
29
  s3_stack.stack_name
30
30
  end
31
31
 
32
- def s3_events
33
- Jets::Job::Base.s3_events
32
+ def _s3_events
33
+ Jets::Job::Base._s3_events
34
34
  end
35
35
  end
36
36
  end
@@ -4,22 +4,22 @@ module Jets::Job::Dsl
4
4
  if topic_name.to_s =~ /generate/
5
5
  declare_sns_topic(props.delete(:topic_properties))
6
6
  topic_arn = "!Ref {namespace}SnsTopic"
7
- props.merge!(topic_arn: topic_arn)
7
+ props.merge!(TopicArn: topic_arn)
8
8
  declare_sns_subscription(props)
9
9
  elsif topic_name.include?('!Ref') # reference shared resource
10
10
  topic_arn = topic_name # contains !Ref
11
- props.merge!(topic_arn: topic_arn)
11
+ props.merge!(TopicArn: topic_arn)
12
12
  declare_sns_subscription(props)
13
13
  else # existing topic: short name or full arn
14
14
  topic_arn = full_sns_topic_arn(topic_name)
15
- props.merge!(topic_arn: topic_arn)
15
+ props.merge!(TopicArn: topic_arn)
16
16
  declare_sns_subscription(props)
17
17
  end
18
18
  end
19
19
 
20
20
  def declare_sns_topic(props={})
21
21
  props ||= {} # props.delete(:topic_properties) can be nil
22
- r = Jets::Resource::Sns::Topic.new(props)
22
+ r = Jets::Cfn::Resource::Sns::Topic.new(props)
23
23
  with_fresh_properties do
24
24
  resource(r.definition) # add associated resource immediately
25
25
  end
@@ -27,14 +27,14 @@ module Jets::Job::Dsl
27
27
 
28
28
  def declare_sns_topic_policy(props={})
29
29
  props ||= {} # options.delete(:topic_policy_properties) can be nil
30
- r = Jets::Resource::Sns::TopicPolicy.new(props)
30
+ r = Jets::Cfn::Resource::Sns::TopicPolicy.new(props)
31
31
  with_fresh_properties do
32
32
  resource(r.definition) # add associated resource immediately
33
33
  end
34
34
  end
35
35
 
36
36
  def declare_sns_subscription(props={})
37
- r = Jets::Resource::Sns::Subscription.new(props)
37
+ r = Jets::Cfn::Resource::Sns::Subscription.new(props)
38
38
  with_fresh_properties do
39
39
  resource(r.definition) # add associated resource immediately
40
40
  end
@@ -20,14 +20,14 @@
20
20
  # class_timeout 30 # must be less than or equal to the SQS queue default timeout
21
21
  #
22
22
  # event_source_mapping(
23
- # event_source_arn: "arn:aws:sqs:us-west-2:112233445566:hello-queue",
23
+ # EventSourceArn: "arn:aws:sqs:us-west-2:112233445566:hello-queue",
24
24
  # )
25
25
  # iam_policy(
26
- # action: ["sqs:ReceiveMessage",
27
- # "sqs:DeleteMessage",
28
- # "sqs:GetQueueAttributes"],
29
- # effect: "Allow",
30
- # resource: "arn:aws:sqs:us-west-2:112233445566:hello-queue",
26
+ # Action: ["sqs:ReceiveMessage",
27
+ # "sqs:DeleteMessage",
28
+ # "sqs:GetQueueAttributes"],
29
+ # Effect: "Allow",
30
+ # Resource: "arn:aws:sqs:us-west-2:112233445566:hello-queue",
31
31
  # )
32
32
  # def dig
33
33
  # puts "dig event #{JSON.dump(event)}"
@@ -51,13 +51,14 @@ module Jets::Job::Dsl
51
51
  end
52
52
 
53
53
  # Create iam policy allows access to queue
54
- # Allow disabling in case use wants to add permission application-wide and not have extra IAM policy
55
- iam_policy_props = options.delete(:iam_policy) || @iam_policy || default_iam_policy
56
- iam_policy(iam_policy_props) unless iam_policy_props == :disable
54
+ iam_policy_option = [options.delete(:iam_policy)].compact.flatten
55
+ user_iam_policy = [@iam_policy].compact.flatten
56
+ iam_policy_props = iam_policy_option + user_iam_policy + [default_iam_policy]
57
+ iam_policy(iam_policy_props)
57
58
 
58
59
  props = options # by this time options only has EventSourceMapping properties
59
60
  default = {
60
- event_source_arn: queue_arn
61
+ EventSourceArn: queue_arn
61
62
  }
62
63
  props = default.merge(props)
63
64
 
@@ -66,7 +67,7 @@ module Jets::Job::Dsl
66
67
 
67
68
  def declare_sqs_queue(props)
68
69
  props ||= {} # since options.delete(:queue_properties) can be nil
69
- r = Jets::Resource::Sqs::Queue.new(props)
70
+ r = Jets::Cfn::Resource::Sqs::Queue.new(props)
70
71
  with_fresh_properties do
71
72
  resource(r.definition) # add associated resource immediately
72
73
  end
@@ -85,11 +86,11 @@ module Jets::Job::Dsl
85
86
 
86
87
  def default_sqs_iam_policy(queue_name_arn='*')
87
88
  {
88
- action: ["sqs:ReceiveMessage",
89
+ Action: ["sqs:ReceiveMessage",
89
90
  "sqs:DeleteMessage",
90
91
  "sqs:GetQueueAttributes"],
91
- effect: "Allow",
92
- resource: queue_name_arn,
92
+ Effect: "Allow",
93
+ Resource: queue_name_arn,
93
94
  }
94
95
  end
95
96
  end
@@ -1,7 +1,7 @@
1
1
  require 'base64'
2
2
 
3
3
  module Jets::Job::Helpers
4
- module KinesisEventHelper
4
+ module KinesisEvent
5
5
  def kinesis_data
6
6
  records = event["Records"]
7
7
  records.map do |record|
@@ -9,5 +9,9 @@ module Jets::Job::Helpers
9
9
  Base64.decode64(encoded) # data
10
10
  end
11
11
  end
12
+
13
+ def kinesis_data?
14
+ event["Records"]&.any? { |r| r.dig("kinesis", "data") }
15
+ end
12
16
  end
13
17
  end
@@ -4,7 +4,7 @@ require 'stringio'
4
4
  require 'zlib'
5
5
 
6
6
  module Jets::Job::Helpers
7
- module LogEventHelper
7
+ module LogEvent
8
8
  def log_event
9
9
  encoded = event["awslogs"]["data"]
10
10
  compressed_string = Base64.decode64(encoded)
@@ -13,5 +13,9 @@ module Jets::Job::Helpers
13
13
  data = JSON.load(uncompressed_string)
14
14
  ActiveSupport::HashWithIndifferentAccess.new(data)
15
15
  end
16
+
17
+ def log_event?
18
+ !!event.dig("awslogs", "data")
19
+ end
16
20
  end
17
21
  end
@@ -0,0 +1,50 @@
1
+ module Jets::Job::Helpers
2
+ module S3Event
3
+ def s3_events
4
+ encoded_messages = event["Records"].map do |record|
5
+ record["Sns"]["Message"] # SNS message is JSON
6
+ end
7
+ # Decode the JSON messages
8
+ messages = encoded_messages.map do |message|
9
+ JSON.load(message)
10
+ end
11
+ # Extract the S3 event records
12
+ messages.map do |message|
13
+ message["Records"].map do |record|
14
+ ActiveSupport::HashWithIndifferentAccess.new(record)
15
+ end
16
+ end.flatten
17
+ end
18
+ alias s3_event_payloads s3_events
19
+
20
+ def s3_events?
21
+ event["Records"]&.any? { |r| r.dig("Sns", "Message") }
22
+ end
23
+ alias s3_event_payloads? s3_events?
24
+
25
+ def s3_objects
26
+ s3_events.map do |record|
27
+ record["s3"]["object"]
28
+ end
29
+ end
30
+
31
+ def s3_objects?
32
+ s3_events.any? { |r| r.dig("s3", "object") }
33
+ end
34
+
35
+ # Deprecated methods below
36
+ def s3_event
37
+ puts "WARN: s3_event is deprecated".color(:yellow)
38
+ puts "It can possibly drop events when they come in extremely fast."
39
+ puts "Use s3_events instead"
40
+ s3_events.first
41
+ end
42
+
43
+ def s3_object
44
+ puts "WARN: s3_object is deprecated".color(:yellow)
45
+ puts "It can possibly drop events when they come in extremely fast."
46
+ puts "Use s3_objects instead"
47
+ s3_objects.first
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,26 @@
1
+ module Jets::Job::Helpers
2
+ module SnsEvent
3
+ def sns_events
4
+ records = event["Records"]
5
+ return [] unless records
6
+ records.map do |record|
7
+ message = record["Sns"]["Message"]
8
+ ActiveSupport::HashWithIndifferentAccess.new(JSON.load(message))
9
+ end
10
+ end
11
+ alias sns_event_payloads sns_events
12
+
13
+ def sns_events?
14
+ event["Records"]&.any? { |r| r.dig("Sns", "Message") }
15
+ end
16
+ alias sns_event_payloads? sns_events?
17
+
18
+ # Deprecated methods below
19
+ def sns_event_payload
20
+ puts "WARN: sns_event_payload is deprecated".color(:yellow)
21
+ puts "It can possibly drop events when they come in extremely fast."
22
+ puts "Use sns_events instead"
23
+ sns_events.first
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,26 @@
1
+ module Jets::Job::Helpers
2
+ module SqsEvent
3
+ def sqs_events
4
+ records = event["Records"]
5
+ return [] unless records
6
+ records.map do |record|
7
+ message = record["body"]
8
+ ActiveSupport::HashWithIndifferentAccess.new(JSON.load(message))
9
+ end
10
+ end
11
+ alias sqs_event_payloads sqs_events
12
+
13
+ def sqs_events?
14
+ event["Records"]&.any? { |r| r.dig("body") }
15
+ end
16
+ alias sqs_event_payloads? sqs_events?
17
+
18
+ # Deprecated methods below
19
+ def sqs_event_payload
20
+ puts "WARN: sqs_event_payload is deprecated".color(:yellow)
21
+ puts "It can possibly drop events when they come in extremely fast."
22
+ puts "Use sqs_events instead"
23
+ sqs_events.first
24
+ end
25
+ end
26
+ end
data/lib/jets/klass.rb CHANGED
@@ -17,10 +17,10 @@
17
17
  # Jets::Klass.from_path("app/functions/hello_function.rb")
18
18
  # Jets::Klass.from_path("app/shared/functions/whatever.rb")
19
19
  #
20
- # Jets::Klass.from_task(task)
20
+ # Jets::Klass.from_definition(definition)
21
21
  #
22
- # The from_task method takes a Jets::Lambda::Task as an argument and is useful
23
- # for the CloudFormation child stack generation there the registered task info
22
+ # The from_definition method takes a Jets::Lambda::Definition as an argument and is useful
23
+ # for the CloudFormation child stack generation there the registered definition info
24
24
  # is available but the path info is now.
25
25
  class Jets::Klass
26
26
  class << self
@@ -46,8 +46,8 @@ class Jets::Klass
46
46
  end
47
47
 
48
48
  APP_TYPES = %w[controller job rule authorizer]
49
- def from_task(task)
50
- class_name = task.class_name
49
+ def from_definition(definition)
50
+ class_name = definition.class_name
51
51
  filename = class_name.underscore
52
52
 
53
53
  # Examples of filename: posts_controller, hard_job, security_rule, main_authorizer
@@ -89,7 +89,6 @@ class Jets::Klass
89
89
  def modularize(class_name)
90
90
  leaves = []
91
91
  mods = class_name.split('::')[0..-2] # drop the last word
92
- # puts "mods: #{mods}"
93
92
  return Object if mods.empty?
94
93
 
95
94
  leaves = []
@@ -0,0 +1,118 @@
1
+ module Jets::Lambda
2
+ class Definition
3
+ include Jets::Util::Camelize
4
+
5
+ attr_accessor :class_name, :type
6
+ attr_reader :meth, :properties, :iam_policy, :managed_iam_policy, :lang, :associated_resources
7
+ def initialize(class_name, meth, options={})
8
+ @class_name = class_name.to_s
9
+ @meth = meth
10
+ @options = options
11
+ @type = options[:type] || get_type # controller, job, or function
12
+ @properties = camelize(options[:properties]) || {}
13
+ @iam_policy = options[:iam_policy]
14
+ @managed_iam_policy = options[:managed_iam_policy]
15
+ @lang = options[:lang] || :ruby
16
+ @associated_resources = options[:associated_resources] || {}
17
+ @replacements = options[:replacements] || {} # added to baseline replacements
18
+ end
19
+
20
+ def name
21
+ @meth
22
+ end
23
+
24
+ def public_meth?
25
+ # For anonymous classes (app/functions/hello.rb) the class name will be blank.
26
+ # These types of classes are treated specially and has only one handler method
27
+ # that is registered. So we know it is public.
28
+ return true if @class_name.nil? || @class_name == ''
29
+
30
+ # Consider all polymorphic methods public for now
31
+ return true if @lang != :ruby
32
+
33
+ klass = @class_name.constantize
34
+ public_methods = klass.public_instance_methods
35
+ public_methods.include?(meth.to_sym)
36
+ end
37
+
38
+ def build_function_iam?
39
+ !!(@iam_policy || @managed_iam_policy)
40
+ end
41
+
42
+ @@lang_exts = {
43
+ ruby: '.rb',
44
+ python: '.py',
45
+ node: '.js',
46
+ }
47
+ def lang_ext
48
+ @@lang_exts[@lang]
49
+ end
50
+
51
+ # The get_type method works for controller and job classes.
52
+ #
53
+ # Usually able to get the type from the class name. Examples:
54
+ #
55
+ # PostsController => controller
56
+ # HardJob => job
57
+ #
58
+ # However, for function types, we are not able to get the type for multiple of
59
+ # reasons. First, function types are allowed to be named with or without
60
+ # _function. Examples:
61
+ #
62
+ # path => class => type
63
+ # app/functions/hello.rb => Hello => function
64
+ # app/functions/hello_function.rb => HelloFunction => function
65
+ #
66
+ # The second reason is that functions are not regular ruby classes. Instead they
67
+ # are anonymous classes created with Class.new. When classes are created with
68
+ # Class.new the method_added hook has "" (blank string) as the self class name.
69
+ # We add the class_type to the task later on as we are constructing the class
70
+ # as part of the Class.new logic.
71
+ #
72
+ # For controller and job standard ruby classes though it can easily be
73
+ # determinated as part of initialization. So we get the type for convenience then.
74
+ #
75
+ # For anonymous function classes, we just set to nil and will later fix in
76
+ # FunctionConstructor.
77
+ #
78
+ # Returns: "controller", "job" or nil
79
+ def get_type
80
+ unless @class_name.empty? # when anonymous class is created with Class.new
81
+ @class_name.underscore.split('_').last # controller, job or rule
82
+ end
83
+ end
84
+
85
+ def full_handler(handler_function)
86
+ "#{handler_base}.#{handler_function}"
87
+ end
88
+
89
+ def handler_path
90
+ "#{handler_base}#{lang_ext}"
91
+ end
92
+
93
+ def handler_base
94
+ base = "handlers/#{@type.pluralize}/#{@class_name.underscore}"
95
+ base += "/#{@lang}" if @lang != :ruby
96
+ base += "/#{@meth}"
97
+ end
98
+
99
+ def poly_src_path
100
+ handler_path.sub("handlers/", "app/")
101
+ end
102
+
103
+ def replacements
104
+ # Merge in the custom replacements specific to each app class: ConfigRule, Job, etc.
105
+ base_replacements.merge(@replacements)
106
+ end
107
+
108
+ def base_replacements
109
+ { namespace: namespace }
110
+ end
111
+
112
+ def namespace
113
+ ns = @class_name.gsub('::','').camelize
114
+ ns += @meth.to_s.camelize if @meth
115
+ ns
116
+ end
117
+ end
118
+ end