jets 4.0.17 → 5.0.0.beta1

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 (616) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +5 -1
  3. data/CHANGELOG.md +52 -23
  4. data/Gemfile +1 -5
  5. data/LICENSE.txt +1 -1
  6. data/Rakefile +3 -3
  7. data/engines/internal/app/controllers/jets/application_controller.rb +28 -0
  8. data/engines/internal/app/controllers/jets/bare_controller.rb +6 -0
  9. data/engines/internal/app/controllers/jets/health_controller.rb +55 -0
  10. data/engines/internal/app/controllers/jets/info_controller.rb +45 -0
  11. data/{lib/jets → engines}/internal/app/controllers/jets/mailers_controller.rb +12 -14
  12. data/{lib/jets → engines}/internal/app/controllers/jets/mount_controller.rb +6 -10
  13. data/{lib/jets → engines}/internal/app/controllers/jets/public_controller.rb +6 -2
  14. data/engines/internal/app/controllers/jets/welcome_controller.rb +9 -0
  15. data/{lib/jets → engines}/internal/app/functions/jets/base_path.rb +2 -1
  16. data/{lib/jets → engines}/internal/app/functions/jets/base_path_mapping.rb +26 -6
  17. data/engines/internal/app/jobs/jets/preheat_job.rb +67 -0
  18. data/engines/internal/app/views/jets/info/properties.html.erb +1 -0
  19. data/engines/internal/app/views/jets/info/routes.html.erb +10 -0
  20. data/{lib/jets → engines}/internal/app/views/jets/mailers/email.html.erb +37 -17
  21. data/engines/internal/app/views/jets/mailers/index.html.erb +8 -0
  22. data/engines/internal/app/views/jets/mailers/mailer.html.erb +6 -0
  23. data/{lib/jets/commands/templates/skeleton/public/index.html.tt → engines/internal/app/views/jets/welcome/index.html.erb} +8 -4
  24. data/engines/internal/app/views/layouts/application.html.erb +51 -0
  25. data/engines/internal/lib/internal/actiondispatch.rb +39 -0
  26. data/engines/internal/lib/internal/actionmailer.rb +51 -0
  27. data/engines/internal/lib/internal/actionview.rb +152 -0
  28. data/engines/internal/lib/internal/activerecord.rb +37 -0
  29. data/engines/internal/lib/internal/activesupport.rb +47 -0
  30. data/engines/internal/lib/internal/engine.rb +13 -0
  31. data/engines/internal/lib/internal/i18n_engine.rb +19 -0
  32. data/engines/internal/lib/internal/jets_controller.rb +46 -0
  33. data/engines/internal/lib/internal/overrides/debug_exceptions.rb +40 -0
  34. data/engines/internal/lib/internal/templates/rescues/_trace.html.erb +62 -0
  35. data/engines/internal/lib/internal/templates/rescues/_trace.text.erb +9 -0
  36. data/engines/internal/lib/internal/turbines/asset_tag_helper.rb +70 -0
  37. data/engines/internal/lib/internal/turbines/helpers.rb +18 -0
  38. data/engines/internal/lib/internal/turbines/routes_helpers.rb +42 -0
  39. data/exe/jets +1 -10
  40. data/jets.gemspec +29 -27
  41. data/lib/jets/app_loader.rb +77 -0
  42. data/lib/jets/application/bootstrap.rb +100 -0
  43. data/lib/jets/application/configuration/defaults.rb +256 -0
  44. data/lib/jets/application/configuration.rb +494 -0
  45. data/lib/jets/application/default_middleware_stack.rb +140 -0
  46. data/lib/jets/application/dummy_erb_compiler.rb +18 -0
  47. data/lib/jets/application/finisher.rb +266 -0
  48. data/lib/jets/application/routes_reloader.rb +80 -0
  49. data/lib/jets/application.rb +515 -198
  50. data/lib/jets/authorizer/base.rb +1 -0
  51. data/lib/jets/authorizer/dsl.rb +15 -11
  52. data/lib/jets/authorizer/helpers/iam_helper.rb +13 -11
  53. data/lib/jets/autoloaders/gem.rb +70 -0
  54. data/lib/jets/autoloaders/inflector.rb +21 -0
  55. data/lib/jets/autoloaders.rb +38 -101
  56. data/lib/jets/aws_services/stack_status.rb +1 -1
  57. data/lib/jets/backtrace_cleaner.rb +27 -0
  58. data/lib/jets/booter.rb +29 -176
  59. data/lib/jets/builders/code_builder.rb +45 -117
  60. data/lib/jets/builders/code_size.rb +1 -0
  61. data/lib/jets/builders/gem_replacer.rb +5 -6
  62. data/lib/jets/builders/handler_generator.rb +34 -14
  63. data/lib/jets/builders/lambda_layer.rb +2 -7
  64. data/lib/jets/builders/purger.rb +1 -1
  65. data/lib/jets/builders/rack_packager.rb +1 -1
  66. data/lib/jets/builders/ruby_packager.rb +32 -21
  67. data/lib/jets/builders/shim_vars/app.rb +10 -6
  68. data/lib/jets/builders/templates/handlers/one_lambda_for_all_controllers.rb +33 -0
  69. data/lib/jets/builders/templates/handlers/one_lambda_per_controller.rb +20 -0
  70. data/lib/jets/builders/templates/{handler.rb → handlers/one_lambda_per_method.rb} +6 -0
  71. data/lib/jets/bundle.rb +2 -9
  72. data/lib/jets/cfn/base.rb +82 -0
  73. data/lib/jets/cfn/builder/api/base.rb +12 -0
  74. data/lib/jets/cfn/{builders/api_deployment_builder.rb → builder/api/deployment.rb} +10 -20
  75. data/lib/jets/cfn/{builders/api_gateway_builder.rb → builder/api/gateway.rb} +14 -37
  76. data/lib/jets/cfn/builder/api/mapping.rb +54 -0
  77. data/lib/jets/cfn/builder/api/methods.rb +72 -0
  78. data/lib/jets/cfn/builder/api/paged.rb +30 -0
  79. data/lib/jets/cfn/builder/api/pages/base.rb +105 -0
  80. data/lib/jets/cfn/builder/api/pages/methods.rb +17 -0
  81. data/lib/jets/cfn/builder/api/pages/page.rb +19 -0
  82. data/lib/jets/cfn/builder/api/pages/resources.rb +21 -0
  83. data/lib/jets/cfn/builder/api/resources.rb +40 -0
  84. data/lib/jets/cfn/{builders/authorizer_builder.rb → builder/authorizer.rb} +16 -19
  85. data/lib/jets/cfn/builder/controller.rb +28 -0
  86. data/lib/jets/cfn/builder/function.rb +9 -0
  87. data/lib/jets/cfn/{builders → builder}/interface.rb +45 -51
  88. data/lib/jets/cfn/builder/job.rb +10 -0
  89. data/lib/jets/cfn/builder/nested.rb +130 -0
  90. data/lib/jets/cfn/builder/one_controller.rb +53 -0
  91. data/lib/jets/cfn/{builders/parent_builder → builder/parent}/stagger.rb +1 -1
  92. data/lib/jets/cfn/{builders/parent_builder.rb → builder/parent.rb} +54 -54
  93. data/lib/jets/cfn/builder/post_process.rb +25 -0
  94. data/lib/jets/cfn/{builders/rule_builder.rb → builder/rule.rb} +4 -8
  95. data/lib/jets/cfn/{builders/shared_builder.rb → builder/shared.rb} +4 -3
  96. data/lib/jets/cfn/{builders → builder}/util/source.rb +1 -1
  97. data/lib/jets/{commands/build.rb → cfn/builder.rb} +50 -78
  98. data/lib/jets/cfn/deployment.rb +45 -0
  99. data/lib/jets/cfn/download.rb +39 -0
  100. data/lib/jets/cfn/params/api/base.rb +39 -0
  101. data/lib/jets/cfn/params/api/cors.rb +10 -0
  102. data/lib/jets/cfn/params/api/methods.rb +69 -0
  103. data/lib/jets/cfn/params/api/resources.rb +28 -0
  104. data/lib/jets/{resource/child_stack/common_parameters.rb → cfn/params/common.rb} +3 -3
  105. data/lib/jets/{resource → cfn/resource}/api_gateway/authorizer.rb +21 -21
  106. data/lib/jets/cfn/resource/api_gateway/base_path/function.rb +57 -0
  107. data/lib/jets/{resource → cfn/resource}/api_gateway/base_path/mapping.rb +13 -12
  108. data/lib/jets/cfn/resource/api_gateway/base_path/role.rb +70 -0
  109. data/lib/jets/{resource → cfn/resource}/api_gateway/deployment.rb +13 -20
  110. data/lib/jets/{resource → cfn/resource}/api_gateway/domain_name.rb +11 -11
  111. data/lib/jets/{resource → cfn/resource}/api_gateway/method/authorization.rb +1 -1
  112. data/lib/jets/cfn/resource/api_gateway/method.rb +92 -0
  113. data/lib/jets/{resource → cfn/resource}/api_gateway/resource.rb +14 -10
  114. data/lib/jets/cfn/resource/api_gateway/resource_id.rb +25 -0
  115. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/change_detection.rb +1 -1
  116. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/logical_id/message.rb +1 -1
  117. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/logical_id.rb +1 -1
  118. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/base.rb +4 -3
  119. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/media_types.rb +2 -2
  120. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/page.rb +5 -5
  121. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/to.rb +8 -3
  122. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/variable.rb +2 -2
  123. data/lib/jets/cfn/resource/api_gateway/rest_api/routes/change.rb +21 -0
  124. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/collision/variable_exception.rb +1 -1
  125. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/collision.rb +1 -1
  126. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes.rb +1 -1
  127. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api.rb +12 -12
  128. data/lib/jets/{resource → cfn/resource}/associated.rb +1 -1
  129. data/lib/jets/{resource → cfn/resource}/config/config_rule.rb +18 -18
  130. data/lib/jets/{resource → cfn/resource}/config/managed_rule.rb +5 -5
  131. data/lib/jets/{resource → cfn/resource}/events/rule.rb +10 -10
  132. data/lib/jets/{resource → cfn/resource}/iam/application_role.rb +4 -4
  133. data/lib/jets/{resource → cfn/resource}/iam/base_role_definition.rb +15 -15
  134. data/lib/jets/{resource → cfn/resource}/iam/class_role.rb +5 -5
  135. data/lib/jets/{resource → cfn/resource}/iam/function_role.rb +6 -6
  136. data/lib/jets/{resource → cfn/resource}/iam/managed_policy.rb +1 -1
  137. data/lib/jets/{resource → cfn/resource}/iam/policy.rb +8 -8
  138. data/lib/jets/{resource → cfn/resource}/iam/policy_document.rb +10 -9
  139. data/lib/jets/{resource → cfn/resource}/iot/topic_rule.rb +10 -10
  140. data/lib/jets/{resource → cfn/resource}/lambda/event_source_mapping.rb +9 -9
  141. data/lib/jets/cfn/resource/lambda/function/controller.rb +21 -0
  142. data/lib/jets/{resource → cfn/resource}/lambda/function/environment.rb +4 -5
  143. data/lib/jets/cfn/resource/lambda/function.rb +266 -0
  144. data/lib/jets/{resource → cfn/resource}/lambda/gem_layer.rb +2 -2
  145. data/lib/jets/{resource → cfn/resource}/lambda/layer_version.rb +10 -10
  146. data/lib/jets/cfn/resource/lambda/permission.rb +51 -0
  147. data/lib/jets/cfn/resource/logs/subscription_filter.rb +31 -0
  148. data/lib/jets/cfn/resource/nested/api/base.rb +4 -0
  149. data/lib/jets/cfn/resource/nested/api/deployment.rb +53 -0
  150. data/lib/jets/cfn/resource/nested/api/gateway.rb +15 -0
  151. data/lib/jets/cfn/resource/nested/api/mapping.rb +33 -0
  152. data/lib/jets/cfn/resource/nested/api/methods.rb +30 -0
  153. data/lib/jets/cfn/resource/nested/api/page.rb +8 -0
  154. data/lib/jets/cfn/resource/nested/api/resources.rb +22 -0
  155. data/lib/jets/{resource/child_stack → cfn/resource/nested}/app_class.rb +15 -48
  156. data/lib/jets/{resource/child_stack → cfn/resource/nested}/authorizer.rb +8 -14
  157. data/lib/jets/cfn/resource/nested/base.rb +38 -0
  158. data/lib/jets/cfn/resource/nested/one_controller.rb +48 -0
  159. data/lib/jets/{resource/child_stack → cfn/resource/nested}/shared.rb +10 -16
  160. data/lib/jets/cfn/resource/one/function.rb +66 -0
  161. data/lib/jets/cfn/resource/one/permission.rb +17 -0
  162. data/lib/jets/{resource → cfn/resource}/replacer.rb +26 -27
  163. data/lib/jets/{resource → cfn/resource}/route53/record_set.rb +18 -18
  164. data/lib/jets/{resource → cfn/resource}/s3/bucket.rb +4 -4
  165. data/lib/jets/cfn/resource/s3/jets_bucket.rb +68 -0
  166. data/lib/jets/{resource → cfn/resource}/sns/subscription.rb +8 -8
  167. data/lib/jets/{resource → cfn/resource}/sns/topic.rb +10 -10
  168. data/lib/jets/{resource → cfn/resource}/sns/topic_policy.rb +13 -13
  169. data/lib/jets/{resource → cfn/resource}/sqs/queue.rb +5 -5
  170. data/lib/jets/{resource → cfn/resource}/standardizer.rb +8 -9
  171. data/lib/jets/cfn/resource.rb +8 -0
  172. data/lib/jets/cfn/ship.rb +20 -19
  173. data/lib/jets/cfn/template.rb +89 -0
  174. data/lib/jets/cfn/upload.rb +40 -37
  175. data/lib/jets/cli.rb +28 -210
  176. data/lib/jets/command/actions.rb +49 -0
  177. data/lib/jets/command/api_helpers.rb +41 -0
  178. data/lib/jets/command/aws_helpers.rb +26 -0
  179. data/lib/jets/command/base.rb +204 -0
  180. data/lib/jets/command/behavior.rb +83 -0
  181. data/lib/jets/command/environment_argument.rb +42 -0
  182. data/lib/jets/command/help/call.md +48 -0
  183. data/lib/jets/{commands → command}/help/deploy.md +1 -1
  184. data/lib/jets/command/help/logs.md +21 -0
  185. data/lib/jets/{commands → command}/help/new.md +3 -4
  186. data/lib/jets/command/help/projects.md +6 -0
  187. data/lib/jets/command/help/releases.md +37 -0
  188. data/lib/jets/command/help/rollback.md +5 -0
  189. data/lib/jets/command/help/routes.md +15 -0
  190. data/lib/jets/command/help/stacks.md +6 -0
  191. data/lib/jets/command/help.rb +17 -0
  192. data/lib/jets/command/helpers/editor.rb +35 -0
  193. data/lib/jets/command.rb +133 -0
  194. data/lib/jets/commands/application/application_command.rb +40 -0
  195. data/lib/jets/commands/build/build_command.rb +33 -0
  196. data/lib/jets/commands/call/anonymous_guesser.rb +1 -1
  197. data/lib/jets/commands/call/autoload_guesser.rb +2 -2
  198. data/lib/jets/commands/call/base_guesser.rb +4 -4
  199. data/lib/jets/commands/call/call_command.rb +27 -0
  200. data/lib/jets/commands/call/caller.rb +184 -0
  201. data/lib/jets/commands/call/guesser.rb +1 -1
  202. data/lib/jets/commands/clean/base.rb +1 -1
  203. data/lib/jets/commands/clean/build.rb +1 -1
  204. data/lib/jets/commands/clean/clean_command.rb +15 -0
  205. data/lib/jets/commands/clean/log.rb +1 -1
  206. data/lib/jets/commands/configure/configure_command.rb +9 -0
  207. data/lib/jets/commands/console/console_command.rb +38 -0
  208. data/lib/jets/commands/credentials/USAGE +103 -0
  209. data/lib/jets/commands/credentials/credentials_command/diffing.rb +51 -0
  210. data/lib/jets/commands/credentials/credentials_command.rb +139 -0
  211. data/lib/jets/commands/db/system/change/change_command.rb +24 -0
  212. data/lib/jets/commands/dbconsole/dbconsole_command.rb +184 -0
  213. data/lib/jets/commands/degenerate/degenerate_command.rb +21 -0
  214. data/lib/jets/commands/delete/delete_command.rb +155 -0
  215. data/lib/jets/commands/{deploy.rb → deploy/deploy_command.rb} +28 -47
  216. data/lib/jets/commands/dev/dev_command.rb +19 -0
  217. data/lib/jets/commands/{dotenv.rb → dotenv/dotenv_command.rb} +2 -2
  218. data/lib/jets/commands/encrypted/USAGE +46 -0
  219. data/lib/jets/commands/encrypted/encrypted_command.rb +87 -0
  220. data/lib/jets/commands/gems/gems_command.rb +14 -0
  221. data/lib/jets/commands/generate/generate_command.rb +95 -0
  222. data/lib/jets/commands/help/USAGE +20 -0
  223. data/lib/jets/commands/help/help_command.rb +15 -0
  224. data/lib/jets/commands/initializers/initializers_command.rb +19 -0
  225. data/lib/jets/commands/logs/logs_command.rb +45 -0
  226. data/lib/jets/commands/new/new_command.rb +19 -0
  227. data/lib/jets/commands/notes/notes_command.rb +30 -0
  228. data/lib/jets/commands/plugin/plugin_command.rb +45 -0
  229. data/lib/jets/commands/projects/projects_command.rb +30 -0
  230. data/lib/jets/commands/rake/rake_command.rb +59 -0
  231. data/lib/jets/commands/releases/releases_command.rb +72 -0
  232. data/lib/jets/commands/rollback/rollback_command.rb +41 -0
  233. data/lib/jets/commands/routes/routes_command.rb +19 -0
  234. data/lib/jets/commands/runner/runner_command.rb +60 -0
  235. data/lib/jets/commands/server/server_command.rb +291 -0
  236. data/lib/jets/commands/stacks/stacks_command.rb +39 -0
  237. data/lib/jets/commands/status/status_command.rb +9 -0
  238. data/lib/jets/commands/{url.rb → url/url_command.rb} +37 -14
  239. data/lib/jets/commands/version/version_command.rb +11 -0
  240. data/lib/jets/commands.rb +17 -0
  241. data/lib/jets/configuration.rb +166 -0
  242. data/lib/jets/controller/base.rb +105 -183
  243. data/lib/jets/controller/compat/abstract_controller/base.rb +126 -0
  244. data/lib/jets/controller/compat/action_controller/metal.rb +99 -0
  245. data/lib/jets/controller/compat/caching.rb +13 -0
  246. data/lib/jets/controller/compat/future.rb +13 -0
  247. data/lib/jets/controller/compat/route_set.rb +47 -0
  248. data/lib/jets/controller/decorate/apigw_stage.rb +39 -0
  249. data/lib/jets/controller/{authorization.rb → decorate/authorization.rb} +1 -1
  250. data/lib/jets/controller/decorate/logging.rb +90 -0
  251. data/lib/jets/controller/decorate/redirecting.rb +16 -0
  252. data/lib/jets/controller/decorate/url_for.rb +10 -0
  253. data/lib/jets/controller/{rack/adapter.rb → handler/apigw.rb} +36 -37
  254. data/lib/jets/controller/handler.rb +41 -0
  255. data/lib/jets/controller/middleware/main.rb +16 -8
  256. data/lib/jets/controller/middleware/{local/api_gateway.rb → mimic/apigw.rb} +40 -15
  257. data/lib/jets/controller/middleware/mimic/lambda_context.rb +44 -0
  258. data/lib/jets/controller/middleware/{local.rb → mimic.rb} +36 -51
  259. data/lib/jets/controller/rack_adapter/action.rb +35 -0
  260. data/lib/jets/controller/{rack → rack_adapter}/env.rb +39 -24
  261. data/lib/jets/controller/request/compat/params.rb +144 -0
  262. data/lib/jets/controller/request/compat/request.rb +125 -0
  263. data/lib/jets/controller/request.rb +35 -18
  264. data/lib/jets/controller/response/compat/response.rb +67 -0
  265. data/lib/jets/controller/response.rb +91 -8
  266. data/lib/jets/core.rb +136 -51
  267. data/lib/jets/core_ext/kernel.rb +2 -2
  268. data/lib/jets/core_ext/symbol.rb +5 -0
  269. data/lib/jets/core_ext.rb +4 -0
  270. data/lib/jets/dev_caching.rb +44 -0
  271. data/lib/jets/dotenv/ssm.rb +2 -2
  272. data/lib/jets/dotenv.rb +2 -1
  273. data/lib/jets/engine/configuration.rb +96 -0
  274. data/lib/jets/engine/turbines.rb +23 -0
  275. data/lib/jets/engine.rb +380 -0
  276. data/lib/jets/exception_reporting.rb +43 -0
  277. data/lib/jets/generators/job/job_generator.rb +41 -0
  278. data/lib/jets/generators/job/templates/event_types/dynamodb.rb.tt +8 -0
  279. data/lib/jets/generators/job/templates/event_types/iot.rb.tt +8 -0
  280. data/lib/jets/generators/job/templates/event_types/kinesis.rb.tt +9 -0
  281. data/lib/jets/generators/job/templates/event_types/log.rb.tt +9 -0
  282. data/lib/jets/generators/job/templates/event_types/rule.rb.tt +23 -0
  283. data/lib/jets/generators/job/templates/event_types/s3.rb.tt +11 -0
  284. data/lib/jets/{generator/templates/active_job/job/templates/job.rb.tt → generators/job/templates/event_types/scheduled.rb.tt} +3 -3
  285. data/lib/jets/generators/job/templates/event_types/sns.rb.tt +9 -0
  286. data/lib/jets/generators/job/templates/event_types/sqs.rb.tt +9 -0
  287. data/lib/jets/generators/overrides/app/USAGE +38 -0
  288. data/lib/jets/generators/overrides/app/app_generator.rb +148 -0
  289. data/lib/jets/generators/overrides/app/helpers.rb +143 -0
  290. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/.gitignore +2 -1
  291. data/lib/jets/generators/overrides/app/templates/Gemfile.tt +25 -0
  292. data/lib/jets/generators/overrides/app/templates/Rakefile +2 -0
  293. data/lib/jets/generators/overrides/app/templates/app/assets/config/manifest.js +3 -0
  294. data/lib/jets/generators/overrides/app/templates/app/assets/stylesheets/application.css +15 -0
  295. data/lib/jets/generators/overrides/app/templates/app/javascript/application.js +5 -0
  296. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/app/models/application_record.rb +1 -1
  297. data/lib/jets/generators/overrides/app/templates/app/views/layouts/application.html.erb.tt +30 -0
  298. data/lib/jets/generators/overrides/app/templates/bin/jets +3 -0
  299. data/lib/jets/generators/overrides/app/templates/config/application.rb.tt +15 -0
  300. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/config/database.yml.tt +1 -1
  301. data/lib/jets/generators/overrides/app/templates/config/environments/development.rb.tt +29 -0
  302. data/lib/jets/generators/overrides/app/templates/config/environments/production.rb.tt +19 -0
  303. data/lib/jets/generators/overrides/app/templates/config/environments/test.rb.tt +23 -0
  304. data/lib/jets/generators/overrides/app/templates/config/initializers/content_security_policy.rb +31 -0
  305. data/lib/jets/generators/overrides/app/templates/config/initializers/filter_parameter_logging.rb +8 -0
  306. data/lib/jets/generators/overrides/app/templates/config/initializers/permissions_policy.rb +11 -0
  307. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/config/routes.rb +5 -1
  308. data/lib/jets/generators/overrides/app/templates/db/.gitkeep +0 -0
  309. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/public/404.html +6 -6
  310. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/public/422.html +6 -6
  311. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/public/500.html +6 -6
  312. data/lib/jets/generators/overrides/templates/erb/scaffold/index.html.erb +22 -0
  313. data/lib/jets/generators/overrides/templates/erb/scaffold/partial.html.erb +8 -0
  314. data/lib/jets/{generator/templates/rails/scaffold_controller/api_controller.rb → generators/overrides/templates/rails/scaffold_controller/api_controller.rb.tt} +5 -9
  315. data/lib/jets/generators/overrides/templates/rails/scaffold_controller/controller.rb.tt +67 -0
  316. data/lib/jets/generators.rb +112 -0
  317. data/lib/jets/info.rb +116 -0
  318. data/lib/jets/initializable.rb +95 -0
  319. data/lib/jets/job/base.rb +3 -2
  320. data/lib/jets/job/dsl/dynamodb_event.rb +19 -9
  321. data/lib/jets/job/dsl/event_source_mapping.rb +1 -1
  322. data/lib/jets/job/dsl/iot_event.rb +6 -6
  323. data/lib/jets/job/dsl/kinesis_event.rb +5 -5
  324. data/lib/jets/job/dsl/log_event.rb +2 -2
  325. data/lib/jets/job/dsl/rule_event.rb +7 -4
  326. data/lib/jets/job/dsl/s3_event.rb +1 -1
  327. data/lib/jets/job/dsl/sns_event.rb +6 -6
  328. data/lib/jets/job/dsl/sqs_event.rb +11 -11
  329. data/lib/jets/klass.rb +5 -6
  330. data/lib/jets/lambda/definition.rb +118 -0
  331. data/lib/jets/lambda/dsl/warnings.rb +57 -0
  332. data/lib/jets/lambda/dsl.rb +64 -53
  333. data/lib/jets/lambda/function.rb +3 -3
  334. data/lib/jets/lambda/function_constructor.rb +6 -6
  335. data/lib/jets/lambda/functions.rb +36 -1
  336. data/lib/jets/mega/request/source.rb +1 -2
  337. data/lib/jets/mega/request.rb +4 -4
  338. data/lib/jets/names.rb +31 -15
  339. data/lib/jets/overrides/dummy/rails.rb +11 -0
  340. data/lib/jets/overrides/lambda/marshaller.rb +10 -0
  341. data/lib/jets/overrides/puma.rb +10 -0
  342. data/lib/jets/paths.rb +243 -0
  343. data/lib/jets/{poly_fun → poly}/base_executor.rb +13 -13
  344. data/lib/jets/{poly_fun → poly}/lambda_executor.rb +2 -2
  345. data/lib/jets/{poly_fun → poly}/node_error.rb +1 -1
  346. data/lib/jets/{poly_fun → poly}/node_executor.rb +4 -4
  347. data/lib/jets/{poly_fun → poly}/python_error.rb +1 -1
  348. data/lib/jets/{poly_fun → poly}/python_executor.rb +2 -2
  349. data/lib/jets/{poly_fun.rb → poly.rb} +12 -12
  350. data/lib/jets/preheat.rb +12 -25
  351. data/lib/jets/processors/deducer.rb +2 -2
  352. data/lib/jets/processors/main_processor.rb +6 -13
  353. data/lib/jets/rack/logger.rb +77 -0
  354. data/lib/jets/router/compat/route_set.rb +177 -0
  355. data/lib/jets/router/dsl/mount.rb +40 -6
  356. data/lib/jets/router/dsl.rb +125 -105
  357. data/lib/jets/router/engine_mount.rb +36 -0
  358. data/lib/jets/router/help.rb +130 -0
  359. data/lib/jets/router/helpers/named_routes/add_full_url.rb +13 -0
  360. data/lib/jets/router/helpers/named_routes/generated.rb +197 -0
  361. data/lib/jets/router/helpers/named_routes/proxy.rb +66 -0
  362. data/lib/jets/router/matcher.rb +135 -16
  363. data/lib/jets/router/resources/options.rb +6 -4
  364. data/lib/jets/router/route/after_initialize.rb +64 -0
  365. data/lib/jets/router/route/as.rb +93 -0
  366. data/lib/jets/router/route/authorizer.rb +1 -0
  367. data/lib/jets/router/route/compat.rb +45 -0
  368. data/lib/jets/router/route/info.rb +74 -0
  369. data/lib/jets/router/route/node.rb +137 -0
  370. data/lib/jets/router/route/path.rb +93 -0
  371. data/lib/jets/router/route.rb +109 -106
  372. data/lib/jets/router/route_set.rb +214 -0
  373. data/lib/jets/router/scope.rb +204 -69
  374. data/lib/jets/router/state.rb +36 -16
  375. data/lib/jets/router/util.rb +1 -31
  376. data/lib/jets/router.rb +64 -162
  377. data/lib/jets/ruby_version_check.rb +15 -0
  378. data/lib/jets/rule/base.rb +1 -0
  379. data/lib/jets/rule/dsl.rb +7 -7
  380. data/lib/jets/secrets.rb +110 -0
  381. data/lib/jets/spec_helpers/controllers/request.rb +22 -16
  382. data/lib/jets/spec_helpers/controllers.rb +32 -24
  383. data/lib/jets/spec_helpers.rb +0 -6
  384. data/lib/jets/stack/builder.rb +3 -2
  385. data/lib/jets/stack/definition.rb +1 -4
  386. data/lib/jets/stack/function.rb +2 -2
  387. data/lib/jets/stack/main/dsl/cloudwatch.rb +4 -4
  388. data/lib/jets/stack/main/dsl/kinesis.rb +2 -2
  389. data/lib/jets/stack/main/dsl/lambda.rb +26 -20
  390. data/lib/jets/stack/main/dsl/sqs.rb +2 -2
  391. data/lib/jets/stack/output/lookup.rb +1 -1
  392. data/lib/jets/stack/output.rb +2 -2
  393. data/lib/jets/stack/parameter.rb +2 -2
  394. data/lib/jets/stack/resource.rb +3 -3
  395. data/lib/jets/stack/s3_event.rb +51 -37
  396. data/lib/jets/stack.rb +1 -1
  397. data/lib/jets/tasks/engine.rake +85 -0
  398. data/lib/jets/tasks/framework.rake +66 -0
  399. data/lib/jets/tasks/log.rake +41 -0
  400. data/lib/jets/tasks/middleware.rake +9 -0
  401. data/lib/jets/tasks/misc.rake +81 -0
  402. data/lib/jets/tasks/statistics.rake +37 -0
  403. data/lib/jets/tasks/tmp.rake +51 -0
  404. data/lib/jets/tasks/yarn.rake +29 -0
  405. data/lib/jets/tasks/zeitwerk.rake +61 -0
  406. data/lib/jets/tasks.rb +18 -0
  407. data/lib/jets/turbine/configurable.rb +36 -0
  408. data/lib/jets/turbine/configuration.rb +101 -0
  409. data/lib/jets/turbine.rb +164 -20
  410. data/lib/jets/util/camelize.rb +24 -0
  411. data/lib/jets/version.rb +1 -1
  412. data/lib/jets.rb +7 -16
  413. metadata +410 -362
  414. data/bin/release +0 -9
  415. data/lib/jets/application/defaults.rb +0 -230
  416. data/lib/jets/builders/reconfigure_rails/config/initializers/jets.rb +0 -16
  417. data/lib/jets/builders/reconfigure_rails.rb +0 -114
  418. data/lib/jets/cfn/builders/api_resources_builder.rb +0 -44
  419. data/lib/jets/cfn/builders/base_child_builder.rb +0 -88
  420. data/lib/jets/cfn/builders/controller_builder.rb +0 -50
  421. data/lib/jets/cfn/builders/function_builder.rb +0 -14
  422. data/lib/jets/cfn/builders/job_builder.rb +0 -14
  423. data/lib/jets/cfn/builders/page_builder.rb +0 -80
  424. data/lib/jets/cfn/built_template.rb +0 -15
  425. data/lib/jets/cfn/template_source.rb +0 -64
  426. data/lib/jets/commands/base.rb +0 -145
  427. data/lib/jets/commands/call.rb +0 -185
  428. data/lib/jets/commands/clean.rb +0 -19
  429. data/lib/jets/commands/configure.rb +0 -51
  430. data/lib/jets/commands/console.rb +0 -18
  431. data/lib/jets/commands/db/environment-task.rake +0 -3
  432. data/lib/jets/commands/db/tasks/dummy/app.rb +0 -25
  433. data/lib/jets/commands/db/tasks/dummy/config.rb +0 -14
  434. data/lib/jets/commands/db/tasks.rb +0 -34
  435. data/lib/jets/commands/db.rb +0 -13
  436. data/lib/jets/commands/dbconsole.rb +0 -134
  437. data/lib/jets/commands/delete.rb +0 -136
  438. data/lib/jets/commands/dynamodb/migrate.rb +0 -9
  439. data/lib/jets/commands/dynamodb/migrator.rb +0 -36
  440. data/lib/jets/commands/dynamodb.rb +0 -19
  441. data/lib/jets/commands/gems.rb +0 -13
  442. data/lib/jets/commands/help/call.md +0 -69
  443. data/lib/jets/commands/help/dynamodb/generate.md +0 -52
  444. data/lib/jets/commands/help/dynamodb/migrate.md +0 -4
  445. data/lib/jets/commands/help/routes.md +0 -16
  446. data/lib/jets/commands/help.rb +0 -9
  447. data/lib/jets/commands/import/base.rb +0 -49
  448. data/lib/jets/commands/import/cheatsheet.rb +0 -35
  449. data/lib/jets/commands/import/rack.rb +0 -16
  450. data/lib/jets/commands/import/rails.rb +0 -74
  451. data/lib/jets/commands/import/sequence.rb +0 -90
  452. data/lib/jets/commands/import/templates/config/database.yml +0 -30
  453. data/lib/jets/commands/import/templates/submodules-cheatsheet.md +0 -89
  454. data/lib/jets/commands/import.rb +0 -12
  455. data/lib/jets/commands/main.rb +0 -169
  456. data/lib/jets/commands/markdown/creator.rb +0 -58
  457. data/lib/jets/commands/markdown/index.rb +0 -27
  458. data/lib/jets/commands/markdown/page.rb +0 -125
  459. data/lib/jets/commands/markdown/shell.rb +0 -11
  460. data/lib/jets/commands/new.rb +0 -173
  461. data/lib/jets/commands/rake_command.rb +0 -61
  462. data/lib/jets/commands/rake_tasks.rb +0 -50
  463. data/lib/jets/commands/runner.rb +0 -16
  464. data/lib/jets/commands/sequence.rb +0 -104
  465. data/lib/jets/commands/stack_info.rb +0 -30
  466. data/lib/jets/commands/templates/skeleton/.env.development.tt +0 -3
  467. data/lib/jets/commands/templates/skeleton/.env.test +0 -3
  468. data/lib/jets/commands/templates/skeleton/.env.tt +0 -3
  469. data/lib/jets/commands/templates/skeleton/.jetskeep +0 -1
  470. data/lib/jets/commands/templates/skeleton/Gemfile.tt +0 -40
  471. data/lib/jets/commands/templates/skeleton/Procfile +0 -7
  472. data/lib/jets/commands/templates/skeleton/Rakefile +0 -2
  473. data/lib/jets/commands/templates/skeleton/app/models/application_item.rb +0 -2
  474. data/lib/jets/commands/templates/skeleton/app/views/layouts/application.html.erb.tt +0 -26
  475. data/lib/jets/commands/templates/skeleton/config/application.rb.tt +0 -72
  476. data/lib/jets/commands/templates/skeleton/config/dynamodb.yml +0 -22
  477. data/lib/jets/commands/templates/skeleton/config/environments/development.rb +0 -7
  478. data/lib/jets/commands/templates/skeleton/config/environments/production.rb +0 -9
  479. data/lib/jets/commands/templates/skeleton/config/environments/test.rb +0 -7
  480. data/lib/jets/commands/templates/webpacker/app/javascript/packs/application.js.tt +0 -23
  481. data/lib/jets/commands/templates/webpacker/app/javascript/packs/theme.scss.tt +0 -24
  482. data/lib/jets/commands/upgrade/templates/bin/webpack +0 -20
  483. data/lib/jets/commands/upgrade/templates/bin/webpack-dev-server +0 -19
  484. data/lib/jets/commands/upgrade/version1.rb +0 -136
  485. data/lib/jets/commands/upgrade.rb +0 -105
  486. data/lib/jets/commands/webpacker_template.rb +0 -18
  487. data/lib/jets/controller/callbacks.rb +0 -73
  488. data/lib/jets/controller/cookies/jar.rb +0 -269
  489. data/lib/jets/controller/cookies.rb +0 -38
  490. data/lib/jets/controller/error/invalid_authenticity_token.rb +0 -6
  491. data/lib/jets/controller/error.rb +0 -4
  492. data/lib/jets/controller/forgery_protection.rb +0 -43
  493. data/lib/jets/controller/layout.rb +0 -17
  494. data/lib/jets/controller/middleware/cors.rb +0 -60
  495. data/lib/jets/controller/middleware/local/mimic_aws_call.rb +0 -38
  496. data/lib/jets/controller/middleware/local/route_matcher.rb +0 -22
  497. data/lib/jets/controller/middleware/reloader.rb +0 -15
  498. data/lib/jets/controller/parameters_filter.rb +0 -29
  499. data/lib/jets/controller/params.rb +0 -117
  500. data/lib/jets/controller/redirection.rb +0 -61
  501. data/lib/jets/controller/rendering/rack_renderer.rb +0 -267
  502. data/lib/jets/controller/rendering.rb +0 -96
  503. data/lib/jets/controller/stage.rb +0 -34
  504. data/lib/jets/controller.rb +0 -3
  505. data/lib/jets/db.rb +0 -15
  506. data/lib/jets/generator/templates/erb/controller/view.html.erb +0 -2
  507. data/lib/jets/generator/templates/erb/scaffold/index.html.erb +0 -29
  508. data/lib/jets/generator/templates/rails/controller/controller.rb +0 -13
  509. data/lib/jets/generator/templates/rails/helper/helper.rb +0 -4
  510. data/lib/jets/generator/templates/rails/scaffold_controller/controller.rb +0 -67
  511. data/lib/jets/generator.rb +0 -112
  512. data/lib/jets/internal/app/controllers/jets/bare_controller.rb +0 -16
  513. data/lib/jets/internal/app/controllers/jets/rack_controller.rb +0 -12
  514. data/lib/jets/internal/app/helpers/jets/mailers_helper.rb +0 -9
  515. data/lib/jets/internal/app/jobs/jets/preheat_job.rb +0 -52
  516. data/lib/jets/internal/app/views/jets/mailers/index.html.erb +0 -8
  517. data/lib/jets/internal/app/views/jets/mailers/mailer.html.erb +0 -6
  518. data/lib/jets/internal/turbines/jets/mailer.rb +0 -52
  519. data/lib/jets/lambda/task.rb +0 -111
  520. data/lib/jets/logger.rb +0 -21
  521. data/lib/jets/middleware/configurator.rb +0 -84
  522. data/lib/jets/middleware/default_stack.rb +0 -53
  523. data/lib/jets/middleware/layer.rb +0 -34
  524. data/lib/jets/middleware/stack.rb +0 -77
  525. data/lib/jets/middleware.rb +0 -33
  526. data/lib/jets/overrides/rails/action_controller.rb +0 -13
  527. data/lib/jets/overrides/rails/asset_tag_helper.rb +0 -114
  528. data/lib/jets/overrides/rails/common_methods.rb +0 -13
  529. data/lib/jets/overrides/rails/migration_checker.rb +0 -34
  530. data/lib/jets/overrides/rails/rendering_helper.rb +0 -27
  531. data/lib/jets/overrides/rails/url_helper.rb +0 -88
  532. data/lib/jets/overrides/rails.rb +0 -6
  533. data/lib/jets/rack_server.rb +0 -86
  534. data/lib/jets/resource/api_gateway/base_path/function.rb +0 -49
  535. data/lib/jets/resource/api_gateway/base_path/role.rb +0 -76
  536. data/lib/jets/resource/api_gateway/cors.rb +0 -61
  537. data/lib/jets/resource/api_gateway/method.rb +0 -102
  538. data/lib/jets/resource/api_gateway/rest_api/routes/change.rb +0 -16
  539. data/lib/jets/resource/base.rb +0 -28
  540. data/lib/jets/resource/child_stack/api_deployment.rb +0 -58
  541. data/lib/jets/resource/child_stack/api_gateway.rb +0 -23
  542. data/lib/jets/resource/child_stack/api_resource/page.rb +0 -20
  543. data/lib/jets/resource/child_stack/api_resource.rb +0 -54
  544. data/lib/jets/resource/child_stack/base.rb +0 -24
  545. data/lib/jets/resource/lambda/function.rb +0 -221
  546. data/lib/jets/resource/logs/subscription_filter.rb +0 -31
  547. data/lib/jets/resource/permission.rb +0 -45
  548. data/lib/jets/resource.rb +0 -71
  549. data/lib/jets/router/error.rb +0 -4
  550. data/lib/jets/router/finder.rb +0 -47
  551. data/lib/jets/router/helpers/core_helper.rb +0 -27
  552. data/lib/jets/router/helpers/named_routes_helper.rb +0 -8
  553. data/lib/jets/router/helpers.rb +0 -4
  554. data/lib/jets/router/method_creator/code.rb +0 -99
  555. data/lib/jets/router/method_creator/edit.rb +0 -12
  556. data/lib/jets/router/method_creator/generic.rb +0 -11
  557. data/lib/jets/router/method_creator/index.rb +0 -48
  558. data/lib/jets/router/method_creator/new.rb +0 -12
  559. data/lib/jets/router/method_creator/root.rb +0 -15
  560. data/lib/jets/router/method_creator/show.rb +0 -12
  561. data/lib/jets/router/method_creator.rb +0 -50
  562. data/lib/jets/turbo/database_yaml.rb +0 -41
  563. data/lib/jets/turbo/project/.gitignore +0 -12
  564. data/lib/jets/turbo/project/.jetskeep +0 -1
  565. data/lib/jets/turbo/project/Gemfile +0 -16
  566. data/lib/jets/turbo/project/Rakefile +0 -2
  567. data/lib/jets/turbo/project/app/controllers/application_controller.rb +0 -2
  568. data/lib/jets/turbo/project/app/helpers/application_helper.rb +0 -2
  569. data/lib/jets/turbo/project/app/jobs/application_job.rb +0 -4
  570. data/lib/jets/turbo/project/config/application.rb +0 -5
  571. data/lib/jets/turbo/project/config/routes.rb +0 -4
  572. data/lib/jets/turbo/project/config.ru +0 -5
  573. data/lib/jets/turbo/rails.rb +0 -127
  574. data/lib/jets/turbo/templates/config/database.yml +0 -30
  575. data/lib/jets/turbo.rb +0 -56
  576. data/readme/prerelease.md +0 -6
  577. data/readme/testing.md +0 -60
  578. /data/{lib/jets → engines}/internal/app/shared/functions/jets/s3_bucket_config.rb +0 -0
  579. /data/lib/jets/{commands → command}/help/build.md +0 -0
  580. /data/lib/jets/{commands → command}/help/clean/build.md +0 -0
  581. /data/lib/jets/{commands → command}/help/clean/log.md +0 -0
  582. /data/lib/jets/{commands → command}/help/console.md +0 -0
  583. /data/lib/jets/{commands → command}/help/db/generate.md +0 -0
  584. /data/lib/jets/{commands → command}/help/dbconsole.md +0 -0
  585. /data/lib/jets/{commands → command}/help/degenerate.md +0 -0
  586. /data/lib/jets/{commands → command}/help/delete.md +0 -0
  587. /data/lib/jets/{commands → command}/help/gems/check.md +0 -0
  588. /data/lib/jets/{commands → command}/help/generate.md +0 -0
  589. /data/lib/jets/{commands → command}/help/import/rack.md +0 -0
  590. /data/lib/jets/{commands → command}/help/import/rails.md +0 -0
  591. /data/lib/jets/{commands → command}/help/runner.md +0 -0
  592. /data/lib/jets/{commands → command}/help/server.md +0 -0
  593. /data/lib/jets/{commands → command}/help/status.md +0 -0
  594. /data/lib/jets/{commands → command}/help/upgrade.md +0 -0
  595. /data/lib/jets/{commands → command}/help/url.md +0 -0
  596. /data/lib/jets/{generator/templates/active_job → generators}/job/templates/application_job.rb.tt +0 -0
  597. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/.rspec +0 -0
  598. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/README.md +0 -0
  599. /data/{.gitmodules → lib/jets/generators/overrides/app/templates/app/assets/images/.keep} +0 -0
  600. /data/lib/jets/{commands/templates/skeleton/db/.gitkeep → generators/overrides/app/templates/app/assets/javascripts/.keep} +0 -0
  601. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/app/controllers/application_controller.rb +0 -0
  602. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/app/helpers/application_helper.rb +0 -0
  603. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/app/jobs/application_job.rb +0 -0
  604. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/config.ru +0 -0
  605. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/public/favicon.ico +0 -0
  606. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/spec/controllers/posts_controller_spec.rb +0 -0
  607. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/spec/fixtures/payloads/posts-index.json +0 -0
  608. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/spec/fixtures/payloads/posts-show.json +0 -0
  609. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/spec/spec_helper.rb.tt +0 -0
  610. /data/lib/jets/{generator → generators/overrides}/templates/erb/scaffold/_form.html.erb +0 -0
  611. /data/lib/jets/{generator → generators/overrides}/templates/erb/scaffold/edit.html.erb +0 -0
  612. /data/lib/jets/{generator → generators/overrides}/templates/erb/scaffold/new.html.erb +0 -0
  613. /data/lib/jets/{generator → generators/overrides}/templates/erb/scaffold/show.html.erb +0 -0
  614. /data/lib/jets/{generator → generators/overrides}/templates/rails/assets/javascript.js +0 -0
  615. /data/lib/jets/{generator → generators/overrides}/templates/rails/assets/stylesheet.css +0 -0
  616. /data/lib/jets/{generator → generators/overrides}/templates/rails/scaffold/scaffold.css +0 -0
@@ -1,15 +1,15 @@
1
1
  module Jets::Stack::Main::Dsl
2
2
  module Cloudwatch
3
3
  def cloudwatch_alarm(id, hash={})
4
- if hash.key?(:depends_on)
4
+ if hash.key?(:DependsOn)
5
5
  attributes = hash # leave structure alone and add type only
6
- attributes[:type] = "AWS::CloudWatch::Alarm"
6
+ attributes[:Type] = "AWS::CloudWatch::Alarm"
7
7
  else
8
8
  # the attributes are properties
9
9
  properties = hash
10
10
  attributes = {
11
- type: "AWS::CloudWatch::Alarm",
12
- properties: properties,
11
+ Type: "AWS::CloudWatch::Alarm",
12
+ Properties: properties,
13
13
  }
14
14
  end
15
15
  resource(id, attributes)
@@ -2,8 +2,8 @@ module Jets::Stack::Main::Dsl
2
2
  module Kinesis
3
3
  def kinesis_stream(id, props={})
4
4
  defaults = {
5
- name: id,
6
- shard_count: 1
5
+ Name: id,
6
+ ShardCount: 1
7
7
  }
8
8
 
9
9
  props = defaults.merge(props)
@@ -1,5 +1,7 @@
1
1
  module Jets::Stack::Main::Dsl
2
2
  module Lambda
3
+ include Jets::Util::Camelize
4
+
3
5
  # Example:
4
6
  #
5
7
  # function(:hello,
@@ -24,26 +26,26 @@ module Jets::Stack::Main::Dsl
24
26
  class_namespace = self.to_s.underscore.gsub('/','-') # IE: Jets::Domain => jets-domain
25
27
  description = "#{self.to_s} #{meth}" # not bother adding extension
26
28
  defaults = {
27
- code: {
28
- s3_bucket: "!Ref S3Bucket",
29
- s3_key: code_s3_key
29
+ Code: {
30
+ S3Bucket: "!Ref S3Bucket",
31
+ S3Key: code_s3_key
30
32
  },
31
- role: "!Ref IamRole",
32
- handler: "#{id}.lambda_handler", # default ruby convention
33
- runtime: :ruby,
34
- timeout: Jets.config.function.timeout,
35
- memory_size: Jets.config.function.memory_size,
36
- ephemeral_storage: Jets.config.function.ephemeral_storage,
37
- description: description,
33
+ Role: "!Ref IamRole",
34
+ Handler: "#{id}.lambda_handler", # default ruby convention
35
+ Timeout: Jets.config.function.timeout,
36
+ MemorySize: Jets.config.function.memory_size,
37
+ EphemeralStorage: Jets.config.function.ephemeral_storage,
38
+ Description: description,
38
39
  }
39
40
 
40
- function_name = "#{Jets.config.project_namespace}-#{class_namespace}-#{meth}"
41
- function_name = function_name.size > Jets::MAX_FUNCTION_NAME_SIZE ? nil : function_name
42
- defaults[:function_name] = function_name if function_name
41
+ function_name = "#{Jets.project_namespace}-#{class_namespace}-#{meth}"
42
+ function_name = function_name.size > Jets::Cfn::Resource::Lambda::Function::MAX_FUNCTION_NAME_SIZE ? nil : function_name
43
+ defaults[:FunctionName] = function_name if function_name
43
44
 
44
45
  props = defaults.merge(props)
45
- props[:runtime] = Jets.ruby_runtime if props[:runtime].to_s == "ruby"
46
- props[:handler] = handler(props[:handler])
46
+ # shared/functions do not include the GemLayer and no custom runtime support
47
+ props[:Runtime] ||= Jets.ruby_runtime
48
+ props[:Handler] = handler(props[:Handler])
47
49
 
48
50
  logical_id = id.to_s.gsub('/','_')
49
51
  resource(logical_id, "AWS::Lambda::Function", props)
@@ -53,15 +55,19 @@ module Jets::Stack::Main::Dsl
53
55
 
54
56
  def python_function(id, props={})
55
57
  meth = sanitize_method_name(id)
56
- props[:handler] ||= "#{meth}.lambda_handler" # default python convention
57
- props[:runtime] = "python3.6"
58
+ props[:Handler] ||= "#{meth}.lambda_handler" # default python convention
59
+ props[:Runtime] ||= default_runtimes[:python]
58
60
  function(id, props)
59
61
  end
60
62
 
63
+ def default_runtimes
64
+ Jets::Cfn::Resource::Lambda::Function.default_runtimes
65
+ end
66
+
61
67
  def node_function(id, props={})
62
68
  meth = sanitize_method_name(id)
63
- props[:handler] ||= "#{meth}.handler" # default python convention
64
- props[:runtime] = "nodejs8.10"
69
+ props[:Handler] ||= "#{meth}.handler" # default python convention
70
+ props[:Runtime] ||= default_runtimes[:node]
65
71
  function(id, props)
66
72
  end
67
73
 
@@ -70,7 +76,7 @@ module Jets::Stack::Main::Dsl
70
76
  # permission(:my_permission, principal: "events.amazonaws.com")
71
77
  #
72
78
  def permission(id, props={})
73
- defaults = { action: "lambda:InvokeFunction" }
79
+ defaults = { Action: "lambda:InvokeFunction" }
74
80
  props = defaults.merge(props)
75
81
  resource(id, "AWS::Lambda::Permission", props)
76
82
  end
@@ -3,8 +3,8 @@ module Jets::Stack::Main::Dsl
3
3
  def sqs_queue(id, props={})
4
4
  # props[:queue_name] ||= id.to_s # comment out to allow CloudFormation to generate name
5
5
  resource(id, "AWS::SQS::Queue", props)
6
- output(id, value: get_att("#{id}.Arn")) # normal !Ref returns the sqs url the ARN is useful for nested stacks depends_on
7
- output("#{id}_url", ref(id)) # useful for Stack.lookup method. IE: List.lookup(:waitlist_url)
6
+ output(id, Value: get_att("#{id}.Arn")) # normal !Ref returns the sqs url the ARN is useful for nested stacks depends_on
7
+ output("#{id}Url", ref(id)) # useful for Stack.lookup method. IE: List.lookup(:waitlist_url)
8
8
  end
9
9
  end
10
10
  end
@@ -19,7 +19,7 @@ class Jets::Stack::Output
19
19
 
20
20
  # Shared child stack arn
21
21
  def shared_stack_arn(logical_id)
22
- parent_stack = Jets.config.project_namespace
22
+ parent_stack = Jets.project_namespace
23
23
  resp = cfn.describe_stacks(stack_name: parent_stack)
24
24
  parent = resp.stacks.first
25
25
  output_value(parent, logical_id)
@@ -20,11 +20,11 @@ class Jets::Stack
20
20
  { logical_id => properties }
21
21
  elsif definition.size == 2 && second.is_a?(String) # short form
22
22
  logical_id = first
23
- properties = second.is_a?(String) ? { value: second } : {}
23
+ properties = second.is_a?(String) ? { Value: second } : {}
24
24
  { logical_id => properties }
25
25
  elsif definition.size == 1
26
26
  logical_id = first.to_s
27
- properties = {value: "!Ref #{logical_id.camelize}"}
27
+ properties = {Value: "!Ref #{logical_id.camelize}"}
28
28
  { logical_id => properties }
29
29
  else # I dont know what form
30
30
  raise "Invalid form provided. definition #{definition.inspect}"
@@ -21,7 +21,7 @@ class Jets::Stack
21
21
  elsif (definition.size == 2 && second.is_a?(String)) || # short form
22
22
  definition.size == 1
23
23
  logical_id = first
24
- properties = second.is_a?(String) ? { default: second } : {}
24
+ properties = second.is_a?(String) ? { Default: second } : {}
25
25
  { logical_id => properties }
26
26
  else # I dont know what form
27
27
  raise "Invalid form provided. definition #{definition.inspect}"
@@ -30,7 +30,7 @@ class Jets::Stack
30
30
 
31
31
  def add_required(attributes)
32
32
  properties = attributes.values.first
33
- properties[:type] ||= 'String'
33
+ properties[:Type] ||= 'String'
34
34
  attributes
35
35
  end
36
36
  end
@@ -14,16 +14,16 @@ class Jets::Stack
14
14
 
15
15
  # CloudFormation Resources reference: https://amzn.to/2NKg6ip
16
16
  def standarize(definition)
17
- Jets::Resource::Standardizer.new(definition).template
17
+ Jets::Cfn::Resource::Standardizer.new(definition).template
18
18
  end
19
19
 
20
20
  def replace_placeholers(template)
21
21
  attributes = template.values.first
22
- s3_key = attributes.dig('Properties','Code','S3Key')
22
+ s3_key = attributes.dig(:Properties,:Code,:S3Key)
23
23
  if s3_key == "code_s3_key_placeholder"
24
24
  checksum = Jets::Builders::Md5.checksums["stage/code"]
25
25
  code_zip = "code-#{checksum}.zip"
26
- attributes['Properties']['Code']['S3Key'] = "jets/code/#{code_zip}"
26
+ attributes[:Properties][:Code][:S3Key] = "jets/code/#{code_zip}"
27
27
  end
28
28
  template
29
29
  end
@@ -15,68 +15,82 @@ class Jets::Stack
15
15
  def build_stack
16
16
  # assign to local variable so its available in the block
17
17
  bucket = @bucket_name
18
+ # closures
19
+ configure_bucket = unless Jets.config.s3_event.configure_bucket.nil?
20
+ puts "DEPRECATION WARNING: Jets.config.s3_event.configure_bucket is deprecated. Please use Jets.config.events.s3.configure_bucket instead."
21
+ Jets.config.s3_event.configure_bucket
22
+ else
23
+ Jets.config.events.s3.configure_bucket
24
+ end
25
+
26
+ notification_configuration = unless Jets.config.s3_event.notification_configuration.nil?
27
+ puts "DEPRECATION WARNING: Jets.config.s3_event.notification_configuration is deprecated. Please use Jets.config.events.s3.notification_configuration instead."
28
+ Jets.config.s3_event.notification_configuration
29
+ else
30
+ Jets.config.events.s3.notification_configuration
31
+ end
18
32
 
19
33
  Jets::Stack.new_class(stack_name) do
20
- s3_bucket_configuration(:s3_bucket_configuration,
21
- service_token: "!GetAtt JetsS3BucketConfig.Arn", # Cannot change this w/o changing the logical id
34
+ s3_bucket_configuration(:S3BucketConfiguration,
35
+ ServiceToken: "!GetAtt JetsS3BucketConfig.Arn", # Cannot change this w/o changing the logical id
22
36
  # These properties correspond to the ruby aws-sdk s3.put_bucket_notification_configuration
23
37
  # in jets/s3_bucket_config.rb, not the CloudFormation Bucket properties. The CloudFormation
24
38
  # bucket properties have a similiar structure but is slightly different so it can be confusing.
25
39
  #
26
40
  # Ruby aws-sdk S3 Docs: https://amzn.to/2N7m5Lr
27
- bucket: bucket,
28
- notification_configuration: Jets.config.s3_event.notification_configuration,
29
- ) if Jets.config.s3_event.configure_bucket
41
+ Bucket: bucket,
42
+ NotificationConfiguration: notification_configuration,
43
+ ) if configure_bucket
30
44
 
31
45
  # Important note: If we change the name of this function we should also change the
32
46
  # logical id of the s3_bucket_configuration custom resource or we'll get this error:
33
47
  # Modifying service token is not allowed.
34
48
  function("jets/s3_bucket_config",
35
- role: "!GetAtt BucketConfigIamRole.Arn",
36
- layers: ["!Ref GemLayer"],
49
+ Role: "!GetAtt BucketConfigIamRole.Arn",
50
+ Layers: ["!Ref GemLayer"],
37
51
  )
38
52
 
39
- sns_topic(:sns_topic)
40
- sns_topic_policy(:sns_topic_policy,
41
- policy_document: {
42
- version: "2012-10-17",
43
- statement: {
44
- effect: "Allow",
45
- principal: { service: "s3.amazonaws.com"},
46
- action: "sns:Publish",
47
- resource: "!Ref SnsTopic",
48
- condition: {
49
- arn_like: {
50
- "aws:SourceArn" => "!Sub arn:aws:s3:*:*:#{bucket}"
53
+ sns_topic(:SnsTopic)
54
+ sns_topic_policy(:SnsTopicPolicy,
55
+ PolicyDocument: {
56
+ Version: "2012-10-17",
57
+ Statement: {
58
+ Effect: "Allow",
59
+ Principal: { Service: "s3.amazonaws.com"},
60
+ Action: "sns:Publish",
61
+ Resource: "!Ref SnsTopic",
62
+ Condition: {
63
+ ArnLike: {
64
+ "Aws:SourceArn" => "!Sub arn:aws:s3:*:*:#{bucket}"
51
65
  }
52
66
  }
53
67
  }
54
68
  },
55
- topics: ["!Ref SnsTopic"],
69
+ Topics: ["!Ref SnsTopic"],
56
70
  )
57
71
 
58
- iam_role(:bucket_config_iam_role,
59
- assume_role_policy_document: {
60
- version: '2012-10-17',
61
- statement: [
62
- effect: "Allow",
63
- principal: {service: ["lambda.amazonaws.com"]},
64
- action: ['sts:AssumeRole'],
72
+ iam_role(:BucketConfigIamRole,
73
+ AssumeRolePolicyDocument: {
74
+ Version: '2012-10-17',
75
+ Statement: [
76
+ Effect: "Allow",
77
+ Principal: {Service: ["lambda.amazonaws.com"]},
78
+ Action: ['sts:AssumeRole'],
65
79
  ]
66
80
  },
67
- path: "/",
68
- managed_policy_arns: ["arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"],
69
- policies: [
70
- policy_name: "S3Policy",
71
- policy_document: {
72
- version: '2012-10-17',
73
- statement: [
74
- effect: "Allow",
75
- action: [
81
+ Path: "/",
82
+ ManagedPolicyArns: ["arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"],
83
+ Policies: [
84
+ PolicyName: "S3Policy",
85
+ PolicyDocument: {
86
+ Version: '2012-10-17',
87
+ Statement: [
88
+ Effect: "Allow",
89
+ Action: [
76
90
  's3:GetBucketNotification',
77
91
  's3:PutBucketNotification',
78
92
  ],
79
- resource: "*"
93
+ Resource: "*"
80
94
  ]
81
95
  }
82
96
  ]
data/lib/jets/stack.rb CHANGED
@@ -43,7 +43,7 @@ module Jets
43
43
  # All the & because resources might be nil
44
44
  templates = stack.resources&.map(&:template)&.select do |t|
45
45
  attributes = t.values.first
46
- attributes['Type'] == 'AWS::Lambda::Function'
46
+ attributes[:Type] == 'AWS::Lambda::Function'
47
47
  end
48
48
  templates ||= []
49
49
  templates.map { |t| Function.new(t) }
@@ -0,0 +1,85 @@
1
+ # frozen_string_literal: true
2
+
3
+ task "load_app" do
4
+ namespace :app do
5
+ load APP_RAKEFILE
6
+
7
+ desc "Update some initially generated files"
8
+ task update: [ "update:bin" ]
9
+
10
+ namespace :update do
11
+ require "rails/engine/updater"
12
+ # desc "Adds new executables to the engine bin/ directory"
13
+ task :bin do
14
+ Rails::Engine::Updater.run(:create_bin_files)
15
+ end
16
+ end
17
+ end
18
+ task environment: "app:environment"
19
+
20
+ if !defined?(ENGINE_ROOT) || !ENGINE_ROOT
21
+ ENGINE_ROOT = find_engine_path(APP_RAKEFILE)
22
+ end
23
+ end
24
+
25
+ def app_task(name)
26
+ task name => [:load_app, "app:db:#{name}"]
27
+ end
28
+
29
+ namespace :db do
30
+ app_task "reset"
31
+
32
+ desc "Migrate the database (options: VERSION=x, VERBOSE=false)."
33
+ app_task "migrate"
34
+ app_task "migrate:up"
35
+ app_task "migrate:down"
36
+ app_task "migrate:redo"
37
+ app_task "migrate:reset"
38
+
39
+ desc "Display status of migrations"
40
+ app_task "migrate:status"
41
+
42
+ desc "Create the database from config/database.yml for the current Rails.env (use db:create:all to create all databases in the config)"
43
+ app_task "create"
44
+ app_task "create:all"
45
+
46
+ desc "Drops the database for the current Rails.env (use db:drop:all to drop all databases)"
47
+ app_task "drop"
48
+ app_task "drop:all"
49
+
50
+ desc "Load fixtures into the current environment's database."
51
+ app_task "fixtures:load"
52
+
53
+ desc "Rolls the schema back to the previous version (specify steps w/ STEP=n)."
54
+ app_task "rollback"
55
+
56
+ desc "Creates a database schema file (either db/schema.rb or db/structure.sql, depending on `config.active_record.schema_format`)"
57
+ app_task "schema:dump"
58
+
59
+ desc "Load a schema.rb file into the database"
60
+ app_task "schema:load"
61
+
62
+ desc "Load the seed data from db/seeds.rb"
63
+ app_task "seed"
64
+
65
+ desc "Create the database, load the schema, and initialize with the seed data (use db:reset to also drop the database first)"
66
+ app_task "setup"
67
+
68
+ desc "Retrieves the current schema version number"
69
+ app_task "version"
70
+
71
+ # desc 'Load the test schema'
72
+ app_task "test:prepare"
73
+ end
74
+
75
+ def find_engine_path(path)
76
+ return File.expand_path(Dir.pwd) if path == "/"
77
+
78
+ if Rails::Engine.find(path)
79
+ path
80
+ else
81
+ find_engine_path(File.expand_path("..", path))
82
+ end
83
+ end
84
+
85
+ Rake.application.invoke_task(:load_app)
@@ -0,0 +1,66 @@
1
+ # frozen_string_literal: true
2
+
3
+ namespace :app do
4
+ desc "Update configs and some other initially generated files (or use just update:configs or update:bin)"
5
+ task update: [ "update:configs", "update:bin", "update:db", "update:active_storage", "update:upgrade_guide_info" ]
6
+
7
+ desc "Applies the template supplied by LOCATION=(/path/to/template) or URL"
8
+ task template: :environment do
9
+ template = ENV["LOCATION"]
10
+ raise "No LOCATION value given. Please set LOCATION either as path to a file or a URL" if template.blank?
11
+ template = File.expand_path(template) unless %r{\A[A-Za-z][A-Za-z0-9+\-.]*://}.match?(template)
12
+ require "rails/generators"
13
+ require "rails/generators/rails/app/app_generator"
14
+ generator = Rails::Generators::AppGenerator.new [Jets.root], {}, { destination_root: Jets.root }
15
+ generator.apply template, verbose: false
16
+ end
17
+
18
+ namespace :templates do
19
+ # desc "Copy all the templates from rails to the application directory for customization. Already existing local copies will be overwritten"
20
+ task :copy do
21
+ generators_lib = File.expand_path("../generators", __dir__)
22
+ project_templates = "#{Jets.root}/lib/templates"
23
+
24
+ default_templates = { "erb" => %w{controller mailer scaffold},
25
+ "rails" => %w{controller helper scaffold_controller} }
26
+
27
+ default_templates.each do |type, names|
28
+ local_template_type_dir = File.join(project_templates, type)
29
+ mkdir_p local_template_type_dir, verbose: false
30
+
31
+ names.each do |name|
32
+ dst_name = File.join(local_template_type_dir, name)
33
+ src_name = File.join(generators_lib, type, name, "templates")
34
+ cp_r src_name, dst_name, verbose: false
35
+ end
36
+ end
37
+ end
38
+ end
39
+
40
+ namespace :update do
41
+ require "rails/app_updater"
42
+
43
+ # desc "Update config files from your current rails install"
44
+ task :configs do
45
+ Rails::AppUpdater.invoke_from_app_generator :create_boot_file
46
+ Rails::AppUpdater.invoke_from_app_generator :update_config_files
47
+ end
48
+
49
+ # desc "Adds new executables to the application bin/ directory"
50
+ task :bin do
51
+ Rails::AppUpdater.invoke_from_app_generator :update_bin_files
52
+ end
53
+
54
+ task :db do
55
+ Rails::AppUpdater.invoke_from_app_generator :update_db_schema
56
+ end
57
+
58
+ task :active_storage do
59
+ Rails::AppUpdater.invoke_from_app_generator :update_active_storage
60
+ end
61
+
62
+ task :upgrade_guide_info do
63
+ Rails::AppUpdater.invoke_from_app_generator :display_upgrade_guide_info
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+
3
+ namespace :log do
4
+ ##
5
+ # Truncates all/specified log files
6
+ # ENV['LOGS']
7
+ # - defaults to all environments log files i.e. 'development,test,production'
8
+ # - ENV['LOGS']=all truncates all files i.e. log/*.log
9
+ # - ENV['LOGS']='test,development' truncates only specified files
10
+ desc "Truncates all/specified *.log files in log/ to zero bytes (specify which logs with LOGS=test,development)"
11
+ task :clear do
12
+ log_files.each do |file|
13
+ clear_log_file(file)
14
+ end
15
+ end
16
+
17
+ def log_files
18
+ if ENV["LOGS"] == "all"
19
+ FileList["log/*.log"]
20
+ elsif ENV["LOGS"]
21
+ log_files_to_truncate(ENV["LOGS"])
22
+ else
23
+ log_files_to_truncate(all_environments.join(","))
24
+ end
25
+ end
26
+
27
+ def log_files_to_truncate(envs)
28
+ envs.split(",")
29
+ .map { |file| "log/#{file.strip}.log" }
30
+ .select { |file| File.exist?(file) }
31
+ end
32
+
33
+ def clear_log_file(file)
34
+ f = File.open(file, "w")
35
+ f.close
36
+ end
37
+
38
+ def all_environments
39
+ Dir["config/environments/*.rb"].map { |fname| File.basename(fname, ".*") }
40
+ end
41
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ desc "Prints out your Rack middleware stack"
4
+ task middleware: :environment do
5
+ Jets.configuration.middleware.each do |middleware|
6
+ puts "use #{middleware.name}"
7
+ end
8
+ puts "run #{Jets.application.endpoint}"
9
+ end
@@ -0,0 +1,81 @@
1
+ # frozen_string_literal: true
2
+
3
+ # raise "tung"
4
+
5
+ desc "Generate a cryptographically secure secret key (this is typically used to generate a secret for cookie sessions)."
6
+ task :secret do
7
+ require "securerandom"
8
+ puts SecureRandom.hex(64)
9
+ end
10
+
11
+ desc "List versions of all Jets frameworks and the environment"
12
+ task about: :environment do
13
+ puts Jets::Info
14
+ end
15
+
16
+ namespace :time do
17
+ desc "List all time zones, list by two-letter country code (`bin/rails time:zones[US]`), or list by UTC offset (`bin/rails time:zones[-8]`)"
18
+ task :zones, :country_or_offset do |t, args|
19
+ zones, offset = ActiveSupport::TimeZone.all, nil
20
+
21
+ if country_or_offset = args[:country_or_offset]
22
+ begin
23
+ zones = ActiveSupport::TimeZone.country_zones(country_or_offset)
24
+ rescue TZInfo::InvalidCountryCode
25
+ offset = country_or_offset
26
+ end
27
+ end
28
+
29
+ build_time_zone_list zones, offset
30
+ end
31
+
32
+ namespace :zones do
33
+ # desc 'Displays all time zones, also available: time:zones:us, time:zones:local -- filter with OFFSET parameter, e.g., OFFSET=-6'
34
+ task :all do
35
+ build_time_zone_list ActiveSupport::TimeZone.all
36
+ end
37
+
38
+ # desc 'Displays names of US time zones recognized by the Jets TimeZone class, grouped by offset. Results can be filtered with optional OFFSET parameter, e.g., OFFSET=-6'
39
+ task :us do
40
+ build_time_zone_list ActiveSupport::TimeZone.us_zones
41
+ end
42
+
43
+ # desc 'Displays names of time zones recognized by the Jets TimeZone class with the same offset as the system local time'
44
+ task :local do
45
+ require "active_support"
46
+ require "active_support/time"
47
+
48
+ jan_offset = Time.now.beginning_of_year.utc_offset
49
+ jul_offset = Time.now.beginning_of_year.change(month: 7).utc_offset
50
+ offset = jan_offset < jul_offset ? jan_offset : jul_offset
51
+
52
+ build_time_zone_list(ActiveSupport::TimeZone.all, offset)
53
+ end
54
+
55
+ # to find UTC -06:00 zones, OFFSET can be set to either -6, -6:00 or 21600
56
+ def build_time_zone_list(zones, offset = ENV["OFFSET"])
57
+ require "active_support"
58
+ require "active_support/time"
59
+ if offset
60
+ offset = if offset.to_s.match(/(\+|-)?(\d+):(\d+)/)
61
+ sign = $1 == "-" ? -1 : 1
62
+ hours, minutes = $2.to_f, $3.to_f
63
+ ((hours * 3600) + (minutes.to_f * 60)) * sign
64
+ elsif offset.to_f.abs <= 13
65
+ offset.to_f * 3600
66
+ else
67
+ offset.to_f
68
+ end
69
+ end
70
+ previous_offset = nil
71
+ zones.each do |zone|
72
+ if offset.nil? || offset == zone.utc_offset
73
+ puts "\n* UTC #{zone.formatted_offset} *" unless zone.utc_offset == previous_offset
74
+ puts zone.name
75
+ previous_offset = zone.utc_offset
76
+ end
77
+ end
78
+ puts "\n"
79
+ end
80
+ end
81
+ end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ # While global constants are bad, many 3rd party tools depend on this one (e.g
4
+ # rspec-rails & cucumber-rails). So a deprecation warning is needed if we want
5
+ # to remove it.
6
+ STATS_DIRECTORIES ||= [
7
+ %w(Controllers app/controllers),
8
+ %w(Helpers app/helpers),
9
+ %w(Jobs app/jobs),
10
+ %w(Models app/models),
11
+ %w(Mailers app/mailers),
12
+ %w(Mailboxes app/mailboxes),
13
+ %w(Channels app/channels),
14
+ %w(Views app/views),
15
+ %w(JavaScripts app/assets/javascripts),
16
+ %w(Stylesheets app/assets/stylesheets),
17
+ %w(JavaScript app/javascript),
18
+ %w(Libraries lib/),
19
+ %w(APIs app/apis),
20
+ %w(Controller\ tests test/controllers),
21
+ %w(Helper\ tests test/helpers),
22
+ %w(Job\ tests test/jobs),
23
+ %w(Model\ tests test/models),
24
+ %w(Mailer\ tests test/mailers),
25
+ %w(Mailbox\ tests test/mailboxes),
26
+ %w(Channel\ tests test/channels),
27
+ %w(Integration\ tests test/integration),
28
+ %w(System\ tests test/system),
29
+ ].collect do |name, dir|
30
+ [ name, "#{File.dirname(Rake.application.rakefile_location)}/#{dir}" ]
31
+ end.select { |name, dir| File.directory?(dir) }
32
+
33
+ desc "Report code statistics (KLOCs, etc) from the application or engine"
34
+ task :stats do
35
+ require "rails/code_statistics"
36
+ CodeStatistics.new(*STATS_DIRECTORIES).to_s
37
+ end