jets 3.1.0 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (641) hide show
  1. checksums.yaml +4 -4
  2. data/.github/FUNDING.yml +1 -0
  3. data/.gitignore +5 -1
  4. data/CHANGELOG.md +141 -0
  5. data/Gemfile +1 -5
  6. data/LICENSE.txt +1 -1
  7. data/README.md +21 -43
  8. data/Rakefile +3 -3
  9. data/backers.md +0 -5
  10. data/engines/internal/app/controllers/jets/application_controller.rb +28 -0
  11. data/engines/internal/app/controllers/jets/bare_controller.rb +6 -0
  12. data/engines/internal/app/controllers/jets/health_controller.rb +55 -0
  13. data/engines/internal/app/controllers/jets/info_controller.rb +45 -0
  14. data/{lib/jets → engines}/internal/app/controllers/jets/mailers_controller.rb +12 -14
  15. data/{lib/jets → engines}/internal/app/controllers/jets/mount_controller.rb +6 -10
  16. data/{lib/jets → engines}/internal/app/controllers/jets/public_controller.rb +6 -2
  17. data/engines/internal/app/controllers/jets/welcome_controller.rb +9 -0
  18. data/engines/internal/app/functions/jets/base_path.rb +109 -0
  19. data/engines/internal/app/functions/jets/base_path_mapping.rb +191 -0
  20. data/engines/internal/app/jobs/jets/preheat_job.rb +67 -0
  21. data/engines/internal/app/views/jets/info/properties.html.erb +1 -0
  22. data/engines/internal/app/views/jets/info/routes.html.erb +10 -0
  23. data/{lib/jets → engines}/internal/app/views/jets/mailers/email.html.erb +37 -17
  24. data/engines/internal/app/views/jets/mailers/index.html.erb +8 -0
  25. data/engines/internal/app/views/jets/mailers/mailer.html.erb +6 -0
  26. data/{lib/jets/commands/templates/skeleton/public/index.html.tt → engines/internal/app/views/jets/welcome/index.html.erb} +8 -4
  27. data/engines/internal/app/views/layouts/application.html.erb +51 -0
  28. data/engines/internal/lib/internal/actiondispatch.rb +39 -0
  29. data/engines/internal/lib/internal/actionmailer.rb +51 -0
  30. data/engines/internal/lib/internal/actionview.rb +152 -0
  31. data/engines/internal/lib/internal/activerecord.rb +37 -0
  32. data/engines/internal/lib/internal/activesupport.rb +47 -0
  33. data/engines/internal/lib/internal/engine.rb +13 -0
  34. data/engines/internal/lib/internal/i18n_engine.rb +19 -0
  35. data/engines/internal/lib/internal/jets_controller.rb +46 -0
  36. data/engines/internal/lib/internal/overrides/debug_exceptions.rb +40 -0
  37. data/engines/internal/lib/internal/templates/rescues/_trace.html.erb +62 -0
  38. data/engines/internal/lib/internal/templates/rescues/_trace.text.erb +9 -0
  39. data/engines/internal/lib/internal/turbines/asset_tag_helper.rb +70 -0
  40. data/engines/internal/lib/internal/turbines/helpers.rb +18 -0
  41. data/engines/internal/lib/internal/turbines/routes_helpers.rb +42 -0
  42. data/exe/jets +1 -10
  43. data/jets.gemspec +16 -13
  44. data/lib/jets/app_loader.rb +77 -0
  45. data/lib/jets/application/bootstrap.rb +100 -0
  46. data/lib/jets/application/configuration/defaults.rb +256 -0
  47. data/lib/jets/application/configuration.rb +494 -0
  48. data/lib/jets/application/default_middleware_stack.rb +140 -0
  49. data/lib/jets/application/dummy_erb_compiler.rb +18 -0
  50. data/lib/jets/application/finisher.rb +266 -0
  51. data/lib/jets/application/routes_reloader.rb +80 -0
  52. data/lib/jets/application.rb +515 -199
  53. data/lib/jets/authorizer/base.rb +1 -0
  54. data/lib/jets/authorizer/dsl.rb +15 -11
  55. data/lib/jets/authorizer/helpers/iam_helper.rb +13 -11
  56. data/lib/jets/autoloaders/gem.rb +70 -0
  57. data/lib/jets/autoloaders/inflector.rb +21 -0
  58. data/lib/jets/autoloaders.rb +38 -101
  59. data/lib/jets/aws_info.rb +2 -2
  60. data/lib/jets/aws_services/stack_status.rb +1 -1
  61. data/lib/jets/aws_services.rb +8 -0
  62. data/lib/jets/backtrace_cleaner.rb +27 -0
  63. data/lib/jets/booter.rb +30 -118
  64. data/lib/jets/builders/code_builder.rb +64 -122
  65. data/lib/jets/builders/code_size.rb +1 -0
  66. data/lib/jets/builders/gem_replacer.rb +6 -12
  67. data/lib/jets/builders/handler_generator.rb +34 -14
  68. data/lib/jets/builders/lambda_layer.rb +2 -7
  69. data/lib/jets/builders/purger.rb +1 -1
  70. data/lib/jets/builders/rack_packager.rb +1 -1
  71. data/lib/jets/builders/ruby_packager.rb +54 -10
  72. data/lib/jets/builders/shim_vars/app.rb +10 -6
  73. data/lib/jets/builders/templates/handlers/one_lambda_for_all_controllers.rb +33 -0
  74. data/lib/jets/builders/templates/handlers/one_lambda_per_controller.rb +20 -0
  75. data/lib/jets/builders/templates/{handler.rb → handlers/one_lambda_per_method.rb} +6 -0
  76. data/lib/jets/bundle.rb +2 -9
  77. data/lib/jets/cfn/base.rb +82 -0
  78. data/lib/jets/cfn/builder/api/base.rb +12 -0
  79. data/lib/jets/cfn/{builders/api_deployment_builder.rb → builder/api/deployment.rb} +11 -21
  80. data/lib/jets/cfn/builder/api/gateway.rb +104 -0
  81. data/lib/jets/cfn/builder/api/mapping.rb +54 -0
  82. data/lib/jets/cfn/builder/api/methods.rb +72 -0
  83. data/lib/jets/cfn/builder/api/paged.rb +30 -0
  84. data/lib/jets/cfn/builder/api/pages/base.rb +105 -0
  85. data/lib/jets/cfn/builder/api/pages/methods.rb +17 -0
  86. data/lib/jets/cfn/builder/api/pages/page.rb +19 -0
  87. data/lib/jets/cfn/builder/api/pages/resources.rb +21 -0
  88. data/lib/jets/cfn/builder/api/resources.rb +40 -0
  89. data/lib/jets/cfn/{builders/authorizer_builder.rb → builder/authorizer.rb} +16 -19
  90. data/lib/jets/cfn/builder/controller.rb +28 -0
  91. data/lib/jets/cfn/builder/function.rb +9 -0
  92. data/lib/jets/cfn/builder/interface.rb +146 -0
  93. data/lib/jets/cfn/builder/job.rb +10 -0
  94. data/lib/jets/cfn/builder/nested.rb +130 -0
  95. data/lib/jets/cfn/builder/one_controller.rb +53 -0
  96. data/lib/jets/cfn/{builders/parent_builder → builder/parent}/stagger.rb +1 -1
  97. data/lib/jets/cfn/builder/parent.rb +149 -0
  98. data/lib/jets/cfn/builder/post_process.rb +25 -0
  99. data/lib/jets/cfn/{builders/rule_builder.rb → builder/rule.rb} +4 -8
  100. data/lib/jets/cfn/{builders/shared_builder.rb → builder/shared.rb} +5 -4
  101. data/lib/jets/cfn/{builders → builder}/util/source.rb +1 -1
  102. data/lib/jets/{commands/build.rb → cfn/builder.rb} +50 -78
  103. data/lib/jets/cfn/deployment.rb +45 -0
  104. data/lib/jets/cfn/download.rb +39 -0
  105. data/lib/jets/cfn/params/api/base.rb +39 -0
  106. data/lib/jets/cfn/params/api/cors.rb +10 -0
  107. data/lib/jets/cfn/params/api/methods.rb +69 -0
  108. data/lib/jets/cfn/params/api/resources.rb +28 -0
  109. data/lib/jets/{resource/child_stack/common_parameters.rb → cfn/params/common.rb} +3 -3
  110. data/lib/jets/{resource → cfn/resource}/api_gateway/authorizer.rb +21 -21
  111. data/lib/jets/cfn/resource/api_gateway/base_path/function.rb +57 -0
  112. data/lib/jets/{resource → cfn/resource}/api_gateway/base_path/mapping.rb +13 -12
  113. data/lib/jets/cfn/resource/api_gateway/base_path/role.rb +70 -0
  114. data/lib/jets/{resource → cfn/resource}/api_gateway/deployment.rb +13 -20
  115. data/lib/jets/{resource → cfn/resource}/api_gateway/domain_name.rb +11 -11
  116. data/lib/jets/{resource → cfn/resource}/api_gateway/method/authorization.rb +1 -1
  117. data/lib/jets/cfn/resource/api_gateway/method.rb +92 -0
  118. data/lib/jets/{resource → cfn/resource}/api_gateway/resource.rb +14 -10
  119. data/lib/jets/cfn/resource/api_gateway/resource_id.rb +25 -0
  120. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/change_detection.rb +1 -1
  121. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/logical_id/message.rb +14 -4
  122. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/logical_id.rb +2 -2
  123. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/base.rb +15 -41
  124. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/media_types.rb +3 -3
  125. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/page.rb +6 -6
  126. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/to.rb +8 -3
  127. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/variable.rb +2 -2
  128. data/lib/jets/cfn/resource/api_gateway/rest_api/routes/change.rb +27 -0
  129. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/collision/variable_exception.rb +1 -1
  130. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/collision.rb +1 -1
  131. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes.rb +1 -1
  132. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api.rb +22 -12
  133. data/lib/jets/{resource → cfn/resource}/associated.rb +1 -1
  134. data/lib/jets/{resource → cfn/resource}/config/config_rule.rb +18 -18
  135. data/lib/jets/{resource → cfn/resource}/config/managed_rule.rb +5 -5
  136. data/lib/jets/{resource → cfn/resource}/events/rule.rb +10 -10
  137. data/lib/jets/{resource → cfn/resource}/iam/application_role.rb +4 -4
  138. data/lib/jets/cfn/resource/iam/base_role_definition.rb +56 -0
  139. data/lib/jets/{resource → cfn/resource}/iam/class_role.rb +5 -5
  140. data/lib/jets/{resource → cfn/resource}/iam/function_role.rb +6 -6
  141. data/lib/jets/{resource → cfn/resource}/iam/managed_policy.rb +1 -1
  142. data/lib/jets/cfn/resource/iam/policy.rb +31 -0
  143. data/lib/jets/{resource → cfn/resource}/iam/policy_document.rb +10 -9
  144. data/lib/jets/{resource → cfn/resource}/iot/topic_rule.rb +10 -10
  145. data/lib/jets/{resource → cfn/resource}/lambda/event_source_mapping.rb +9 -9
  146. data/lib/jets/cfn/resource/lambda/function/controller.rb +21 -0
  147. data/lib/jets/{resource → cfn/resource}/lambda/function/environment.rb +9 -7
  148. data/lib/jets/cfn/resource/lambda/function.rb +266 -0
  149. data/lib/jets/{resource → cfn/resource}/lambda/gem_layer.rb +2 -2
  150. data/lib/jets/{resource → cfn/resource}/lambda/layer_version.rb +10 -10
  151. data/lib/jets/cfn/resource/lambda/permission.rb +51 -0
  152. data/lib/jets/cfn/resource/logs/subscription_filter.rb +31 -0
  153. data/lib/jets/cfn/resource/nested/api/base.rb +4 -0
  154. data/lib/jets/cfn/resource/nested/api/deployment.rb +53 -0
  155. data/lib/jets/cfn/resource/nested/api/gateway.rb +15 -0
  156. data/lib/jets/cfn/resource/nested/api/mapping.rb +33 -0
  157. data/lib/jets/cfn/resource/nested/api/methods.rb +30 -0
  158. data/lib/jets/cfn/resource/nested/api/page.rb +8 -0
  159. data/lib/jets/cfn/resource/nested/api/resources.rb +22 -0
  160. data/lib/jets/{resource/child_stack → cfn/resource/nested}/app_class.rb +15 -48
  161. data/lib/jets/{resource/child_stack → cfn/resource/nested}/authorizer.rb +8 -14
  162. data/lib/jets/cfn/resource/nested/base.rb +38 -0
  163. data/lib/jets/cfn/resource/nested/one_controller.rb +48 -0
  164. data/lib/jets/{resource/child_stack → cfn/resource/nested}/shared.rb +10 -16
  165. data/lib/jets/cfn/resource/one/function.rb +66 -0
  166. data/lib/jets/cfn/resource/one/permission.rb +17 -0
  167. data/lib/jets/{resource → cfn/resource}/replacer.rb +26 -27
  168. data/lib/jets/{resource → cfn/resource}/route53/record_set.rb +18 -18
  169. data/lib/jets/{resource → cfn/resource}/s3/bucket.rb +4 -4
  170. data/lib/jets/cfn/resource/s3/jets_bucket.rb +68 -0
  171. data/lib/jets/{resource → cfn/resource}/sns/subscription.rb +8 -8
  172. data/lib/jets/{resource → cfn/resource}/sns/topic.rb +10 -10
  173. data/lib/jets/{resource → cfn/resource}/sns/topic_policy.rb +13 -13
  174. data/lib/jets/{resource → cfn/resource}/sqs/queue.rb +5 -5
  175. data/lib/jets/{resource → cfn/resource}/standardizer.rb +8 -9
  176. data/lib/jets/cfn/resource.rb +8 -0
  177. data/lib/jets/cfn/ship.rb +30 -16
  178. data/lib/jets/cfn/status.rb +1 -1
  179. data/lib/jets/cfn/template.rb +89 -0
  180. data/lib/jets/cfn/upload.rb +26 -23
  181. data/lib/jets/cli.rb +28 -203
  182. data/lib/jets/command/actions.rb +49 -0
  183. data/lib/jets/command/api_helpers.rb +41 -0
  184. data/lib/jets/command/aws_helpers.rb +26 -0
  185. data/lib/jets/command/base.rb +204 -0
  186. data/lib/jets/command/behavior.rb +83 -0
  187. data/lib/jets/command/environment_argument.rb +42 -0
  188. data/lib/jets/command/help/call.md +48 -0
  189. data/lib/jets/{commands → command}/help/deploy.md +1 -1
  190. data/lib/jets/command/help/logs.md +21 -0
  191. data/lib/jets/{commands → command}/help/new.md +3 -4
  192. data/lib/jets/command/help/projects.md +6 -0
  193. data/lib/jets/command/help/releases.md +37 -0
  194. data/lib/jets/command/help/rollback.md +5 -0
  195. data/lib/jets/command/help/routes.md +15 -0
  196. data/lib/jets/command/help/runner.md +40 -0
  197. data/lib/jets/command/help/stacks.md +6 -0
  198. data/lib/jets/command/help.rb +17 -0
  199. data/lib/jets/command/helpers/editor.rb +35 -0
  200. data/lib/jets/command.rb +133 -0
  201. data/lib/jets/commands/application/application_command.rb +40 -0
  202. data/lib/jets/commands/build/build_command.rb +33 -0
  203. data/lib/jets/commands/call/anonymous_guesser.rb +1 -1
  204. data/lib/jets/commands/call/autoload_guesser.rb +2 -2
  205. data/lib/jets/commands/call/base_guesser.rb +5 -5
  206. data/lib/jets/commands/call/call_command.rb +27 -0
  207. data/lib/jets/commands/call/caller.rb +184 -0
  208. data/lib/jets/commands/call/guesser.rb +1 -1
  209. data/lib/jets/commands/clean/base.rb +1 -1
  210. data/lib/jets/commands/clean/build.rb +1 -1
  211. data/lib/jets/commands/clean/clean_command.rb +15 -0
  212. data/lib/jets/commands/clean/log.rb +4 -4
  213. data/lib/jets/commands/configure/configure_command.rb +9 -0
  214. data/lib/jets/commands/console/console_command.rb +38 -0
  215. data/lib/jets/commands/credentials/USAGE +103 -0
  216. data/lib/jets/commands/credentials/credentials_command/diffing.rb +51 -0
  217. data/lib/jets/commands/credentials/credentials_command.rb +139 -0
  218. data/lib/jets/commands/db/system/change/change_command.rb +24 -0
  219. data/lib/jets/commands/dbconsole/dbconsole_command.rb +184 -0
  220. data/lib/jets/commands/degenerate/degenerate_command.rb +21 -0
  221. data/lib/jets/commands/delete/delete_command.rb +155 -0
  222. data/lib/jets/commands/{deploy.rb → deploy/deploy_command.rb} +30 -49
  223. data/lib/jets/commands/dev/dev_command.rb +19 -0
  224. data/lib/jets/commands/{dotenv.rb → dotenv/dotenv_command.rb} +2 -2
  225. data/lib/jets/commands/encrypted/USAGE +46 -0
  226. data/lib/jets/commands/encrypted/encrypted_command.rb +87 -0
  227. data/lib/jets/commands/gems/gems_command.rb +14 -0
  228. data/lib/jets/commands/generate/generate_command.rb +95 -0
  229. data/lib/jets/commands/help/USAGE +20 -0
  230. data/lib/jets/commands/help/help_command.rb +15 -0
  231. data/lib/jets/commands/initializers/initializers_command.rb +19 -0
  232. data/lib/jets/commands/logs/logs_command.rb +45 -0
  233. data/lib/jets/commands/new/new_command.rb +19 -0
  234. data/lib/jets/commands/notes/notes_command.rb +30 -0
  235. data/lib/jets/commands/plugin/plugin_command.rb +45 -0
  236. data/lib/jets/commands/projects/projects_command.rb +30 -0
  237. data/lib/jets/commands/rake/rake_command.rb +59 -0
  238. data/lib/jets/commands/releases/releases_command.rb +72 -0
  239. data/lib/jets/commands/rollback/rollback_command.rb +41 -0
  240. data/lib/jets/commands/routes/routes_command.rb +19 -0
  241. data/lib/jets/commands/runner/runner_command.rb +60 -0
  242. data/lib/jets/commands/server/server_command.rb +291 -0
  243. data/lib/jets/commands/stacks/stacks_command.rb +39 -0
  244. data/lib/jets/commands/status/status_command.rb +9 -0
  245. data/lib/jets/commands/url/url_command.rb +92 -0
  246. data/lib/jets/commands/version/version_command.rb +11 -0
  247. data/lib/jets/commands.rb +17 -0
  248. data/lib/jets/configuration.rb +166 -0
  249. data/lib/jets/controller/base.rb +105 -183
  250. data/lib/jets/controller/compat/abstract_controller/base.rb +126 -0
  251. data/lib/jets/controller/compat/action_controller/metal.rb +99 -0
  252. data/lib/jets/controller/compat/caching.rb +13 -0
  253. data/lib/jets/controller/compat/future.rb +13 -0
  254. data/lib/jets/controller/compat/route_set.rb +47 -0
  255. data/lib/jets/controller/decorate/apigw_stage.rb +39 -0
  256. data/lib/jets/controller/{authorization.rb → decorate/authorization.rb} +1 -1
  257. data/lib/jets/controller/decorate/logging.rb +90 -0
  258. data/lib/jets/controller/decorate/redirecting.rb +16 -0
  259. data/lib/jets/controller/decorate/url_for.rb +10 -0
  260. data/lib/jets/controller/{rack/adapter.rb → handler/apigw.rb} +36 -37
  261. data/lib/jets/controller/handler.rb +41 -0
  262. data/lib/jets/controller/middleware/main.rb +16 -8
  263. data/lib/jets/controller/middleware/{local/api_gateway.rb → mimic/apigw.rb} +41 -4
  264. data/lib/jets/controller/middleware/mimic/lambda_context.rb +44 -0
  265. data/lib/jets/controller/middleware/{local.rb → mimic.rb} +36 -51
  266. data/lib/jets/controller/rack_adapter/action.rb +35 -0
  267. data/lib/jets/controller/{rack → rack_adapter}/env.rb +39 -18
  268. data/lib/jets/controller/request/compat/params.rb +144 -0
  269. data/lib/jets/controller/request/compat/request.rb +125 -0
  270. data/lib/jets/controller/request.rb +35 -18
  271. data/lib/jets/controller/response/compat/response.rb +67 -0
  272. data/lib/jets/controller/response.rb +91 -8
  273. data/lib/jets/core.rb +153 -50
  274. data/lib/jets/core_ext/file.rb +9 -0
  275. data/lib/jets/core_ext/kernel.rb +2 -2
  276. data/lib/jets/core_ext/symbol.rb +5 -0
  277. data/lib/jets/core_ext.rb +4 -0
  278. data/lib/jets/dev_caching.rb +44 -0
  279. data/lib/jets/dotenv/ssm.rb +5 -2
  280. data/lib/jets/dotenv.rb +4 -3
  281. data/lib/jets/engine/configuration.rb +96 -0
  282. data/lib/jets/engine/turbines.rb +23 -0
  283. data/lib/jets/engine.rb +380 -0
  284. data/lib/jets/erb.rb +1 -1
  285. data/lib/jets/exception_reporting.rb +43 -0
  286. data/lib/jets/generators/job/job_generator.rb +41 -0
  287. data/lib/jets/generators/job/templates/event_types/dynamodb.rb.tt +8 -0
  288. data/lib/jets/generators/job/templates/event_types/iot.rb.tt +8 -0
  289. data/lib/jets/generators/job/templates/event_types/kinesis.rb.tt +9 -0
  290. data/lib/jets/generators/job/templates/event_types/log.rb.tt +9 -0
  291. data/lib/jets/generators/job/templates/event_types/rule.rb.tt +23 -0
  292. data/lib/jets/generators/job/templates/event_types/s3.rb.tt +11 -0
  293. data/lib/jets/{generator/templates/active_job/job/templates/job.rb.tt → generators/job/templates/event_types/scheduled.rb.tt} +3 -3
  294. data/lib/jets/generators/job/templates/event_types/sns.rb.tt +9 -0
  295. data/lib/jets/generators/job/templates/event_types/sqs.rb.tt +9 -0
  296. data/lib/jets/generators/overrides/app/USAGE +38 -0
  297. data/lib/jets/generators/overrides/app/app_generator.rb +148 -0
  298. data/lib/jets/generators/overrides/app/helpers.rb +139 -0
  299. data/lib/jets/generators/overrides/app/templates/.env +10 -0
  300. data/lib/jets/{commands/templates/skeleton/.gitignore → generators/overrides/app/templates/.gitignore.tt} +2 -1
  301. data/lib/jets/generators/overrides/app/templates/Gemfile.tt +25 -0
  302. data/lib/jets/generators/overrides/app/templates/Rakefile +2 -0
  303. data/lib/jets/generators/overrides/app/templates/app/assets/config/manifest.js +3 -0
  304. data/lib/jets/generators/overrides/app/templates/app/assets/stylesheets/application.css +15 -0
  305. data/lib/jets/generators/overrides/app/templates/app/javascript/application.js +5 -0
  306. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/app/models/application_record.rb +1 -1
  307. data/lib/jets/generators/overrides/app/templates/app/views/layouts/application.html.erb.tt +30 -0
  308. data/lib/jets/generators/overrides/app/templates/bin/jets +3 -0
  309. data/lib/jets/generators/overrides/app/templates/config/application.rb.tt +15 -0
  310. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/config/database.yml.tt +1 -1
  311. data/lib/jets/generators/overrides/app/templates/config/environments/development.rb.tt +29 -0
  312. data/lib/jets/generators/overrides/app/templates/config/environments/production.rb.tt +19 -0
  313. data/lib/jets/generators/overrides/app/templates/config/environments/test.rb.tt +23 -0
  314. data/lib/jets/generators/overrides/app/templates/config/initializers/content_security_policy.rb +31 -0
  315. data/lib/jets/generators/overrides/app/templates/config/initializers/filter_parameter_logging.rb +8 -0
  316. data/lib/jets/generators/overrides/app/templates/config/initializers/permissions_policy.rb +11 -0
  317. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/config/routes.rb +5 -1
  318. data/lib/jets/generators/overrides/app/templates/db/.gitkeep +0 -0
  319. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/public/404.html +6 -6
  320. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/public/422.html +6 -6
  321. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/public/500.html +6 -6
  322. data/lib/jets/generators/overrides/templates/erb/scaffold/index.html.erb +22 -0
  323. data/lib/jets/generators/overrides/templates/erb/scaffold/partial.html.erb +8 -0
  324. data/lib/jets/{generator/templates/rails/scaffold_controller/api_controller.rb → generators/overrides/templates/rails/scaffold_controller/api_controller.rb.tt} +5 -9
  325. data/lib/jets/generators/overrides/templates/rails/scaffold_controller/controller.rb.tt +67 -0
  326. data/lib/jets/generators.rb +112 -0
  327. data/lib/jets/inflections.rb +1 -1
  328. data/lib/jets/info.rb +116 -0
  329. data/lib/jets/initializable.rb +95 -0
  330. data/lib/jets/job/base.rb +5 -2
  331. data/lib/jets/job/dsl/dynamodb_event.rb +19 -9
  332. data/lib/jets/job/dsl/event_source_mapping.rb +1 -1
  333. data/lib/jets/job/dsl/iot_event.rb +6 -6
  334. data/lib/jets/job/dsl/kinesis_event.rb +5 -5
  335. data/lib/jets/job/dsl/log_event.rb +2 -2
  336. data/lib/jets/job/dsl/rule_event.rb +7 -4
  337. data/lib/jets/job/dsl/s3_event.rb +1 -1
  338. data/lib/jets/job/dsl/sns_event.rb +6 -6
  339. data/lib/jets/job/dsl/sqs_event.rb +11 -11
  340. data/lib/jets/job/helpers/sns_event_helper.rb +8 -0
  341. data/lib/jets/job/helpers/sqs_event_helper.rb +8 -0
  342. data/lib/jets/klass.rb +5 -6
  343. data/lib/jets/lambda/definition.rb +118 -0
  344. data/lib/jets/lambda/dsl/warnings.rb +57 -0
  345. data/lib/jets/lambda/dsl.rb +73 -54
  346. data/lib/jets/lambda/function.rb +3 -3
  347. data/lib/jets/lambda/function_constructor.rb +6 -6
  348. data/lib/jets/lambda/functions.rb +36 -1
  349. data/lib/jets/mega/hash_converter.rb +2 -2
  350. data/lib/jets/mega/request/source.rb +1 -2
  351. data/lib/jets/mega/request.rb +4 -4
  352. data/lib/jets/names.rb +79 -0
  353. data/lib/jets/overrides/dummy/rails.rb +11 -0
  354. data/lib/jets/overrides/lambda/marshaller.rb +10 -0
  355. data/lib/jets/overrides/puma.rb +10 -0
  356. data/lib/jets/paths.rb +243 -0
  357. data/lib/jets/{poly_fun → poly}/base_executor.rb +13 -13
  358. data/lib/jets/{poly_fun → poly}/lambda_executor.rb +2 -2
  359. data/lib/jets/{poly_fun → poly}/node_error.rb +1 -1
  360. data/lib/jets/{poly_fun → poly}/node_executor.rb +4 -4
  361. data/lib/jets/{poly_fun → poly}/python_error.rb +1 -1
  362. data/lib/jets/{poly_fun → poly}/python_executor.rb +2 -2
  363. data/lib/jets/{poly_fun.rb → poly.rb} +12 -12
  364. data/lib/jets/preheat.rb +26 -33
  365. data/lib/jets/processors/deducer.rb +2 -2
  366. data/lib/jets/processors/main_processor.rb +6 -13
  367. data/lib/jets/rack/logger.rb +77 -0
  368. data/lib/jets/router/compat/route_set.rb +177 -0
  369. data/lib/jets/router/dsl/mount.rb +40 -6
  370. data/lib/jets/router/dsl.rb +125 -105
  371. data/lib/jets/router/engine_mount.rb +36 -0
  372. data/lib/jets/router/help.rb +130 -0
  373. data/lib/jets/router/helpers/named_routes/add_full_url.rb +13 -0
  374. data/lib/jets/router/helpers/named_routes/generated.rb +197 -0
  375. data/lib/jets/router/helpers/named_routes/proxy.rb +66 -0
  376. data/lib/jets/router/matcher.rb +140 -17
  377. data/lib/jets/router/resources/options.rb +6 -4
  378. data/lib/jets/router/route/after_initialize.rb +64 -0
  379. data/lib/jets/router/route/as.rb +93 -0
  380. data/lib/jets/router/route/authorizer.rb +1 -0
  381. data/lib/jets/router/route/compat.rb +45 -0
  382. data/lib/jets/router/route/info.rb +74 -0
  383. data/lib/jets/router/route/node.rb +137 -0
  384. data/lib/jets/router/route/path.rb +93 -0
  385. data/lib/jets/router/route.rb +109 -90
  386. data/lib/jets/router/route_set.rb +214 -0
  387. data/lib/jets/router/scope.rb +204 -69
  388. data/lib/jets/router/state.rb +67 -0
  389. data/lib/jets/router/util.rb +1 -31
  390. data/lib/jets/router.rb +64 -150
  391. data/lib/jets/ruby_version_check.rb +15 -0
  392. data/lib/jets/rule/base.rb +1 -0
  393. data/lib/jets/rule/dsl.rb +7 -7
  394. data/lib/jets/secrets.rb +110 -0
  395. data/lib/jets/spec_helpers/controllers/request.rb +22 -16
  396. data/lib/jets/spec_helpers/controllers.rb +32 -24
  397. data/lib/jets/spec_helpers.rb +0 -6
  398. data/lib/jets/stack/builder.rb +3 -2
  399. data/lib/jets/stack/definition.rb +1 -4
  400. data/lib/jets/stack/function.rb +2 -2
  401. data/lib/jets/stack/main/dsl/cloudwatch.rb +4 -4
  402. data/lib/jets/stack/main/dsl/kinesis.rb +2 -2
  403. data/lib/jets/stack/main/dsl/lambda.rb +26 -19
  404. data/lib/jets/stack/main/dsl/sqs.rb +2 -2
  405. data/lib/jets/stack/output/lookup.rb +1 -1
  406. data/lib/jets/stack/output.rb +2 -2
  407. data/lib/jets/stack/parameter.rb +2 -2
  408. data/lib/jets/stack/resource.rb +3 -3
  409. data/lib/jets/stack/s3_event.rb +51 -37
  410. data/lib/jets/stack.rb +1 -1
  411. data/lib/jets/tasks/engine.rake +85 -0
  412. data/lib/jets/tasks/framework.rake +66 -0
  413. data/lib/jets/tasks/log.rake +41 -0
  414. data/lib/jets/tasks/middleware.rake +9 -0
  415. data/lib/jets/tasks/misc.rake +81 -0
  416. data/lib/jets/tasks/statistics.rake +37 -0
  417. data/lib/jets/tasks/tmp.rake +51 -0
  418. data/lib/jets/tasks/yarn.rake +29 -0
  419. data/lib/jets/tasks/zeitwerk.rake +61 -0
  420. data/lib/jets/tasks.rb +18 -0
  421. data/lib/jets/tmp_loader.rb +1 -1
  422. data/lib/jets/turbine/configurable.rb +36 -0
  423. data/lib/jets/turbine/configuration.rb +101 -0
  424. data/lib/jets/turbine.rb +164 -20
  425. data/lib/jets/util/camelize.rb +24 -0
  426. data/lib/jets/util/yamler.rb +16 -0
  427. data/lib/jets/version.rb +1 -1
  428. data/lib/jets.rb +8 -14
  429. metadata +444 -347
  430. data/.python-version +0 -1
  431. data/.ruby-version +0 -1
  432. data/bin/release +0 -9
  433. data/lib/jets/application/defaults.rb +0 -200
  434. data/lib/jets/builders/reconfigure_rails/config/initializers/jets.rb +0 -16
  435. data/lib/jets/builders/reconfigure_rails.rb +0 -114
  436. data/lib/jets/cfn/builders/api_gateway_builder.rb +0 -123
  437. data/lib/jets/cfn/builders/api_resources_builder.rb +0 -44
  438. data/lib/jets/cfn/builders/base_child_builder.rb +0 -69
  439. data/lib/jets/cfn/builders/controller_builder.rb +0 -50
  440. data/lib/jets/cfn/builders/function_builder.rb +0 -14
  441. data/lib/jets/cfn/builders/interface.rb +0 -133
  442. data/lib/jets/cfn/builders/job_builder.rb +0 -14
  443. data/lib/jets/cfn/builders/parent_builder.rb +0 -130
  444. data/lib/jets/cfn/built_template.rb +0 -15
  445. data/lib/jets/cfn/template_source.rb +0 -61
  446. data/lib/jets/commands/base.rb +0 -145
  447. data/lib/jets/commands/call.rb +0 -182
  448. data/lib/jets/commands/clean.rb +0 -19
  449. data/lib/jets/commands/configure.rb +0 -51
  450. data/lib/jets/commands/console.rb +0 -12
  451. data/lib/jets/commands/db/environment-task.rake +0 -3
  452. data/lib/jets/commands/db/tasks/dummy/app.rb +0 -25
  453. data/lib/jets/commands/db/tasks/dummy/config.rb +0 -14
  454. data/lib/jets/commands/db/tasks.rb +0 -34
  455. data/lib/jets/commands/db.rb +0 -13
  456. data/lib/jets/commands/dbconsole.rb +0 -134
  457. data/lib/jets/commands/delete.rb +0 -136
  458. data/lib/jets/commands/dynamodb/migrate.rb +0 -9
  459. data/lib/jets/commands/dynamodb/migrator.rb +0 -36
  460. data/lib/jets/commands/dynamodb.rb +0 -19
  461. data/lib/jets/commands/gems.rb +0 -13
  462. data/lib/jets/commands/help/call.md +0 -69
  463. data/lib/jets/commands/help/dynamodb/generate.md +0 -52
  464. data/lib/jets/commands/help/dynamodb/migrate.md +0 -4
  465. data/lib/jets/commands/help/routes.md +0 -16
  466. data/lib/jets/commands/help/runner.md +0 -17
  467. data/lib/jets/commands/help.rb +0 -9
  468. data/lib/jets/commands/import/base.rb +0 -49
  469. data/lib/jets/commands/import/cheatsheet.rb +0 -35
  470. data/lib/jets/commands/import/rack.rb +0 -16
  471. data/lib/jets/commands/import/rails.rb +0 -74
  472. data/lib/jets/commands/import/sequence.rb +0 -90
  473. data/lib/jets/commands/import/templates/config/database.yml +0 -30
  474. data/lib/jets/commands/import/templates/submodules-cheatsheet.md +0 -89
  475. data/lib/jets/commands/import.rb +0 -12
  476. data/lib/jets/commands/main.rb +0 -166
  477. data/lib/jets/commands/markdown/creator.rb +0 -58
  478. data/lib/jets/commands/markdown/index.rb +0 -27
  479. data/lib/jets/commands/markdown/page.rb +0 -125
  480. data/lib/jets/commands/markdown/shell.rb +0 -11
  481. data/lib/jets/commands/new.rb +0 -173
  482. data/lib/jets/commands/rake_command.rb +0 -61
  483. data/lib/jets/commands/rake_tasks.rb +0 -50
  484. data/lib/jets/commands/runner.rb +0 -16
  485. data/lib/jets/commands/sequence.rb +0 -105
  486. data/lib/jets/commands/stack_info.rb +0 -30
  487. data/lib/jets/commands/templates/skeleton/.env.development.tt +0 -3
  488. data/lib/jets/commands/templates/skeleton/.env.test +0 -3
  489. data/lib/jets/commands/templates/skeleton/.env.tt +0 -3
  490. data/lib/jets/commands/templates/skeleton/.jetskeep +0 -1
  491. data/lib/jets/commands/templates/skeleton/Gemfile.tt +0 -40
  492. data/lib/jets/commands/templates/skeleton/Procfile +0 -7
  493. data/lib/jets/commands/templates/skeleton/Rakefile +0 -2
  494. data/lib/jets/commands/templates/skeleton/app/models/application_item.rb +0 -2
  495. data/lib/jets/commands/templates/skeleton/app/views/layouts/application.html.erb.tt +0 -26
  496. data/lib/jets/commands/templates/skeleton/config/application.rb.tt +0 -71
  497. data/lib/jets/commands/templates/skeleton/config/dynamodb.yml +0 -22
  498. data/lib/jets/commands/templates/skeleton/config/environments/development.rb +0 -7
  499. data/lib/jets/commands/templates/skeleton/config/environments/production.rb +0 -9
  500. data/lib/jets/commands/templates/skeleton/config/environments/test.rb +0 -7
  501. data/lib/jets/commands/templates/webpacker/app/javascript/packs/application.js.tt +0 -23
  502. data/lib/jets/commands/templates/webpacker/app/javascript/packs/theme.scss.tt +0 -24
  503. data/lib/jets/commands/upgrade/templates/bin/webpack +0 -19
  504. data/lib/jets/commands/upgrade/templates/bin/webpack-dev-server +0 -19
  505. data/lib/jets/commands/upgrade/version1.rb +0 -136
  506. data/lib/jets/commands/upgrade.rb +0 -105
  507. data/lib/jets/commands/url.rb +0 -69
  508. data/lib/jets/commands/webpacker_template.rb +0 -18
  509. data/lib/jets/controller/callbacks.rb +0 -73
  510. data/lib/jets/controller/cookies/jar.rb +0 -269
  511. data/lib/jets/controller/cookies.rb +0 -38
  512. data/lib/jets/controller/error/invalid_authenticity_token.rb +0 -6
  513. data/lib/jets/controller/error.rb +0 -4
  514. data/lib/jets/controller/forgery_protection.rb +0 -43
  515. data/lib/jets/controller/layout.rb +0 -17
  516. data/lib/jets/controller/middleware/cors.rb +0 -60
  517. data/lib/jets/controller/middleware/local/mimic_aws_call.rb +0 -38
  518. data/lib/jets/controller/middleware/local/route_matcher.rb +0 -22
  519. data/lib/jets/controller/middleware/reloader.rb +0 -15
  520. data/lib/jets/controller/parameters_filter.rb +0 -29
  521. data/lib/jets/controller/params.rb +0 -117
  522. data/lib/jets/controller/redirection.rb +0 -61
  523. data/lib/jets/controller/rendering/rack_renderer.rb +0 -267
  524. data/lib/jets/controller/rendering.rb +0 -96
  525. data/lib/jets/controller/stage.rb +0 -34
  526. data/lib/jets/controller.rb +0 -3
  527. data/lib/jets/db.rb +0 -15
  528. data/lib/jets/generator/templates/erb/controller/view.html.erb +0 -2
  529. data/lib/jets/generator/templates/erb/scaffold/index.html.erb +0 -29
  530. data/lib/jets/generator/templates/rails/controller/controller.rb +0 -13
  531. data/lib/jets/generator/templates/rails/helper/helper.rb +0 -4
  532. data/lib/jets/generator/templates/rails/scaffold_controller/controller.rb +0 -67
  533. data/lib/jets/generator.rb +0 -112
  534. data/lib/jets/internal/app/controllers/jets/bare_controller.rb +0 -16
  535. data/lib/jets/internal/app/controllers/jets/rack_controller.rb +0 -12
  536. data/lib/jets/internal/app/functions/jets/base_path.rb +0 -18
  537. data/lib/jets/internal/app/functions/jets/base_path_mapping.rb +0 -100
  538. data/lib/jets/internal/app/helpers/jets/mailers_helper.rb +0 -9
  539. data/lib/jets/internal/app/jobs/jets/preheat_job.rb +0 -70
  540. data/lib/jets/internal/app/views/jets/mailers/index.html.erb +0 -8
  541. data/lib/jets/internal/app/views/jets/mailers/mailer.html.erb +0 -6
  542. data/lib/jets/internal/turbines/jets/mailer.rb +0 -52
  543. data/lib/jets/lambda/task.rb +0 -111
  544. data/lib/jets/logger.rb +0 -21
  545. data/lib/jets/middleware/configurator.rb +0 -84
  546. data/lib/jets/middleware/default_stack.rb +0 -53
  547. data/lib/jets/middleware/layer.rb +0 -34
  548. data/lib/jets/middleware/stack.rb +0 -77
  549. data/lib/jets/middleware.rb +0 -33
  550. data/lib/jets/naming.rb +0 -63
  551. data/lib/jets/overrides/rails/action_controller.rb +0 -13
  552. data/lib/jets/overrides/rails/asset_tag_helper.rb +0 -114
  553. data/lib/jets/overrides/rails/common_methods.rb +0 -13
  554. data/lib/jets/overrides/rails/migration_checker.rb +0 -34
  555. data/lib/jets/overrides/rails/rendering_helper.rb +0 -27
  556. data/lib/jets/overrides/rails/url_helper.rb +0 -88
  557. data/lib/jets/overrides/rails.rb +0 -6
  558. data/lib/jets/rack_server.rb +0 -86
  559. data/lib/jets/resource/api_gateway/base_path/function.rb +0 -49
  560. data/lib/jets/resource/api_gateway/base_path/role.rb +0 -76
  561. data/lib/jets/resource/api_gateway/cors.rb +0 -61
  562. data/lib/jets/resource/api_gateway/method.rb +0 -102
  563. data/lib/jets/resource/api_gateway/rest_api/routes/change.rb +0 -16
  564. data/lib/jets/resource/base.rb +0 -28
  565. data/lib/jets/resource/child_stack/api_deployment.rb +0 -58
  566. data/lib/jets/resource/child_stack/api_gateway.rb +0 -23
  567. data/lib/jets/resource/child_stack/api_resource/page.rb +0 -20
  568. data/lib/jets/resource/child_stack/api_resource.rb +0 -54
  569. data/lib/jets/resource/child_stack/base.rb +0 -24
  570. data/lib/jets/resource/iam/base_role_definition.rb +0 -47
  571. data/lib/jets/resource/lambda/function.rb +0 -221
  572. data/lib/jets/resource/logs/subscription_filter.rb +0 -31
  573. data/lib/jets/resource/permission.rb +0 -45
  574. data/lib/jets/resource.rb +0 -71
  575. data/lib/jets/router/error.rb +0 -4
  576. data/lib/jets/router/finder.rb +0 -47
  577. data/lib/jets/router/helpers/core_helper.rb +0 -27
  578. data/lib/jets/router/helpers/named_routes_helper.rb +0 -8
  579. data/lib/jets/router/helpers.rb +0 -4
  580. data/lib/jets/router/method_creator/code.rb +0 -99
  581. data/lib/jets/router/method_creator/edit.rb +0 -12
  582. data/lib/jets/router/method_creator/generic.rb +0 -11
  583. data/lib/jets/router/method_creator/index.rb +0 -48
  584. data/lib/jets/router/method_creator/new.rb +0 -12
  585. data/lib/jets/router/method_creator/root.rb +0 -15
  586. data/lib/jets/router/method_creator/show.rb +0 -12
  587. data/lib/jets/router/method_creator.rb +0 -50
  588. data/lib/jets/turbo/database_yaml.rb +0 -41
  589. data/lib/jets/turbo/project/.gitignore +0 -12
  590. data/lib/jets/turbo/project/.jetskeep +0 -1
  591. data/lib/jets/turbo/project/Gemfile +0 -16
  592. data/lib/jets/turbo/project/Rakefile +0 -2
  593. data/lib/jets/turbo/project/app/controllers/application_controller.rb +0 -2
  594. data/lib/jets/turbo/project/app/helpers/application_helper.rb +0 -2
  595. data/lib/jets/turbo/project/app/jobs/application_job.rb +0 -4
  596. data/lib/jets/turbo/project/config/application.rb +0 -5
  597. data/lib/jets/turbo/project/config/routes.rb +0 -4
  598. data/lib/jets/turbo/project/config.ru +0 -5
  599. data/lib/jets/turbo/rails.rb +0 -127
  600. data/lib/jets/turbo/templates/config/database.yml +0 -30
  601. data/lib/jets/turbo.rb +0 -56
  602. data/readme/prerelease.md +0 -6
  603. data/readme/testing.md +0 -60
  604. /data/{lib/jets → engines}/internal/app/shared/functions/jets/s3_bucket_config.rb +0 -0
  605. /data/lib/jets/{commands → command}/help/build.md +0 -0
  606. /data/lib/jets/{commands → command}/help/clean/build.md +0 -0
  607. /data/lib/jets/{commands → command}/help/clean/log.md +0 -0
  608. /data/lib/jets/{commands → command}/help/console.md +0 -0
  609. /data/lib/jets/{commands → command}/help/db/generate.md +0 -0
  610. /data/lib/jets/{commands → command}/help/dbconsole.md +0 -0
  611. /data/lib/jets/{commands → command}/help/degenerate.md +0 -0
  612. /data/lib/jets/{commands → command}/help/delete.md +0 -0
  613. /data/lib/jets/{commands → command}/help/gems/check.md +0 -0
  614. /data/lib/jets/{commands → command}/help/generate.md +0 -0
  615. /data/lib/jets/{commands → command}/help/import/rack.md +0 -0
  616. /data/lib/jets/{commands → command}/help/import/rails.md +0 -0
  617. /data/lib/jets/{commands → command}/help/server.md +0 -0
  618. /data/lib/jets/{commands → command}/help/status.md +0 -0
  619. /data/lib/jets/{commands → command}/help/upgrade.md +0 -0
  620. /data/lib/jets/{commands → command}/help/url.md +0 -0
  621. /data/lib/jets/{generator/templates/active_job → generators}/job/templates/application_job.rb.tt +0 -0
  622. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/.rspec +0 -0
  623. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/README.md +0 -0
  624. /data/{.gitmodules → lib/jets/generators/overrides/app/templates/app/assets/images/.keep} +0 -0
  625. /data/lib/jets/{commands/templates/skeleton/db/.gitkeep → generators/overrides/app/templates/app/assets/javascripts/.keep} +0 -0
  626. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/app/controllers/application_controller.rb +0 -0
  627. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/app/helpers/application_helper.rb +0 -0
  628. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/app/jobs/application_job.rb +0 -0
  629. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/config.ru +0 -0
  630. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/public/favicon.ico +0 -0
  631. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/spec/controllers/posts_controller_spec.rb +0 -0
  632. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/spec/fixtures/payloads/posts-index.json +0 -0
  633. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/spec/fixtures/payloads/posts-show.json +0 -0
  634. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/spec/spec_helper.rb.tt +0 -0
  635. /data/lib/jets/{generator → generators/overrides}/templates/erb/scaffold/_form.html.erb +0 -0
  636. /data/lib/jets/{generator → generators/overrides}/templates/erb/scaffold/edit.html.erb +0 -0
  637. /data/lib/jets/{generator → generators/overrides}/templates/erb/scaffold/new.html.erb +0 -0
  638. /data/lib/jets/{generator → generators/overrides}/templates/erb/scaffold/show.html.erb +0 -0
  639. /data/lib/jets/{generator → generators/overrides}/templates/rails/assets/javascript.js +0 -0
  640. /data/lib/jets/{generator → generators/overrides}/templates/rails/assets/stylesheet.css +0 -0
  641. /data/lib/jets/{generator → generators/overrides}/templates/rails/scaffold/scaffold.css +0 -0
@@ -0,0 +1,177 @@
1
+ require "action_dispatch"
2
+ require "action_dispatch/routing/route_set"
3
+
4
+ module Jets::Router::Compat
5
+ # Related:
6
+ #
7
+ # Jets::Controller::Compat::ActionDispatch::Routing::UrlFor
8
+ # Jets::Controller::Request::Compat::RouteSet
9
+ # Jets::Router::Compat::RouteSet
10
+ #
11
+ # Compat::RouteSet makes the Jets::Router::RouteSet "compatible" with the Rails RouteSet.
12
+ # Importantly, it provides a custom url_for method that mimics the Rails url_for method.
13
+ #
14
+ module RouteSet
15
+ # Original:
16
+ # RESERVED_OPTIONS = [:host, :protocol, :port, :subdomain, :domain, :tld_length,
17
+ # :trailing_slash, :anchor, :params, :only_path, :script_name,
18
+ # :original_script_name, :relative_url_root]
19
+ # UNKNOWN = ->(options) { ActionDispatch::Http::URL.url_for(options) }
20
+ RESERVED_OPTIONS = ActionDispatch::Routing::RouteSet::RESERVED_OPTIONS
21
+ UNKNOWN = ActionDispatch::Routing::RouteSet::UNKNOWN
22
+
23
+ # This method is a version of the Rails RouteSet#url_for method.
24
+ # It only resolves simple routes for simple cases:
25
+ #
26
+ # when nil
27
+ # when Hash, ActionController::Parameters
28
+ #
29
+ # This is because ActionDispatch::Routing::UrlFor#url_for gets called before
30
+ # and then calls out to this method. Only have to account for 2 cases to
31
+ # mimic Jets behavior.
32
+ #
33
+ # Based on Jets ActionDispatch::Routing::RouteSet#url_for
34
+ def url_for(options, route_name = nil, url_strategy = UNKNOWN, method_name = nil, reserved = RESERVED_OPTIONS)
35
+ user = password = nil
36
+
37
+ if options[:user] && options[:password]
38
+ user = options.delete :user
39
+ password = options.delete :password
40
+ end
41
+
42
+ # save recall_controller for url_options when controller not specified by user
43
+ # IE: redirect_to action: :routes
44
+ recall_controller = options[:_recall][:controller]
45
+ recall = options.delete(:_recall) { {} }
46
+
47
+ original_script_name = options.delete(:original_script_name)
48
+ # script_name = find_script_name options (original)
49
+ script_name = options.delete(:script_name)
50
+
51
+ if original_script_name
52
+ script_name = original_script_name + script_name
53
+ end
54
+
55
+ path_options = options.dup
56
+ reserved.each { |ro| path_options.delete ro }
57
+ path_options[:controller] ||= recall_controller
58
+
59
+ route_with_params = generate(route_name, path_options, recall)
60
+ path = route_with_params.path(method_name)
61
+
62
+ if options[:trailing_slash] && !options[:format] && !path.end_with?("/")
63
+ path += "/"
64
+ end
65
+
66
+ params = route_with_params.params
67
+
68
+ if options.key? :params
69
+ if options[:params]&.respond_to?(:to_hash)
70
+ params.merge! options[:params]
71
+ else
72
+ params[:params] = options[:params]
73
+ end
74
+ end
75
+
76
+ options[:path] = path
77
+ options[:script_name] = script_name
78
+ options[:params] = params
79
+ options[:user] = user
80
+ options[:password] = password
81
+
82
+ url_strategy.call options
83
+ end
84
+
85
+ def generate(route_name, options, recall = {}, method_name = nil)
86
+ Generator.new(route_name, options, recall, self).generate
87
+ end
88
+ private :generate
89
+
90
+ # This is only used for Custom resolve polymporphic path support
91
+ # Stub out. Jets does not currently support this.
92
+ # interface method
93
+ def polymorphic_mappings
94
+ {}
95
+ end
96
+
97
+ # ActionView::Rendering ClassMethods build_view_context_class includes these modues. Something like this:
98
+ #
99
+ # def build_view_context_class(klass, supports_path, routes, helpers)
100
+ # ...
101
+ # if routes
102
+ # include routes.url_helpers(supports_path)
103
+ # include routes.mounted_helpers
104
+ # end
105
+ #
106
+ # interface method
107
+ # def url_helpers(supports_path=true)
108
+ # ActionDispatch::Routing::UrlFor
109
+ # end
110
+
111
+ # interface method
112
+ def mounted_helpers
113
+ Module.new
114
+ end
115
+
116
+ # Based on Rails ActionDispatch::Routing::RouteSet::Generator
117
+ class Generator
118
+ attr_reader :options, :recall, :set, :named_route
119
+
120
+ def initialize(named_route, options, recall, set)
121
+ @named_route = named_route
122
+ @options = options.dup
123
+ # Fix kaminari pagination links. Looks like Rails can handle nil params
124
+ @options.delete_if { |_, v| v.to_param.nil? }
125
+ @recall = recall
126
+ @set = set
127
+ end
128
+
129
+ # Generates a path from routes, returns a RouteWithParams or MissingRoute.
130
+ # MissingRoute will raise ActionController::UrlGenerationError.
131
+ def generate
132
+ RouteWithParams.new(named_route, recall, options)
133
+ end
134
+ end
135
+
136
+ class RouteWithParams
137
+ def initialize(route, parameterized_parts, params)
138
+ @route = route
139
+ @parameterized_parts = parameterized_parts
140
+ @params = params
141
+ end
142
+
143
+ def params
144
+ params = @params.dup
145
+ # So controller and action do not show up in the query string
146
+ params.delete(:controller)
147
+ params.delete(:action)
148
+ params
149
+ end
150
+
151
+ def path(_)
152
+ # Match with Jets router instead of Rails router
153
+ matcher = Jets::Router::Matcher.new
154
+ route = matcher.find_by_controller_action(@parameterized_parts[:controller], @parameterized_parts[:action])
155
+ if route
156
+ path = replace_placeholders(route.path, @parameterized_parts)
157
+ path.starts_with?('/') ? path : "/#{path}"
158
+ else
159
+ # Mimic Rails MissingRoute error
160
+ constraints = @params
161
+ missing_keys = []
162
+ unmatched_keys = []
163
+ routes = Jets.application.routes
164
+ name = nil
165
+ ActionDispatch::Journey::Formatter::MissingRoute.new(constraints, missing_keys, unmatched_keys, routes, name).path(name)
166
+ end
167
+ end
168
+
169
+ def replace_placeholders(path, params)
170
+ params.each do |key, value|
171
+ path = path.gsub(":#{key}", value.to_param)
172
+ end
173
+ path
174
+ end
175
+ end
176
+ end
177
+ end
@@ -1,13 +1,47 @@
1
1
  module Jets::Router::Dsl
2
2
  module Mount
3
+ # support these notations:
4
+ # mount Blorgh::Engine, at: "/blog"
5
+ # mount sprockets_env => "/assets"
6
+ # mount sprockets_env => "/assets", internal: true
7
+ def mount(*args)
8
+ options = args.extract_options!
9
+
10
+ if args.empty?
11
+ mount_option = options.find { |k,v| !k.is_a?(String) && !v.is_a?(Symbol) }
12
+ mount_class, at = mount_option[0], mount_option[1]
13
+ else
14
+ mount_class = args.first
15
+ at = options[:at]
16
+ end
17
+
18
+ at = "/#{at}" unless at.starts_with?("/")
19
+ mount_class_at(mount_class, options.merge(at: at))
20
+ end
21
+
3
22
  # The mounted class must be a Rack compatiable class
4
- def mount(klass, at:)
5
- options = {to: "jets/mount#call", mount_class: klass}
6
- at = at[1..-1] if at.starts_with?('/') # be more forgiving if / accidentally included
7
- at_wildcard = at.blank? ? "*path" : "#{at}/*path"
23
+ def mount_class_at(klass, options={})
24
+ if klass.is_a?(Class) && klass < Jets::Engine
25
+ mount_engine(klass, options)
26
+ else
27
+ # Handles mount like Sprockets::Environment.new
28
+ at = options.delete(:at)
29
+ at = at[1..-1] if at.starts_with?('/') # be more forgiving if / accidentally included
30
+ at_wildcard = at.blank? ? "*path" : "#{at}/*path"
31
+ options.merge!(to: "jets/mount#call", mount_class: klass)
32
+
33
+ any at, options
34
+ any at_wildcard, options
35
+ end
36
+ end
8
37
 
9
- any at, options
10
- any at_wildcard, options
38
+ mattr_accessor :mounted_engines
39
+ self.mounted_engines = {}
40
+ def mount_engine(klass, options={})
41
+ at = options.delete(:at)
42
+ options.merge!(engine: klass, path: at)
43
+ create_route(options)
44
+ @@mounted_engines[at] = klass
11
45
  end
12
46
  end
13
47
  end
@@ -1,35 +1,88 @@
1
- class Jets::Router
1
+ module Jets::Router
2
2
  module Dsl
3
3
  include Mount
4
4
 
5
5
  # Methods supported by API Gateway
6
6
  %w[any delete get head options patch post put].each do |method_name|
7
- define_method method_name do |path, options={}|
8
- create_route(options.merge(path: escape_path(path), method: __method__))
7
+ define_method method_name do |*args|
8
+ options = args.extract_options!
9
+ normalize_path_to_controller_map_option!(args, options)
10
+ options = options.clone
11
+ path_arg = args.first
12
+ if path_arg.is_a?(Symbol)
13
+ options[:action] = path_arg # Info#action uses
14
+ end
15
+ options[:path] ||= path_arg
16
+ options[:http_method] = __method__
17
+ create_route(options)
18
+ end
19
+ end
20
+
21
+ # Normally first args is a String that is the path
22
+ # get "/posts", to: "posts#index"
23
+ # But it can also be a Hash that maps the path to the controller/action
24
+ # get "/jets/info" => "jets/info#index"
25
+ # This logic normalize options to support both cases.
26
+ def normalize_path_to_controller_map_option!(args, options)
27
+ if !options[:to] && !args.first.is_a?(String) && !args.first.is_a?(Symbol)
28
+ map = options.find { |k,v| k.is_a?(String) }
29
+ path, to = map[0], map[1]
30
+ options[:to] = to
31
+ options[:path] = path
32
+ options.delete(path)
33
+ end
34
+ end
35
+
36
+ def match(path, options={})
37
+ via = options.delete(:via) || :any
38
+ Array(via).each do |http_method|
39
+ http_method = :any if via == :all
40
+ send http_method, path, options
9
41
  end
10
42
  end
11
43
 
44
+ def create_route(options)
45
+ one_apigw_method_for_all_routes_warning(options)
46
+ route = Route.new(options, @scope)
47
+ @routes << route
48
+ end
49
+
50
+ def constraints(constraints, &block)
51
+ scope(from: :constraints, constraints: constraints, &block)
52
+ end
53
+
54
+ def member(&block)
55
+ scope(from: :member, &block)
56
+ end
57
+
58
+ def collection(&block)
59
+ scope(from: :collection, &block)
60
+ end
61
+
62
+ def defaults(data={}, &block)
63
+ scope(from: :defaults, defaults: data, &block)
64
+ end
65
+
66
+ def path(path, &block)
67
+ scope(from: :path, path: path, &block)
68
+ end
69
+
12
70
  def namespace(ns, &block)
13
- scope(module: ns, prefix: ns, as: ns, from: :namespace, &block)
71
+ scope(from: :namespace, path: ns, module: ns, as: ns, &block)
14
72
  end
15
73
 
16
- def prefix(prefix, &block)
17
- scope(prefix: prefix, &block)
74
+ def shallow(&block)
75
+ scope(from: :shallow, &block)
18
76
  end
19
77
 
20
- # scope supports three options: module, prefix and as.
21
- # Jets vs Rails:
22
- # module - module
23
- # prefix - path
24
- # as - as
25
- def scope(args)
26
- # normalizes `scope(:admin)` as `scope(prefix: :admin)`
27
- options = case args
28
- when Hash
29
- args
30
- when String, Symbol
31
- { prefix: args }
32
- end
78
+ # Examples
79
+ # scope :admin
80
+ # scope path: :admin
81
+ # scope 'admin', as: 'admin'
82
+ def scope(*args)
83
+ options = args.extract_options!
84
+ path = args.first
85
+ options[:path] = path.to_s if path
33
86
 
34
87
  root_level = @scope.nil?
35
88
  @scope = root_level ? Scope.new(options) : @scope.new(options)
@@ -39,106 +92,73 @@ class Jets::Router
39
92
  end
40
93
 
41
94
  # resources macro expands to all the routes
42
- def resources(*items, **options)
43
- items.each do |item|
44
- scope_options = scope_options!(item, options)
45
- scope_options[:from] = :resources # flag for MethodCreator logic: to handle method_name_leaf and more
46
- scope(scope_options) do
47
- each_resources(item, options, block_given?)
95
+ def resources(*args)
96
+ options = args.extract_options!
97
+ resource_names = args
98
+ resource_names.each do |resource_name|
99
+ scope(options.merge(from: :resources, resource_name: resource_name)) do
100
+ each_resource(resource_name, options)
48
101
  yield if block_given?
49
102
  end
50
103
  end
51
104
  end
52
105
 
53
- def scope_options!(item, options)
54
- prefix = if options[:prefix]
55
- # prefix given from the resources macro get automatically prepended to the item name
56
- p = options.delete(:prefix)
57
- "#{p}/#{item}"
58
- else
59
- item
60
- end
61
-
62
- {
63
- as: options.delete(:as) || item, # delete as or it messes with create_route
64
- prefix: prefix,
65
- param: options[:param],
66
- # module: options.delete(:module) || item, # NOTE: resources does not automatically set module, but namespace does
67
- }
68
- end
69
-
70
- def each_resources(name, options={}, has_block=nil)
71
- o = Resources::Options.new(name, options)
72
- f = Resources::Filter.new(name, options)
73
- param = default_param(has_block, name, options)
74
-
75
- get name, o.build(:index) if f.yes?(:index)
76
- get "#{name}/new", o.build(:new) if f.yes?(:new) && !api_mode?
77
- get "#{name}/:#{param}", o.build(:show) if f.yes?(:show)
78
- post name, o.build(:create) if f.yes?(:create)
79
- get "#{name}/:#{param}/edit", o.build(:edit) if f.yes?(:edit) && !api_mode?
80
- put "#{name}/:#{param}", o.build(:update) if f.yes?(:update)
81
- post "#{name}/:#{param}", o.build(:update) if f.yes?(:update) # for binary uploads
82
- patch "#{name}/:#{param}", o.build(:update) if f.yes?(:update)
83
- delete "#{name}/:#{param}", o.build(:delete) if f.yes?(:delete)
84
- end
85
-
86
- def resource(*items, **options)
87
- items.each do |item|
88
- scope_options = scope_options!(item, options)
89
- scope_options[:from] = :resource # flag for MethodCreator logic: to handle method_name_leaf and more
90
- scope(scope_options) do
91
- each_resource(item, options, block_given?)
106
+ def resource(*args)
107
+ options = args.extract_options!
108
+ resource_names = args
109
+ resource_names.each do |resource_name|
110
+ scope(options.merge(from: :resource, resource_name: resource_name)) do
111
+ each_resource(resource_name, options.merge(singular_resource: true))
92
112
  yield if block_given?
93
113
  end
94
114
  end
95
115
  end
96
116
 
97
- def each_resource(name, options={}, has_block=nil)
98
- o = Resources::Options.new(name, options.merge(singular_resource: true))
99
- f = Resources::Filter.new(name, options)
100
-
101
- get "#{name}/new", o.build(:new) if f.yes?(:new) && !api_mode?
102
- get name, o.build(:show) if f.yes?(:show)
103
- post name, o.build(:create) if f.yes?(:create)
104
- get "#{name}/edit", o.build(:edit) if f.yes?(:edit) && !api_mode?
105
- put name, o.build(:update) if f.yes?(:update)
106
- post name, o.build(:update) if f.yes?(:update) # for binary uploads
107
- patch name, o.build(:update) if f.yes?(:update)
108
- delete name, o.build(:delete) if f.yes?(:delete)
109
- end
110
-
111
- def member
112
- @on_option = :member
113
- yield
114
- @on_option = nil
115
- end
116
-
117
- def collection
118
- @on_option = :collection
119
- yield
120
- @on_option = nil
121
- end
122
-
123
- # If a block has pass then we assume the resources will be nested and then prefix
124
- # the param name with the resource. IE: post_id instead of id
125
- # This avoids an API Gateway parent sibling variable collision.
126
- def default_param(has_block, name, options)
127
- default_param = has_block ? "#{name.to_s.singularize}_id".to_sym : :id
128
- options[:param] || default_param
117
+ # Important: Options as, module, etc are handled by scope and should not be passed to the route
118
+ HANDLED_BY_SCOPE = [:as, :module, :path, :shallow].freeze
119
+ def each_resource(resource_name, options={})
120
+ HANDLED_BY_SCOPE.each do |opt|
121
+ options.delete(opt)
122
+ end
123
+ o = Resources::Options.new(resource_name, options)
124
+ f = Resources::Filter.new(resource_name, options)
125
+
126
+ # Looks a little weird with '' but the path is handled by the scope
127
+ get '', o.build(:index) if f.yes?(:index) && !options[:singular_resource]
128
+ post '', o.build(:create) if f.yes?(:create)
129
+ get 'new', o.build(:new) if f.yes?(:new) && !api_mode?
130
+ get 'edit', o.build(:edit) if f.yes?(:edit) && !api_mode?
131
+ get '', o.build(:show) if f.yes?(:show)
132
+ put '', o.build(:update) if f.yes?(:update)
133
+ # post to update wont work with singular_resource because it's a route collision
134
+ # Also makes it so that route.to is always changed
135
+ # Leaving in case need it for some reason. Will remove later.
136
+ # post '', o.build(:update) if f.yes?(:update) # for binary uploads
137
+ patch '', o.build(:update) if f.yes?(:update)
138
+ delete '', o.build(:destroy) if f.yes?(:destroy)
129
139
  end
130
140
 
131
141
  # root "posts#index"
132
- def root(to, options={})
133
- default = {path: '', to: to, method: :get, root: true}
134
- options = default.merge(options)
135
- MethodCreator.new(options, @scope).create_root_helper
136
- @routes << Route.new(options, @scope)
137
- end
138
- private
142
+ # root to: "posts#index"
143
+ def root(*args)
144
+ if args.size == 1
145
+ options = args.first
146
+ if options.is_a?(String) # root "posts#index"
147
+ to = options
148
+ options = {}
149
+ elsif options.is_a?(Hash) # root to: "posts#index"
150
+ to = options.delete(:to)
151
+ end
152
+ else
153
+ to = args[0]
154
+ options = args[1] || {}
155
+ end
139
156
 
140
- def escape_path(path)
141
- path.to_s.split('/').map { |s| s =~ /\A[:\*]/ ? s : CGI.escape(s) }.join('/')
157
+ http_method = options.delete(:via)
158
+ http_method ||= Jets.config.api.cors ? :any : :get
159
+ default = {path: '/', to: to, http_method: http_method, root: true}
160
+ options = default.merge(options)
161
+ create_route(options)
142
162
  end
143
163
  end
144
164
  end
@@ -0,0 +1,36 @@
1
+ module Jets::Router
2
+ class EngineMount
3
+ def self.find_by(request_path: nil, engine: nil)
4
+ new.find_by(request_path: request_path, engine: engine)
5
+ end
6
+
7
+ def find_by(request_path: nil, engine: nil)
8
+ mount = if request_path
9
+ find_by_request_path(request_path)
10
+ elsif engine
11
+ find_by_engine(engine)
12
+ end
13
+
14
+ return unless mount
15
+
16
+ OpenStruct.new(at: mount[0], engine: mount[1])
17
+ end
18
+
19
+ def find_by_request_path(request_path)
20
+ mounted_engines.find do |at, engine|
21
+ request_path.starts_with?(at)
22
+ end
23
+ end
24
+
25
+ def find_by_engine(engine)
26
+ mounted = mounted_engines.find do |at, mounted_engine|
27
+ mounted_engine == engine
28
+ end
29
+ end
30
+
31
+ # Example mounted_engines: {"/blog"=>Blorgh::Engine}
32
+ def mounted_engines
33
+ Jets::Router::Dsl::Mount.mounted_engines
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,130 @@
1
+ require 'cli-format'
2
+
3
+ module Jets::Router
4
+ class Help
5
+ extend Memoist
6
+
7
+ def initialize(options={})
8
+ @options = options
9
+ @engines = {}
10
+ end
11
+
12
+ def all_routes
13
+ Jets::Router.routes
14
+ end
15
+
16
+ def routes
17
+ routes = filter(all_routes)
18
+ collect_engine_routes(routes)
19
+ if ENV['JETS_ROUTES_INTERNAL']
20
+ routes = routes.select { |route| route.internal }
21
+ else
22
+ routes = routes.reject { |route| route.internal }
23
+ end
24
+ routes
25
+ end
26
+
27
+ def collect_engine_routes(routes)
28
+ routes.each do |route|
29
+ collect_engine_routes_per(route) if route.engine?
30
+ end
31
+ end
32
+
33
+ def collect_engine_routes_per(route)
34
+ name = route.endpoint
35
+ return unless route.engine?
36
+ return if @engines[name]
37
+
38
+ route_set = route.rack_app.route_set
39
+ if route_set.is_a?(Jets::Router::RouteSet)
40
+ @engines[name] = route_set.routes
41
+ end
42
+ end
43
+
44
+ def filter(routes)
45
+ if @options[:controller]
46
+ routes.select do |route|
47
+ route.controller.include?(@options[:controller])
48
+ end
49
+ elsif @options[:grep]
50
+ grep_pattern = Regexp.new(@options[:grep], 'i')
51
+ proc = filter_proc(grep_pattern)
52
+ routes.select(&proc)
53
+ elsif @options[:reject]
54
+ reject_pattern = Regexp.new(@options[:reject], 'i')
55
+ proc = filter_proc(reject_pattern)
56
+ routes.reject(&proc)
57
+ else
58
+ routes
59
+ end
60
+ end
61
+
62
+ def filter_proc(pattern)
63
+ Proc.new do |route|
64
+ route.as =~ pattern ||
65
+ route.http_method =~ pattern ||
66
+ route.path =~ pattern ||
67
+ route.controller =~ pattern ||
68
+ route.mount_class_name =~ pattern
69
+ end
70
+ end
71
+
72
+ def header
73
+ header = ["As (Prefix)", "Verb", "Path (URI Pattern)", "Controller#action"]
74
+ # any_mount = routes.any?(&:mount_class_name)
75
+ # header << "Mount" if any_mount
76
+ header
77
+ end
78
+
79
+ def any_mount?
80
+ routes.any?(&:mount_class_name)
81
+ end
82
+
83
+ def print
84
+ puts text
85
+ end
86
+
87
+ def text
88
+ text = presenter_text("Routes for app:", routes)
89
+ @engines.each do |name, routes|
90
+ text += presenter_text("Routes for #{name}:", routes)
91
+ end
92
+ text
93
+ end
94
+
95
+ def presenter_text(summary_line, routes)
96
+ text = format_with_newlines(summary_line)
97
+ if routes.empty?
98
+ text += "The routes table is empty.\n"
99
+ return text
100
+ end
101
+
102
+ presenter = CliFormat::Presenter.new(@options)
103
+ presenter.header = header unless @options[:header] == false
104
+ routes.each do |route|
105
+ row = [route.as, route.http_method, route.path, route.to]
106
+ # row << route.mount_class_name if any_mount?
107
+ presenter.rows << row
108
+ end
109
+ text += presenter.text.to_s # <Text::Table> => String
110
+ text += "\n" unless text.ends_with?("\n")
111
+ text += "\n" if @options[:format] == "space" # add another newline for space format
112
+ text
113
+ end
114
+
115
+ def format_with_newlines(line)
116
+ return '' if @options[:header] == false
117
+
118
+ case @options[:format]
119
+ when "markdown"
120
+ # need leading newline for routes_table jets prints when route not found
121
+ # Unsure why it needs to be here and not at the routes_table method.
122
+ "\n#{line}\n\n"
123
+ when "space"
124
+ "#{line}\n\n"
125
+ else
126
+ "#{line}\n"
127
+ end
128
+ end
129
+ end
130
+ end
@@ -0,0 +1,13 @@
1
+ module Jets::Router::Helpers::NamedRoutes
2
+ module AddFullUrl
3
+ # Named add_full_url to avoid mental conflicts with Jets full_url_for
4
+ # Leverage Rails URL.url_for to avoid duplicating the logic
5
+ # Rails sets url_strategy to:
6
+ # => ActionDispatch::Routing::RouteSet::UNKNOWN
7
+ # => ActionDispatch::Http::URL.url_for(options)
8
+ def add_full_url(options)
9
+ options = url_options.merge(options)
10
+ ActionDispatch::Http::URL.url_for(options)
11
+ end
12
+ end
13
+ end