jets 0.2.0 → 0.5.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 (292) hide show
  1. checksums.yaml +5 -5
  2. data/.circleci/bin/commit_docs.sh +26 -0
  3. data/.circleci/config.yml +126 -0
  4. data/.codebuild/README.md +57 -0
  5. data/.codebuild/bin/jets +3 -0
  6. data/.codebuild/buildspec-base.yml +14 -0
  7. data/.codebuild/integration.sh +54 -0
  8. data/.codebuild/jets.postman_collection.json +323 -0
  9. data/.codebuild/scripts/install-docker.sh +12 -0
  10. data/.codebuild/scripts/install-dynamodb-local.sh +22 -0
  11. data/.codebuild/scripts/install-java.sh +20 -0
  12. data/.codebuild/scripts/install-node.sh +4 -0
  13. data/.gitignore +3 -0
  14. data/.gitmodules +9 -0
  15. data/.python-version +1 -0
  16. data/.rspec +2 -0
  17. data/.ruby-version +1 -1
  18. data/CHANGELOG.md +3 -0
  19. data/Dockerfile +16 -0
  20. data/Dockerfile.base +53 -0
  21. data/Gemfile +8 -1
  22. data/Gemfile.lock +132 -28
  23. data/LICENSE.txt +1 -1
  24. data/Procfile +2 -0
  25. data/README.md +116 -17
  26. data/Rakefile +6 -0
  27. data/buildspec.yml +18 -0
  28. data/exe/jets +14 -0
  29. data/jets.gemspec +31 -3
  30. data/lib/jets.rb +56 -8
  31. data/lib/jets/application.rb +121 -0
  32. data/lib/jets/application/middleware.rb +23 -0
  33. data/lib/jets/aws_services.rb +71 -0
  34. data/lib/jets/booter.rb +95 -0
  35. data/lib/jets/builders.rb +6 -0
  36. data/lib/jets/builders/code_builder.rb +431 -0
  37. data/lib/jets/builders/deducer.rb +73 -0
  38. data/lib/jets/builders/gem_replacer.rb +154 -0
  39. data/lib/jets/builders/handler_generator.rb +76 -0
  40. data/lib/jets/builders/node-hello.js +73 -0
  41. data/lib/jets/builders/node-shim.js +151 -0
  42. data/lib/jets/cfn.rb +5 -4
  43. data/lib/jets/cfn/ship.rb +178 -0
  44. data/lib/jets/cfn/status.rb +208 -0
  45. data/lib/jets/cfn/template_builders.rb +21 -0
  46. data/lib/jets/cfn/template_builders/api_gateway_builder.rb +73 -0
  47. data/lib/jets/cfn/template_builders/api_gateway_deployment_builder.rb +38 -0
  48. data/lib/jets/cfn/template_builders/base_child_builder.rb +38 -0
  49. data/lib/jets/cfn/template_builders/controller_builder.rb +107 -0
  50. data/lib/jets/cfn/template_builders/function_builder.rb +20 -0
  51. data/lib/jets/cfn/template_builders/function_properties.rb +6 -0
  52. data/lib/jets/cfn/template_builders/function_properties/base_builder.rb +106 -0
  53. data/lib/jets/cfn/template_builders/function_properties/node_builder.rb +12 -0
  54. data/lib/jets/cfn/template_builders/function_properties/python_builder.rb +12 -0
  55. data/lib/jets/cfn/template_builders/function_properties/ruby_builder.rb +13 -0
  56. data/lib/jets/cfn/template_builders/interface.rb +91 -0
  57. data/lib/jets/cfn/template_builders/job_builder.rb +63 -0
  58. data/lib/jets/cfn/template_builders/parent_builder.rb +97 -0
  59. data/lib/jets/cfn/template_builders/rule_builder.rb +55 -0
  60. data/lib/jets/cfn/template_builders/templates/minimal-stack.yml +45 -0
  61. data/lib/jets/cfn/template_mappers.rb +23 -0
  62. data/lib/jets/cfn/template_mappers/api_gateway_deployment_mapper.rb +48 -0
  63. data/lib/jets/cfn/template_mappers/api_gateway_mapper.rb +4 -0
  64. data/lib/jets/cfn/template_mappers/child_mapper.rb +41 -0
  65. data/lib/jets/cfn/template_mappers/config_rule_mapper.rb +34 -0
  66. data/lib/jets/cfn/template_mappers/controller_mapper.rb +36 -0
  67. data/lib/jets/cfn/template_mappers/events_rule_mapper.rb +40 -0
  68. data/lib/jets/cfn/template_mappers/function_mapper.rb +4 -0
  69. data/lib/jets/cfn/template_mappers/gateway_method_mapper.rb +56 -0
  70. data/lib/jets/cfn/template_mappers/gateway_resource_mapper.rb +62 -0
  71. data/lib/jets/cfn/template_mappers/job_mapper.rb +4 -0
  72. data/lib/jets/cfn/template_mappers/lambda_function_mapper.rb +50 -0
  73. data/lib/jets/cfn/template_mappers/rule_mapper.rb +5 -0
  74. data/lib/jets/cli.rb +180 -15
  75. data/lib/jets/commands.rb +22 -0
  76. data/lib/jets/commands/base.rb +151 -0
  77. data/lib/jets/commands/build.rb +186 -0
  78. data/lib/jets/commands/call.rb +175 -0
  79. data/lib/jets/commands/call/anonymous_guesser.rb +96 -0
  80. data/lib/jets/commands/call/autoload_guesser.rb +112 -0
  81. data/lib/jets/commands/call/base_guesser.rb +33 -0
  82. data/lib/jets/commands/call/guesser.rb +51 -0
  83. data/lib/jets/commands/console.rb +12 -0
  84. data/lib/jets/commands/db.rb +15 -0
  85. data/lib/jets/commands/db/environment-task.rake +3 -0
  86. data/lib/jets/commands/db/tasks.rb +30 -0
  87. data/lib/jets/commands/dbconsole.rb +131 -0
  88. data/lib/jets/commands/delete.rb +119 -0
  89. data/lib/jets/commands/deploy.rb +53 -0
  90. data/lib/jets/commands/dynamodb.rb +22 -0
  91. data/lib/jets/commands/dynamodb/migrate.rb +9 -0
  92. data/lib/jets/commands/dynamodb/migrator.rb +36 -0
  93. data/lib/jets/commands/help.rb +9 -0
  94. data/lib/jets/commands/help/build.md +1 -0
  95. data/lib/jets/commands/help/call.md +55 -0
  96. data/lib/jets/commands/help/console.md +4 -0
  97. data/lib/jets/commands/help/db/generate.md +8 -0
  98. data/lib/jets/commands/help/dbconsole.md +5 -0
  99. data/lib/jets/commands/help/delete.md +9 -0
  100. data/lib/jets/commands/help/deploy.md +5 -0
  101. data/lib/jets/commands/help/dynamodb/generate.md +50 -0
  102. data/lib/jets/commands/help/dynamodb/migrate.md +4 -0
  103. data/lib/jets/commands/help/generate.md +5 -0
  104. data/lib/jets/commands/help/new.md +9 -0
  105. data/lib/jets/commands/help/process/controller.md +6 -0
  106. data/lib/jets/commands/help/process/function.md +5 -0
  107. data/lib/jets/commands/help/process/job.md +5 -0
  108. data/lib/jets/commands/help/process/rule.md +5 -0
  109. data/lib/jets/commands/help/routes.md +3 -0
  110. data/lib/jets/commands/help/server.md +6 -0
  111. data/lib/jets/commands/help/status.md +1 -0
  112. data/lib/jets/commands/help/url.md +5 -0
  113. data/lib/jets/commands/main.rb +111 -0
  114. data/lib/jets/commands/markdown.rb +8 -0
  115. data/lib/jets/commands/markdown/creator.rb +58 -0
  116. data/lib/jets/commands/markdown/index.rb +27 -0
  117. data/lib/jets/commands/markdown/page.rb +125 -0
  118. data/lib/jets/commands/markdown/shell.rb +11 -0
  119. data/lib/jets/commands/new.rb +110 -0
  120. data/lib/jets/commands/rake_command.rb +61 -0
  121. data/lib/jets/commands/rake_tasks.rb +45 -0
  122. data/lib/jets/commands/sequence.rb +44 -0
  123. data/lib/jets/commands/stack_info.rb +30 -0
  124. data/lib/jets/commands/templates/skeleton/.env +2 -0
  125. data/lib/jets/commands/templates/skeleton/.env.development.tt +3 -0
  126. data/lib/jets/commands/templates/skeleton/.env.test +3 -0
  127. data/lib/jets/commands/templates/skeleton/.gitignore +14 -0
  128. data/lib/jets/commands/templates/skeleton/.jetskeep +1 -0
  129. data/lib/jets/commands/templates/skeleton/Gemfile.tt +27 -0
  130. data/lib/jets/commands/templates/skeleton/Procfile +7 -0
  131. data/lib/jets/commands/templates/skeleton/README.md +4 -0
  132. data/lib/jets/commands/templates/skeleton/Rakefile +2 -0
  133. data/lib/jets/commands/templates/skeleton/app/controllers/application_controller.rb +2 -0
  134. data/lib/jets/commands/templates/skeleton/app/helpers/application_helper.rb +2 -0
  135. data/lib/jets/commands/templates/skeleton/app/jobs/application_job.rb +2 -0
  136. data/lib/jets/commands/templates/skeleton/app/models/application_item.rb +2 -0
  137. data/lib/jets/commands/templates/skeleton/app/models/application_record.rb +3 -0
  138. data/lib/jets/commands/templates/skeleton/app/views/layouts/application.html.erb.tt +24 -0
  139. data/lib/jets/commands/templates/skeleton/bin/ruby_server +18 -0
  140. data/lib/jets/commands/templates/skeleton/bin/ruby_server.rb +2 -0
  141. data/lib/jets/commands/templates/skeleton/config.ru +4 -0
  142. data/lib/jets/commands/templates/skeleton/config/application.rb.tt +26 -0
  143. data/lib/jets/commands/templates/skeleton/config/database.yml.tt +27 -0
  144. data/lib/jets/commands/templates/skeleton/config/dynamodb.yml +25 -0
  145. data/lib/jets/commands/templates/skeleton/config/routes.rb +8 -0
  146. data/lib/jets/commands/templates/skeleton/db/.gitkeep +0 -0
  147. data/lib/jets/commands/templates/skeleton/public/404.html +67 -0
  148. data/lib/jets/commands/templates/skeleton/public/422.html +67 -0
  149. data/lib/jets/commands/templates/skeleton/public/500.html +66 -0
  150. data/lib/jets/commands/templates/skeleton/public/favicon.ico +0 -0
  151. data/lib/jets/commands/templates/skeleton/public/index.html.tt +79 -0
  152. data/lib/jets/commands/templates/skeleton/spec/controllers/posts_controller_spec.rb +18 -0
  153. data/lib/jets/commands/templates/skeleton/spec/fixtures/payloads/posts-index.json +51 -0
  154. data/lib/jets/commands/templates/skeleton/spec/fixtures/payloads/posts-show.json +53 -0
  155. data/lib/jets/commands/templates/skeleton/spec/spec_helper.rb.tt +27 -0
  156. data/lib/jets/commands/templates/webpacker/app/javascript/packs/application.js.tt +14 -0
  157. data/lib/jets/commands/templates/webpacker/app/javascript/packs/theme.scss.tt +24 -0
  158. data/lib/jets/commands/templates/webpacker/app/javascript/src/jets/crud.js +87 -0
  159. data/lib/jets/commands/url.rb +45 -0
  160. data/lib/jets/commands/webpacker_template.rb +19 -0
  161. data/lib/jets/controller.rb +9 -0
  162. data/lib/jets/controller/base.rb +50 -0
  163. data/lib/jets/controller/callbacks.rb +43 -0
  164. data/lib/jets/controller/layout.rb +17 -0
  165. data/lib/jets/controller/params.rb +53 -0
  166. data/lib/jets/controller/redirection.rb +55 -0
  167. data/lib/jets/controller/renderers.rb +5 -0
  168. data/lib/jets/controller/renderers/aws_proxy_renderer.rb +69 -0
  169. data/lib/jets/controller/renderers/base_renderer.rb +16 -0
  170. data/lib/jets/controller/renderers/template_renderer.rb +107 -0
  171. data/lib/jets/controller/rendering.rb +80 -0
  172. data/lib/jets/controller/request.rb +55 -0
  173. data/lib/jets/core.rb +81 -0
  174. data/lib/jets/default/application.rb +20 -0
  175. data/lib/jets/dotenv.rb +37 -0
  176. data/lib/jets/erb.rb +51 -0
  177. data/lib/jets/generator.rb +40 -0
  178. data/lib/jets/generator/templates/erb/controller/view.html.erb +2 -0
  179. data/lib/jets/generator/templates/erb/scaffold/_form.html.erb +39 -0
  180. data/lib/jets/generator/templates/erb/scaffold/edit.html.erb +6 -0
  181. data/lib/jets/generator/templates/erb/scaffold/index.html.erb +29 -0
  182. data/lib/jets/generator/templates/erb/scaffold/new.html.erb +5 -0
  183. data/lib/jets/generator/templates/erb/scaffold/show.html.erb +9 -0
  184. data/lib/jets/generator/templates/rails/assets/javascript.js +2 -0
  185. data/lib/jets/generator/templates/rails/assets/stylesheet.css +4 -0
  186. data/lib/jets/generator/templates/rails/controller/controller.rb +13 -0
  187. data/lib/jets/generator/templates/rails/helper/helper.rb +4 -0
  188. data/lib/jets/generator/templates/rails/scaffold/scaffold.css +80 -0
  189. data/lib/jets/generator/templates/rails/scaffold_controller/api_controller.rb +62 -0
  190. data/lib/jets/generator/templates/rails/scaffold_controller/controller.rb +71 -0
  191. data/lib/jets/internal/app/controllers/jets/public_controller.rb +30 -0
  192. data/lib/jets/internal/app/controllers/jets/public_controller/python/show.py +47 -0
  193. data/lib/jets/internal/app/controllers/jets/public_controller/python/show.pyc +0 -0
  194. data/lib/jets/internal/app/controllers/jets/welcome_controller.rb +22 -0
  195. data/lib/jets/internal/app/controllers/jets/welcome_controller/python/index.py +24 -0
  196. data/lib/jets/internal/app/jobs/jets/preheat_job.rb +52 -0
  197. data/lib/jets/job.rb +5 -0
  198. data/lib/jets/job/base.rb +29 -0
  199. data/lib/jets/job/dsl.rb +58 -0
  200. data/lib/jets/job/task.rb +17 -0
  201. data/lib/jets/klass.rb +71 -0
  202. data/lib/jets/lambda.rb +18 -0
  203. data/lib/jets/lambda/dsl.rb +153 -0
  204. data/lib/jets/lambda/function.rb +29 -0
  205. data/lib/jets/lambda/function_constructor.rb +60 -0
  206. data/lib/jets/lambda/functions.rb +22 -0
  207. data/lib/jets/lambda/task.rb +77 -0
  208. data/lib/jets/naming.rb +61 -0
  209. data/lib/jets/pascalize.rb +30 -0
  210. data/lib/jets/poly_fun.rb +61 -0
  211. data/lib/jets/poly_fun/base_executor.rb +129 -0
  212. data/lib/jets/poly_fun/lambda_executor.rb +16 -0
  213. data/lib/jets/poly_fun/node_error.rb +8 -0
  214. data/lib/jets/poly_fun/node_executor.rb +54 -0
  215. data/lib/jets/poly_fun/python_error.rb +8 -0
  216. data/lib/jets/poly_fun/python_executor.rb +23 -0
  217. data/lib/jets/preheat.rb +72 -0
  218. data/lib/jets/processors.rb +4 -0
  219. data/lib/jets/processors/deducer.rb +54 -0
  220. data/lib/jets/processors/main_processor.rb +57 -0
  221. data/lib/jets/rails_overrides.rb +4 -0
  222. data/lib/jets/rails_overrides/asset_tag_helper.rb +41 -0
  223. data/lib/jets/rails_overrides/common_methods.rb +13 -0
  224. data/lib/jets/rails_overrides/rendering_helper.rb +26 -0
  225. data/lib/jets/rails_overrides/url_helper.rb +26 -0
  226. data/lib/jets/route.rb +145 -0
  227. data/lib/jets/router.rb +115 -0
  228. data/lib/jets/ruby_server.rb +91 -0
  229. data/lib/jets/rule.rb +5 -0
  230. data/lib/jets/rule/base.rb +19 -0
  231. data/lib/jets/rule/dsl.rb +64 -0
  232. data/lib/jets/rule/task.rb +44 -0
  233. data/lib/jets/server.rb +16 -0
  234. data/lib/jets/server/api_gateway.rb +39 -0
  235. data/lib/jets/server/lambda_aws_proxy.rb +122 -0
  236. data/lib/jets/server/route_matcher.rb +96 -0
  237. data/lib/jets/server/timing_middleware.rb +16 -0
  238. data/lib/jets/server/webpacker_setup.rb +7 -0
  239. data/lib/jets/timing.rb +65 -0
  240. data/lib/jets/timing/report.rb +82 -0
  241. data/lib/jets/util.rb +7 -12
  242. data/lib/jets/version.rb +1 -1
  243. data/support/clean +3 -0
  244. data/support/console +3 -0
  245. metadata +473 -76
  246. data/bin/jets +0 -14
  247. data/lib/jets/base_controller.rb +0 -54
  248. data/lib/jets/build.rb +0 -46
  249. data/lib/jets/build/handler_generator.rb +0 -46
  250. data/lib/jets/build/lambda_deducer.rb +0 -23
  251. data/lib/jets/build/templates/handler.js +0 -149
  252. data/lib/jets/build/traveling_ruby.rb +0 -133
  253. data/lib/jets/cfn/base.rb +0 -17
  254. data/lib/jets/cfn/builder.rb +0 -53
  255. data/lib/jets/cfn/namer.rb +0 -30
  256. data/lib/jets/cli/help.rb +0 -19
  257. data/lib/jets/command.rb +0 -25
  258. data/lib/jets/process.rb +0 -18
  259. data/lib/jets/process/base_processor.rb +0 -23
  260. data/lib/jets/process/controller_processor.rb +0 -36
  261. data/lib/jets/process/help.rb +0 -11
  262. data/lib/jets/process/processor_deducer.rb +0 -51
  263. data/lib/jets/project.rb +0 -23
  264. data/notes/design.md +0 -107
  265. data/notes/faq.md +0 -3
  266. data/notes/lambda_ruby_info.md +0 -34
  267. data/notes/traveling-ruby-packaging-jets.md +0 -26
  268. data/notes/traveling-ruby-packaging.md +0 -103
  269. data/notes/traveling-ruby-structure.md +0 -6
  270. data/notes/traveling-ruby.md +0 -82
  271. data/spec/fixtures/classes.rb +0 -5
  272. data/spec/fixtures/project/.gitignore +0 -3
  273. data/spec/fixtures/project/.ruby-version +0 -1
  274. data/spec/fixtures/project/Gemfile +0 -4
  275. data/spec/fixtures/project/Gemfile.lock +0 -23
  276. data/spec/fixtures/project/app/controllers/application_controller.rb +0 -2
  277. data/spec/fixtures/project/app/controllers/posts_controller.rb +0 -12
  278. data/spec/fixtures/project/bin/jets +0 -22
  279. data/spec/fixtures/project/config/routes.rb +0 -6
  280. data/spec/fixtures/project/handlers/controllers/posts.js +0 -212
  281. data/spec/lib/cli_spec.rb +0 -20
  282. data/spec/lib/jets/base_controller_spec.rb +0 -18
  283. data/spec/lib/jets/build/handler_generator_spec.rb +0 -20
  284. data/spec/lib/jets/build/lambda_deducer_spec.rb +0 -15
  285. data/spec/lib/jets/build_spec.rb +0 -34
  286. data/spec/lib/jets/cfn/builder_spec.rb +0 -18
  287. data/spec/lib/jets/cfn/namer_spec.rb +0 -16
  288. data/spec/lib/jets/process/controller_processor_spec.rb +0 -22
  289. data/spec/lib/jets/process/infer_spec.rb +0 -24
  290. data/spec/lib/jets/process_spec.rb +0 -18
  291. data/spec/lib/jets/project_spec.rb +0 -14
  292. data/spec/spec_helper.rb +0 -28
@@ -0,0 +1,40 @@
1
+ class Jets::Cfn::TemplateMappers
2
+ class EventsRuleMapper
3
+ # task is a Jets::Job::Task
4
+ def initialize(task)
5
+ @task = task
6
+ end
7
+
8
+ # Example: "HardJobDigScheduledEvent"
9
+ def logical_id
10
+ "#{full_task_name}ScheduledEvent"
11
+ end
12
+
13
+ # Example: "HardJobDigLambdaFunction"
14
+ def lambda_function_logical_id
15
+ "#{full_task_name}LambdaFunction"
16
+ end
17
+
18
+ # Target Id: A unique, user-defined identifier for the target. Acceptable values include alphanumeric characters, periods (.), hyphens (-), and underscores (_).
19
+ #
20
+ # Example: RuleTargetHardJobDig
21
+ def rule_target_id
22
+ "#{full_task_name}RuleTarget"
23
+ end
24
+
25
+ # Example: HardJobDigEventsRulePermission
26
+ def permission_logical_id
27
+ "#{full_task_name}EventsRulePermission"
28
+ end
29
+
30
+ private
31
+ # Full camelized task name including the class
32
+ # Example: HardJobDig
33
+ def full_task_name
34
+ class_name = @task.class_name.gsub('::','')
35
+ task_name = @task.meth.to_s.camelize
36
+ "#{class_name}#{task_name}"
37
+ end
38
+ end
39
+ end
40
+
@@ -0,0 +1,4 @@
1
+ class Jets::Cfn::TemplateMappers
2
+ class FunctionMapper < ChildMapper
3
+ end
4
+ end
@@ -0,0 +1,56 @@
1
+ class Jets::Cfn::TemplateMappers
2
+ class GatewayMethodMapper
3
+ def initialize(route)
4
+ @route = route # {to: "posts#index", path: "posts", method: :get}
5
+ end
6
+
7
+ def logical_id
8
+ if @route.homepage?
9
+ "RootPathHomepageGetApiGatewayMethod"
10
+ else
11
+ "#{path_method_id}ApiGatewayMethod"
12
+ end
13
+ end
14
+
15
+ def path_method_id
16
+ path = @route.path.gsub(':','_').gsub('/','_').gsub('*','')
17
+ method = @route.method.downcase
18
+ "#{path}_#{method}".camelize
19
+ end
20
+
21
+ # Example returns:
22
+ # ApiGatewayResourcePostsIdEdit or
23
+ # ApiGatewayResourcePostsId or
24
+ # ApiGatewayResourcePosts
25
+ def gateway_resource_logical_id
26
+ resource_map.logical_id
27
+ end
28
+
29
+ def cors_logical_id
30
+ resource_map.cors_logical_id
31
+ end
32
+
33
+ def resource_map
34
+ @resource_map ||= GatewayResourceMapper.new(@route.path)
35
+ end
36
+
37
+ def lambda_function_logical_id
38
+ "#{controller_action_logical_id}LambdaFunction"
39
+ end
40
+
41
+ def permission_logical_id
42
+ "#{controller_action_logical_id}ApiGatewayPermission"
43
+ end
44
+
45
+ # Example: PostsControllerIndex
46
+ def controller_action_logical_id
47
+ controller, action = @route.to.split('#')
48
+ "#{controller}_controller_#{action}".camelize.gsub('::','')
49
+ end
50
+
51
+ def controller
52
+ controller, action = @route.to.split('#')
53
+ "#{controller}_controller".camelize
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,62 @@
1
+ class Jets::Cfn::TemplateMappers
2
+ class GatewayResourceMapper
3
+ def initialize(path)
4
+ @path = path # Examples: "posts/:id/edit" or "posts"
5
+ end
6
+
7
+ # Returns: "ApiGatewayResourcePostsController"
8
+ def logical_id
9
+ homepage = @path == ''
10
+ if homepage
11
+ "RootResourceId"
12
+ else
13
+ "#{path_logical_id(@path)}ApiGatewayResource"
14
+ end
15
+ end
16
+
17
+ def cors_logical_id
18
+ "#{path_logical_id(@path)}CorsApiGatewayResource"
19
+ end
20
+
21
+ # Modify the path to conform to API Gateway capture expressions
22
+ def path
23
+ @path.split('/').map {|s| transform_capture(s) }.join('/')
24
+ end
25
+
26
+ def desc
27
+ path.empty? ? 'Homepage route: /' : "Route for: /#{path}"
28
+ end
29
+
30
+ def transform_capture(text)
31
+ if text.starts_with?(':')
32
+ text = text.sub(':','')
33
+ text = "{#{text}}" # :foo => {foo}
34
+ end
35
+ if text.starts_with?('*')
36
+ text = text.sub('*','')
37
+ text = "{#{text}+}" # *foo => {foo+}
38
+ end
39
+ text
40
+ end
41
+
42
+ def parent_id
43
+ if @path.include?('/') # posts/:id or posts/:id/edit
44
+ parent_path = @path.split('/')[0..-2].join('/')
45
+ parent_logical_id = path_logical_id(parent_path)
46
+ "!Ref #{parent_logical_id}ApiGatewayResource"
47
+ else
48
+ "!GetAtt RestApi.RootResourceId"
49
+ end
50
+ end
51
+
52
+ def path_part
53
+ last_part = path.split('/').last
54
+ last_part.split('/').map {|s| transform_capture(s) }.join('/')
55
+ end
56
+
57
+ private
58
+ def path_logical_id(path)
59
+ path.gsub('/','_').gsub(':','').gsub('*','').camelize
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,4 @@
1
+ class Jets::Cfn::TemplateMappers
2
+ class JobMapper < ChildMapper
3
+ end
4
+ end
@@ -0,0 +1,50 @@
1
+ class Jets::Cfn::TemplateMappers
2
+ class LambdaFunctionMapper
3
+ def initialize(task)
4
+ @task = task
5
+ @app_class = task.class_name.to_s
6
+ # @app_class examples: PostsController, HardJob, Hello, HelloFunction
7
+ end
8
+
9
+ # Example: SleepJobPerformLambdaFunction
10
+ def logical_id
11
+ "#{class_action}LambdaFunction".gsub('::','')
12
+ end
13
+
14
+ def environment
15
+ env = Jets.config.environment ? Jets.config.environment.to_h : {}
16
+ env.deep_merge(JETS_ENV: Jets.env.to_s)
17
+ end
18
+
19
+ # Example: PostsControllerIndex or SleepJobPerform
20
+ def class_action
21
+ "#{@app_class}_#{@task.meth}".camelize
22
+ end
23
+
24
+ # Examples:
25
+ # "#{Jets.config.project_namespace}-sleep_job-perform"
26
+ # "demo-dev-sleep_job-perform"
27
+ def function_name
28
+ # Example values:
29
+ # @app_class: admin/pages_controller
30
+ # @task.meth: index
31
+ method = @app_class.underscore
32
+ # method: admin/pages_controller
33
+ method = method.sub('/','-') + "-#{@task.meth}"
34
+ # method: admin-pages_controller-index
35
+ "#{Jets.config.project_namespace}-#{method}"
36
+ end
37
+
38
+ def handler
39
+ handler_value(@task.meth)
40
+ end
41
+
42
+ def handler_value(meth)
43
+ "handlers/#{@task.type.pluralize}/#{@app_class.underscore}.#{meth}"
44
+ end
45
+
46
+ def code_s3_key
47
+ Jets::Naming.code_s3_key
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,5 @@
1
+ # Used in the parent_builder.rb to build Lambda functions
2
+ class Jets::Cfn::TemplateMappers
3
+ class RuleMapper < ChildMapper
4
+ end
5
+ end
@@ -1,23 +1,188 @@
1
1
  require "thor"
2
- require "jets/cli/help"
3
2
 
4
- module Jets
3
+ class Jets::CLI
4
+ def self.start(given_args=ARGV)
5
+ new(given_args).start
6
+ end
7
+
8
+ def self.thor_tasks
9
+ Jets::Commands::Base.namespaced_commands
10
+ end
5
11
 
6
- class CLI < Command
7
- class_option :verbose, type: :boolean
8
- class_option :noop, type: :boolean
12
+ def initialize(given_args=ARGV, **config)
13
+ @given_args = given_args.dup
14
+ @config = config
15
+ end
9
16
 
10
- desc "build", "Builds and prepares project for Lambda"
11
- long_desc Help.build
12
- option :force, type: :boolean, aliases: "-f", desc: "override existing starter files"
13
- option :quiet, type: :boolean, aliases: "-q", desc: "silence the output"
14
- option :format, type: :string, default: "yaml", desc: "starter project template format: json or yaml"
15
- def build
16
- Jets::Build.new(options).run
17
+ def start
18
+ command_class = lookup(full_command)
19
+ if command_class
20
+ boot_jets
21
+ command_class.perform(full_command, thor_args)
22
+ elsif version_requested?
23
+ puts Jets.version
24
+ else
25
+ main_help
17
26
  end
27
+ end
18
28
 
19
- desc "process TYPE", "process subcommand tasks"
20
- long_desc Help.process
21
- subcommand "process", Jets::Process
29
+ def version_requested?
30
+ # jets --version
31
+ # jets -v
32
+ version_flags = ["--version", "-v"]
33
+ @given_args.length == 1 && !(@given_args & version_flags).empty?
22
34
  end
35
+
36
+ # The commands new and help do not call Jets.boot. Main reason is that
37
+ # Jets.boot are ran inside a Jets project folder.
38
+ #
39
+ # * jets new - need to generate a project outside a project folder.
40
+ # * jets help - don't need to be in a project folder general help.
41
+ # When you are inside a project folder though, more help commands
42
+ # are available and displayed.
43
+ #
44
+ def boot_jets
45
+ command = thor_args.first
46
+ if !%w[new help].include?(command)
47
+ set_jets_env_for_deploy_command!
48
+ Jets.boot
49
+ end
50
+ end
51
+
52
+ # Adjust JETS_ENV before boot_jets is called for the jets deploy
53
+ # command. Must do this early in the process before Jets.boot because
54
+ # Jets.boot calls Jets.env as part of the bootup process in
55
+ # require_bundle_gems and sets the Jets.env to whatever the JETS_ENV is
56
+ # at the time.
57
+ #
58
+ # Defaults to development when not set.
59
+ def set_jets_env_for_deploy_command!
60
+ command, env = thor_args[0..1]
61
+ return unless command == "deploy"
62
+ env = nil if env&.starts_with?('-')
63
+ ENV['JETS_ENV'] = env ? env : 'development'
64
+ end
65
+
66
+ # thor_args normalized the args Array to work with our Thor command
67
+ # subclasses.
68
+ # 1. The namespace is stripe
69
+ # 2. Help is shifted in front if a help flag is detected
70
+ def thor_args
71
+ args = @given_args.clone
72
+
73
+ help_args = args & help_flags
74
+ unless help_args.empty?
75
+ # Allow using help flags at the end of the command to trigger help menu
76
+ args -= help_flags # remove "help" and help flags from args
77
+ args[0] = meth # first command will always be the meth now since
78
+ # we removed the help flags
79
+ args.unshift("help")
80
+ args.compact!
81
+ return args
82
+ end
83
+
84
+ # reassigns the command without the namespace if reached here
85
+ args[0] = meth
86
+ args.compact
87
+ end
88
+
89
+ ALIASES = {
90
+ "g" => "generate",
91
+ "c" => "console",
92
+ "s" => "server",
93
+ "db" => "dbconsole",
94
+ }
95
+ def full_command
96
+ # Removes any args that starts with -, those are option args.
97
+ # Also remove "help" flag.
98
+ args = @given_args.reject {|o| o =~ /^-/ } - help_flags
99
+ command = args[0] # first argument should always be the command
100
+ command = ALIASES[command] || command
101
+ Jets::Commands::Base.autocomplete(command)
102
+ end
103
+
104
+ # 1. look up Thor tasks
105
+ # 2. look up Rake tasks
106
+ # 3. help menu with all commands when both Thor and Rake tasks are not found
107
+ def lookup(full_command)
108
+ thor_task_found = Jets::Commands::Base.namespaced_commands.include?(full_command)
109
+ if thor_task_found
110
+ return Jets::Commands::Base.klass_from_namespace(namespace)
111
+ end
112
+
113
+ rake_task_found = Jets::Commands::RakeCommand.namespaced_commands.include?(full_command)
114
+ if rake_task_found
115
+ return Jets::Commands::RakeCommand
116
+ end
117
+ end
118
+
119
+ # ["-h", "-?", "--help", "-D", "help"]
120
+ def help_flags
121
+ Thor::HELP_MAPPINGS + ["help"]
122
+ end
123
+
124
+ def namespace
125
+ return nil unless full_command
126
+
127
+ if full_command.include?(':')
128
+ words = full_command.split(':')
129
+ words.pop
130
+ words.join(':')
131
+ end
132
+ end
133
+
134
+ def meth
135
+ return nil unless full_command
136
+
137
+ if full_command.include?(':')
138
+ full_command.split(':').pop
139
+ else
140
+ full_command
141
+ end
142
+ end
143
+
144
+ def main_help
145
+ shell = Thor::Shell::Basic.new
146
+ shell.say "Commands:"
147
+ shell.print_table(thor_list, :indent => 2, :truncate => true)
148
+
149
+ unless rake_list.empty?
150
+ shell.say "\nCommands via rake:"
151
+ shell.print_table(rake_list, :indent => 2, :truncate => true)
152
+ end
153
+
154
+ shell.say "\n"
155
+ shell.say main_help_body
156
+ end
157
+
158
+ def thor_list
159
+ Jets::Commands::Base.help_list(show_all_tasks)
160
+ end
161
+
162
+ def rake_list
163
+ list = Jets::Commands::RakeCommand.formatted_rake_tasks(show_all_tasks)
164
+ list.map do |array|
165
+ array[0] = "jets #{array[0]}"
166
+ array
167
+ end
168
+ end
169
+
170
+ def show_all_tasks
171
+ @given_args.include?("--all") || @given_args.include?("-A")
172
+ end
173
+
174
+ def main_help_body
175
+ <<-EOL
176
+ Add -h to any of the commands for more help. Examples:
177
+
178
+ jets call -h
179
+ jets routes -h
180
+ jets deploy -h
181
+ jets status -h
182
+ jets dynamodb:create -h
183
+ jets db:create -h
184
+
185
+ EOL
186
+ end
187
+
23
188
  end
@@ -0,0 +1,22 @@
1
+ module Jets::Commands
2
+ autoload :Help, "jets/commands/help"
3
+ autoload :Base, "jets/commands/base"
4
+ autoload :Build, "jets/commands/build"
5
+ autoload :Deploy, "jets/commands/deploy"
6
+ autoload :Delete, "jets/commands/delete"
7
+ autoload :New, "jets/commands/new"
8
+ autoload :Call, "jets/commands/call"
9
+ autoload :Console, "jets/commands/console"
10
+ autoload :Db, "jets/commands/db"
11
+ autoload :Dynamodb, "jets/commands/dynamodb"
12
+ autoload :Main, "jets/commands/main"
13
+ autoload :Process, "jets/commands/process"
14
+ autoload :RakeCommand, "jets/commands/rake_command"
15
+ autoload :RakeTasks, 'jets/commands/rake_tasks'
16
+ autoload :WebpackerTemplate, 'jets/commands/webpacker_template'
17
+ autoload :Sequence, "jets/commands/sequence"
18
+ autoload :StackInfo, "jets/commands/stack_info"
19
+ autoload :Dbconsole, "jets/commands/dbconsole"
20
+ autoload :Url, "jets/commands/url"
21
+ autoload :Markdown, "jets/commands/markdown"
22
+ end