jets 0.2.0 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -1,17 +0,0 @@
1
- class Jets::Cfn
2
- class Base
3
- def add_resource(logical_id, type, properties)
4
- @template[:Resources][logical_id] = {
5
- Type: type,
6
- Properties: properties
7
- }
8
- end
9
-
10
- def add_parameter(name, options={})
11
- defaults = { Type: "String" }
12
- options = defaults.merge(options)
13
- @template[:Parameters] ||= {}
14
- @template[:Parameters][name.camelize] = options
15
- end
16
- end
17
- end
@@ -1,53 +0,0 @@
1
- require 'active_support/core_ext/hash'
2
- require 'yaml'
3
-
4
- class Jets::Cfn
5
- class Builder < Base
6
- def initialize(controller_class)
7
- @controller_class = controller_class
8
- @template = ActiveSupport::HashWithIndifferentAccess.new(Resources: {})
9
- end
10
-
11
- def compose!
12
- add_parameters
13
- add_functions
14
- end
15
-
16
- def add_parameters
17
- add_parameter("LambdaIamRole", Description: "Iam Role that Lambda function uses.")
18
- add_parameter("S3Bucket", Description: "S3 Bucket for source code.")
19
- add_s3_bucket
20
- end
21
-
22
- def add_functions
23
- @controller_class.lambda_functions.each do |name|
24
- add_function(name)
25
- end
26
- end
27
-
28
- def add_function(name)
29
- namer = Namer.new(@controller_class, name)
30
-
31
- add_resource(namer.logical_id, "AWS::Lambda::Function",
32
- Code: {
33
- S3Bucket: {Ref: "S3Bucket"}, # from child stack
34
- S3Key: namer.s3_key
35
- },
36
- FunctionName: namer.function_name,
37
- Handler: namer.handler,
38
- Role: { Ref: "LambdaIamRole" },
39
- MemorySize: Jets::Project.memory_size,
40
- Runtime: Jets::Project.runtime,
41
- Timeout: Jets::Project.timeout
42
- )
43
- end
44
-
45
- def template
46
- @template
47
- end
48
-
49
- def text
50
- YAML.dump(@template.to_hash)
51
- end
52
- end
53
- end
@@ -1,30 +0,0 @@
1
- class Jets::Cfn
2
- class Namer
3
- def initialize(controller_class, method_name)
4
- @controller_class, @method_name = controller_class, method_name
5
- end
6
-
7
- def handler
8
- controller_name = @controller_class.to_s.sub('Controller', '').underscore
9
- "handlers/controllers/#{controller_name}.#{@method_name}"
10
- end
11
-
12
- def logical_id
13
- "#{@controller_class}_#{@method_name}".camelize
14
- end
15
-
16
- def function_name
17
- "#{Jets::Project.project_name}-#{Jets::Project.env}-#{logical_id.underscore.dasherize}"
18
- end
19
-
20
- def s3_key
21
- self.class.s3_key
22
- end
23
-
24
- # @@s3_key = "jets/cfn-templates/dev/#{Time.now.strftime("%Y%m%dT%H%M%S")}/jets-app-code.zip"
25
- @@s3_key = "jets/cfn-templates/code.zip" # hardcode to test
26
- def self.s3_key
27
- @@s3_key
28
- end
29
- end
30
- end
@@ -1,19 +0,0 @@
1
- module Jets
2
- class CLI < Command
3
- class Help
4
- class << self
5
- def build
6
- <<-EOL
7
- Builds and prepares project for AWS Lambda. Generates a node shim and vendors Traveling Ruby. Creates a zip file to be uploaded to Lambda for each handler.
8
- EOL
9
- end
10
-
11
- def process
12
- <<-EOL
13
- TODO: update process help menu
14
- EOL
15
- end
16
- end
17
- end
18
- end
19
- end
@@ -1,25 +0,0 @@
1
- require "thor"
2
-
3
- module Jets
4
- class Command < Thor
5
- class << self
6
- def dispatch(m, args, options, config)
7
- # Allow calling for help via:
8
- # jets command help
9
- # jets command -h
10
- # jets command --help
11
- # jets command -D
12
- #
13
- # as well thor's normal way:
14
- #
15
- # jets help command
16
- help_flags = Thor::HELP_MAPPINGS + ["help"]
17
- if args.length > 1 && !(args & help_flags).empty?
18
- args -= help_flags
19
- args.insert(-2, "help")
20
- end
21
- super
22
- end
23
- end
24
- end
25
- end
@@ -1,18 +0,0 @@
1
- class Jets::Process < Jets::Command
2
- autoload :Help, 'jets/process/help'
3
- autoload :ProcessorDeducer, 'jets/process/processor_deducer'
4
- autoload :BaseProcessor, 'jets/process/base_processor'
5
- autoload :ControllerProcessor, 'jets/process/controller_processor'
6
-
7
- class_option :verbose, type: :boolean
8
- class_option :noop, type: :boolean
9
- class_option :project_root, desc: "Project folder. Defaults to current directory", default: "."
10
- class_option :region, desc: "AWS region"
11
-
12
- desc "create STACK", "create a CloudFormation stack"
13
- option :randomize_stack_name, type: :boolean, desc: "tack on random string at the end of the stack name", default: nil
14
- long_desc Help.controller
15
- def controller(event, context, handler)
16
- ControllerProcessor.new(event, context, handler).run
17
- end
18
- end
@@ -1,23 +0,0 @@
1
- require 'json'
2
- require_relative 'processor_deducer'
3
-
4
- # Global overrides for Lambda processing
5
- $stdout.sync = true
6
- # This might seem weird but we want puts to write to stderr which is set in
7
- # the node shim to write to stderr. This directs the output to Lambda logs.
8
- # Printing to stdout can managle up the payload returned from Lambda function.
9
- # This is not desired if you want to return say a json payload to API Gateway
10
- # eventually.
11
- def puts(text)
12
- $stderr.puts(text)
13
- end
14
-
15
- class Jets::Process::BaseProcessor
16
- attr_reader :event, :context, :handler
17
- def initialize(event, context, handler)
18
- # assume valid json from Lambda
19
- @event = JSON.parse(event)
20
- @context = JSON.parse(context)
21
- @handler = handler
22
- end
23
- end
@@ -1,36 +0,0 @@
1
- require_relative "base_processor"
2
-
3
- class Jets::Process
4
- class ControllerProcessor < Jets::Process::BaseProcessor
5
- def run
6
- # Use the handler value (ie: posts.create) to deduce the user's business
7
- # code to require and run.
8
- deducer = ProcessorDeducer.new(handler)
9
- path = deducer.controller[:path]
10
- code = deducer.controller[:code]
11
-
12
- begin
13
- require path # require "app/controllers/posts_controller.rb"
14
- # Puts the return value of user's code to stdout because this is
15
- # what eventually gets used by API Gateway.
16
- # Explicitly using $stdout since puts redirected to $stderr.
17
-
18
- # result = PostsController.new(event, context).create
19
- result = instance_eval(code, path)
20
-
21
- # JSON.dump is pretty robust. If it cannot dump the structure into a
22
- # json string, it just dumps it to a plain text string.
23
- $stdout.puts JSON.dump(result) # only place where we write to stdout.
24
- rescue Exception => e
25
- # Customize error message slightly so nodejs shim can process the
26
- # returned error message.
27
- # The "RubyError: " is a marker that the javascript shim scans for.
28
- $stderr.puts("RubyError: #{e.class}: #{e.message}") # js needs this as the first line
29
- backtrace = e.backtrace.map {|l| " #{l}" }
30
- $stderr.puts(backtrace)
31
- # $stderr.puts("END OF RUBY OUTPUT")
32
- exit 1 # instead of re-raising to control the error backtrace output
33
- end
34
- end
35
- end
36
- end
@@ -1,11 +0,0 @@
1
- class Jets::Process::Help
2
- class << self
3
- def controller
4
- <<-EOL
5
- Examples:
6
-
7
- jets process controller '{ "we" : "love", "using" : "Lambda" }' '{"test": "1"}' "handlers/controllers/posts.create"
8
- EOL
9
- end
10
- end
11
- end
@@ -1,51 +0,0 @@
1
- class Jets::Process::ProcessorDeducer
2
- def initialize(handler)
3
- @handler = handler
4
- end
5
-
6
- # Deduces the path and method from the handler. Example:
7
- #
8
- # ProcessorDeducer.new("handlers/functions/posts.create").function
9
- # => {path: "app/functions/posts.rb", code: "create(event, context)"}
10
- #
11
- # Summary:
12
- #
13
- # Input:
14
- # handler: handlers/functions/posts.create
15
- # Output:
16
- # path: app/functions/posts.rb
17
- # code: create(event, context) # code to instance_eval
18
- #
19
- # Returns: {path: path, code: code}
20
- def function
21
- path, meth = @handler.split('.')
22
- path = Jets.root + path.sub("handlers", "app") + ".rb"
23
- code = "#{meth}(event, context)"
24
- {path: path, code: code}
25
- end
26
-
27
- # Deduces the path and method from the handler. Example:
28
- #
29
- # ProcessorDeducer.new("handlers/controllers/posts.create").controller
30
- # => {path: "controllers/posts_controller.rb", code: "create"}
31
- #
32
- # Summary:
33
- #
34
- # Input:
35
- # handler: handlers/controllers/posts.create
36
- # Output:
37
- # path: app/controllers/posts_controller.rb
38
- # code: create # code to instance_eval
39
- #
40
- # Returns: {path: path, code: code}
41
- def controller
42
- handler_path, meth = @handler.split('.')
43
-
44
- path = Jets.root + handler_path.sub("handlers", "app") + "_controller.rb"
45
- controller_name = handler_path.sub(%r{.*handlers/controllers/}, "") + "_controller" # posts_controller
46
- controller_class = controller_name.split('_').collect(&:capitalize).join # PostsController
47
- code = "#{controller_class}.new(event, context).#{meth}" # PostsController.new(event, context).create
48
-
49
- {path: path, code: code, class_name: controller_class}
50
- end
51
- end
@@ -1,23 +0,0 @@
1
- require 'ostruct'
2
-
3
- # The Project default options.
4
- # Overriden with config/project.yml
5
- class Jets::Project
6
- class << self
7
- def method_missing(method_name)
8
- options = Jets::Project.new.options
9
- options[method_name.to_sym]
10
- end
11
- end
12
-
13
- # Defaults
14
- def options
15
- OpenStruct.new(
16
- project_name: "proj", # shouldnt really be a default here
17
- env: ENV['JETS_ENV'] || 'dev', # shouldnt really be a default here
18
- timeout: 30,
19
- runtime: "nodejs6.10",
20
- memory_size: 1536
21
- )
22
- end
23
- end
@@ -1,107 +0,0 @@
1
- ## What is Jets?
2
-
3
- Jet's is a Lambda Framework that allows you to create AWS Lambda serverless applications with ruby. It includes everything required to build a web application and deploy it to AWS Lambda. It also can be used as a cost-effective worker system. For example, it can be used to write "cron" jobs.
4
-
5
- It is key to conceptually understand AWS Lambda and API Gateway to understand Jets. Jets maps your code to Lambda functions and API Gatway.
6
-
7
- * **AWS Lambda** is Functions as a Service. It allows you to upload and run functions without worrying about the underlying infrastructure.
8
- * **API Gateway** is a routing layer for Lambda. You can use it to route url endpoints to your Lambda functions.
9
-
10
- ## How It Works
11
-
12
- With Jets, you focus on your business logic and Jet's does the mechanical work. You write controllers, workers and functions and Jets automatically wire these up to Lambda and API Gateway for you.
13
-
14
- ### What is a Jets controller?
15
-
16
- A Jets controller handles a web request and rendering a response back to the user. Here's an example
17
-
18
- `app/controllers/posts_controller.rb`:
19
-
20
- ```ruby
21
- class PostsController < Jets::BaseController
22
- def create
23
- # event and context is automatically available as a Hash
24
- # render returns Lambda Proxy struture for web requests
25
- render json: event, status: 200
26
- end
27
-
28
- def update
29
- render json: event.merge(a: "update"), status: 200
30
- end
31
- end
32
- ```
33
-
34
- Jets creates up lambda functions for each of the controller public methods above when you run the `jets deploy` command.
35
-
36
- ### How do I connect API Gateway to the Lambda functions?
37
-
38
- You can hook the Lambda functions to url endpoints via API Gateway. To route an API Gateway endpoint to the controller action, add the following to your routes file:
39
-
40
- `config/routes.rb`:
41
-
42
- ```ruby
43
- # API Gateway resources are only created if the controller action exists.
44
- get "posts", to: "posts#index"
45
- get "posts/:id", to: "posts#show"
46
- post "posts", to: "posts#create"
47
- get "posts/:id/edit", to: "posts#edit"
48
- put "posts", to: "posts#update"
49
- delete "posts", to: "posts#destroy"
50
-
51
- resources :posts # macro that will creaet all the routes above
52
-
53
- any "posts/hot", to: "posts#hot" # GET, POST, PUT, etc request all work
54
- ```
55
-
56
- Run the `jets deploy` command to add the routes to API Gateway.
57
-
58
- ### Project Structure
59
-
60
- Here's an overview of the project structure.
61
-
62
- File / Directory | Description
63
- ------------- | -------------
64
- app/controllers | controllers code
65
- app/workers | workers code
66
- app/functions | functions code
67
- config/project.yml | project configs
68
- config/events.yml | events configs
69
- config/routes.rb | routes
70
-
71
-
72
- ## Usage
73
-
74
- ### Quick Start
75
-
76
- ```sh
77
- jets deploy
78
-
79
- jets deploy
80
- jets deploy function xxx
81
- jets deploy controller xxx
82
- jets deploy worker xxx
83
- ```
84
-
85
- ### Scaffolding
86
-
87
-
88
-
89
- ## Under the hood
90
-
91
- Lambda does not yet support ruby. So Jets uses a node shim and a bundled version of ruby to add support.
92
-
93
- ## Test
94
-
95
- Testing controller processing without node shim.
96
-
97
- ```
98
- jets process controller '{ "we" : "love", "using" : "Lambda" }' '{"test": "1"}' "handlers/controllers/posts.create"
99
- ```
100
-
101
- Testing the generated node shim handler and the controller processing.
102
-
103
- ```
104
- cd spec/fixtures/project
105
- jets build # generates the handlers
106
- node handlers/controllers/posts.js
107
- ```
@@ -1,3 +0,0 @@
1
- Q: Is it slower using a node shim?
2
- Yes, the node shim adds a little bit of overhead. The overhead is of the node shim is about 500ms with a function configured to use 1.5GB of RAM. If your application requires faster response times than than then you will have to wait for official ruby support from AWS.
3
-
@@ -1,34 +0,0 @@
1
- ```sh
2
- RUBY_VERSION 2.2.2
3
- /var/task/bundled/gems/ruby/2.2.0/gems/bin/print_ruby_info
4
- LOAD_PATH:
5
- /var/task/bundled/gems/ruby/2.2.0/gems/print_ruby_info-0.0.3/lib
6
- /var/task/bundled/gems/ruby/2.2.0/gems/jets-0.1.1/lib
7
- /var/task/bundled/gems/ruby/2.2.0/gems/thor-0.20.0/lib
8
- /var/task/bundled/gems/ruby/2.2.0/gems/hashie-3.5.6/lib
9
- /var/task/bundled/gems/ruby/2.2.0/gems/colorize-0.8.1/lib
10
- /var/task/bundled/ruby/lib/ruby/gems/2.2.0/gems/bundler-1.9.9/lib/gems/bundler-1.9.9/lib
11
- /var/task/bundled/gems/ruby/2.2.0/gems/activesupport-5.1.4/lib
12
- /var/task/bundled/gems/ruby/2.2.0/gems/tzinfo-1.2.3/lib
13
- /var/task/bundled/gems/ruby/2.2.0/gems/thread_safe-0.3.6/lib
14
- /var/task/bundled/gems/ruby/2.2.0/gems/minitest-5.10.3/lib
15
- /var/task/bundled/gems/ruby/2.2.0/gems/i18n-0.9.0/lib
16
- /var/task/bundled/gems/ruby/2.2.0/gems/concurrent-ruby-1.0.5/lib
17
- /var/task/bundled/ruby/lib/ruby/gems/2.2.0/gems/bundler-1.9.9/lib
18
- /var/task/bundled/ruby/lib/ruby/site_ruby/2.2.0
19
- /var/task/bundled/ruby/lib/ruby/site_ruby/2.2.0/x86_64-linux
20
- /var/task/bundled/ruby/lib/ruby/site_ruby
21
- /var/task/bundled/ruby/lib/ruby/vendor_ruby/2.2.0
22
- /var/task/bundled/ruby/lib/ruby/vendor_ruby/2.2.0/x86_64-linux
23
- /var/task/bundled/ruby/lib/ruby/vendor_ruby
24
- /var/task/bundled/ruby/lib/ruby/2.2.0
25
- /var/task/bundled/ruby/lib/ruby/2.2.0/x86_64-linux
26
- /tmp/ruby/lib/ruby/site_ruby/2.2.0
27
- /tmp/ruby/lib/ruby/site_ruby/2.2.0/x86_64-linux
28
- /tmp/ruby/lib/ruby/site_ruby
29
- /tmp/ruby/lib/ruby/vendor_ruby/2.2.0
30
- /tmp/ruby/lib/ruby/vendor_ruby/2.2.0/x86_64-linux
31
- /tmp/ruby/lib/ruby/vendor_ruby
32
- /tmp/ruby/lib/ruby/2.2.0
33
- /tmp/ruby/lib/ruby/2.2.0/x86_64-linux
34
- ```