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,80 @@
1
+ class Jets::Controller
2
+ autoload :Renderers, "jets/controller/renderers"
3
+
4
+ module Rendering
5
+ include Redirection
6
+
7
+ def ensure_render
8
+ return @rendered_data if @rendered
9
+
10
+ # defaults to rendering templates
11
+ Renderers::TemplateRenderer.new(self, default_options).render
12
+ end
13
+
14
+ # Many different ways to render:
15
+ #
16
+ # render "articles/index", layout: "application"
17
+ # render :new
18
+ # render template: "articles/index", layout: "application"
19
+ # render json: {my: "data"}
20
+ # render text: "plain text"
21
+ def render(options={}, rest={})
22
+ raise "DoubleRenderError" if @rendered
23
+
24
+ if options.is_a?(Symbol) or options.is_a?(String)
25
+ options = normalize_options(options, rest)
26
+ end
27
+
28
+ options.reverse_merge!(default_options)
29
+ adjust_content_type!(options)
30
+ @rendered_data = Renderers::TemplateRenderer.new(self, options).render
31
+
32
+ @rendered = true
33
+ @rendered_data
34
+ end
35
+
36
+ def adjust_content_type!(options)
37
+ if options.key?(:json)
38
+ options[:content_type] = "application/json"
39
+ end
40
+ end
41
+
42
+ def default_options
43
+ layout = self.class.layout.nil? ? default_layout : self.class.layout
44
+ { layout: layout }
45
+ end
46
+
47
+ def default_layout
48
+ application_layout_exist = !Dir.glob("#{Jets.root}app/views/layouts/application*").empty?
49
+ "application" if application_layout_exist
50
+ end
51
+
52
+ # Can normalize the options when it is a String or a Symbol
53
+ # Also set defaults here like the layout.
54
+ # Ensure options is a Hash, not a String or Symbol.
55
+ def normalize_options(options, rest)
56
+ template = options.to_s
57
+ rest.merge(template: template)
58
+ end
59
+
60
+ # Add API Gateway Stage Name
61
+ def add_stage_name(url)
62
+ return url unless actual_host
63
+
64
+ if actual_host.include?("amazonaws.com") && url.starts_with?('/')
65
+ stage_name = [Jets.config.short_env, Jets.config.env_extra].compact.join('_').gsub('-','_') # Stage name only allows a-zA-Z0-9_
66
+ url = "/#{stage_name}#{url}"
67
+ end
68
+ url
69
+ end
70
+
71
+ def url_for(url)
72
+ add_stage_name(url)
73
+ end
74
+
75
+ def actual_host
76
+ headers["host"]
77
+ end
78
+
79
+ end
80
+ end
@@ -0,0 +1,55 @@
1
+ # Somewhat based off of: https://github.com/rails/rails/blob/master/actionpack/lib/action_dispatch/http/request.rb
2
+ class Jets::Controller
3
+ class Request
4
+ def initialize(event)
5
+ @event = event
6
+ end
7
+
8
+ # lambda integration proxy headers
9
+ HEADER_METHODS = %w[
10
+ Accept
11
+ Accept-Encoding
12
+ Accept-Language
13
+ cache-control
14
+ CloudFront-Forwarded-Proto
15
+ CloudFront-Is-Desktop-Viewer
16
+ CloudFront-Is-Mobile-Viewer
17
+ CloudFront-Is-SmartTV-Viewer
18
+ CloudFront-Is-Tablet-Viewer
19
+ CloudFront-Viewer-Country
20
+ content-type
21
+ Host
22
+ origin
23
+ Referer
24
+ upgrade-insecure-requests
25
+ User-Agent
26
+ Via
27
+ X-Amz-Cf-Id
28
+ X-Amzn-Trace-Id
29
+ X-Forwarded-For
30
+ X-Forwarded-Port
31
+ X-Forwarded-Proto
32
+ ].freeze
33
+
34
+ HEADER_METHODS.each do |meth|
35
+ class_eval <<-METHOD, __FILE__, __LINE__ + 1
36
+ def #{meth.downcase.underscore} # def content_type
37
+ headers["#{meth.downcase}"].freeze # headers["content-type"]
38
+ end # end
39
+ METHOD
40
+ end
41
+
42
+ # API Gateway is inconsistent about how it cases it keys.
43
+ # Sometimes it is "x-requested-with" vs "X-Requested-With"
44
+ # Normalize it with downcase.
45
+ def headers
46
+ headers = @event["headers"] || {}
47
+ headers.transform_keys { |key| key.downcase }
48
+ end
49
+
50
+ def xhr?
51
+ headers["x-requested-with"] == "XMLHttpRequest"
52
+ end
53
+
54
+ end
55
+ end
@@ -0,0 +1,81 @@
1
+ require 'logger'
2
+ require 'active_support/dependencies'
3
+ require 'memoist'
4
+
5
+ module Jets::Core
6
+ extend Memoist
7
+
8
+ # Calling application triggers load of configs.
9
+ # Jets' the default config/application.rb is loaded,
10
+ # then the project's config/application.rb is loaded.
11
+ @@application = nil
12
+ def application
13
+ return @@application if @@application
14
+
15
+ @@application = Jets::Application.new
16
+ @@application.setup!
17
+ @@application
18
+ end
19
+ # For some reason memoize doesnt work with application, think there's
20
+ # some circular dependency issue. Figure this out later.
21
+
22
+ def config
23
+ application.config
24
+ end
25
+
26
+ # Load all application base classes and project classes
27
+ def boot
28
+ Jets::Booter.boot!
29
+ end
30
+
31
+ # Ensures trailing slash
32
+ # Useful for appending a './' in front of a path or leaving it alone.
33
+ # Returns: '/path/with/trailing/slash/' or './'
34
+ # @@root = nil
35
+ # def root
36
+ # return @@root if @@root
37
+ # @@root = ENV['JETS_ROOT'].to_s
38
+ # @@root = '.' if @@root == ''
39
+ # @@root = "#{@@root}/" unless @@root.ends_with?('/')
40
+ # @@root = Pathname.new(@@root)
41
+ # end
42
+
43
+ def root
44
+ root = ENV['JETS_ROOT'].to_s
45
+ root = '.' if root == ''
46
+ root = "#{root}/" unless root.ends_with?('/')
47
+ Pathname.new(root)
48
+ end
49
+ memoize :root
50
+
51
+ def env
52
+ env = ENV['JETS_ENV'] || 'development'
53
+ ENV['RAILS_ENV'] = ENV['RACK_ENV'] = env
54
+ ActiveSupport::StringInquirer.new(env)
55
+ end
56
+ memoize :env
57
+
58
+ def build_root
59
+ "/tmp/jets/#{config.project_name}".freeze
60
+ end
61
+ memoize :build_root
62
+
63
+ def logger
64
+ Logger.new($stderr)
65
+ end
66
+ memoize :logger
67
+
68
+ def webpacker?
69
+ Gem.loaded_specs.keys.include?("webpacker")
70
+ end
71
+ memoize :webpacker?
72
+
73
+ def load_tasks
74
+ Jets::Commands::RakeTasks.load!
75
+ end
76
+
77
+ def version
78
+ Jets::VERSION
79
+ end
80
+
81
+ end
@@ -0,0 +1,20 @@
1
+ Jets.application.configure do
2
+ config.project_name = "proj"
3
+ # config.env_extra = 2 # Optional. Any value works: 1,2,abc,xyz
4
+ # Allows creation of multiple instances of env.
5
+ config.cors = true
6
+ config.autoload_paths = %w[
7
+ app/controllers
8
+ app/models
9
+ app/jobs
10
+ app/rules
11
+ app/helpers
12
+ ]
13
+ config.extra_autoload_paths = []
14
+
15
+ # function properties defaults
16
+ config.function = ActiveSupport::OrderedOptions.new
17
+ config.function.timeout = 10
18
+ config.function.memory_size = 3008
19
+ end
20
+
@@ -0,0 +1,37 @@
1
+ require 'dotenv'
2
+
3
+ class Jets::Dotenv
4
+ def self.load!(deploy=false)
5
+ new(deploy).load!
6
+ end
7
+
8
+ def initialize(deploy=false)
9
+ @deploy = deploy
10
+ end
11
+
12
+ def load!
13
+ ::Dotenv.load(*dotenv_files)
14
+ end
15
+
16
+ # dotenv files will load the following files, starting from the bottom. The first value set (or those already defined in the environment) take precedence:
17
+
18
+ # - `.env` - The Original®
19
+ # - `.env.development`, `.env.test`, `.env.production` - Environment-specific settings.
20
+ # - `.env.local` - Local overrides. This file is loaded for all environments _except_ `test`.
21
+ # - `.env.development.local`, `.env.test.local`, `.env.production.local` - Local overrides of environment-specific settings.
22
+ #
23
+ def dotenv_files
24
+ files = [
25
+ root.join(".env"),
26
+ (root.join(".env.local") unless Jets.env.test?),
27
+ root.join(".env.#{Jets.env}"),
28
+ root.join(".env.#{Jets.env}.local"),
29
+ ]
30
+ files << root.join(".env.#{Jets.env}.deploy") if @deploy
31
+ files.compact
32
+ end
33
+
34
+ def root
35
+ Jets.root || Pathname.new(ENV["JETS_ROOT"] || Dir.pwd)
36
+ end
37
+ end
@@ -0,0 +1,51 @@
1
+ require 'erb'
2
+
3
+ # Renders Erb and provide better backtrace where there's an error
4
+ #
5
+ # Usage:
6
+ #
7
+ # result = Jets::Erb.result(path, key1: "val1", key2: "val2")
8
+ #
9
+ class Jets::Erb
10
+ class << self
11
+ def result(path, variables={})
12
+ set_template_variables(variables)
13
+ template = IO.read(path)
14
+ begin
15
+ ERB.new(template, nil, "-").result(binding)
16
+ rescue Exception => e
17
+ puts e
18
+ puts e.backtrace if ENV['DEBUG']
19
+
20
+ # how to know where ERB stopped? - https://www.ruby-forum.com/topic/182051
21
+ # syntax errors have the (erb):xxx info in e.message
22
+ # undefined variables have (erb):xxx info in e.backtrac
23
+ error_info = e.message.split("\n").grep(/\(erb\)/)[0]
24
+ error_info ||= e.backtrace.grep(/\(erb\)/)[0]
25
+ raise unless error_info # unable to find the (erb):xxx: error line
26
+ line = error_info.split(':')[1].to_i
27
+ puts "Error evaluating ERB template on line #{line.to_s.colorize(:red)} of: #{path.sub(/^\.\//, '').colorize(:green)}"
28
+
29
+ template_lines = template.split("\n")
30
+ context = 5 # lines of context
31
+ top, bottom = [line-context-1, 0].max, line+context-1
32
+ spacing = template_lines.size.to_s.size
33
+ template_lines[top..bottom].each_with_index do |line_content, index|
34
+ line_number = top+index+1
35
+ if line_number == line
36
+ printf("%#{spacing}d %s\n".colorize(:red), line_number, line_content)
37
+ else
38
+ printf("%#{spacing}d %s\n", line_number, line_content)
39
+ end
40
+ end
41
+ exit 1 unless ENV['TEST']
42
+ end
43
+ end
44
+
45
+ def set_template_variables(variables)
46
+ variables.each do |key, value|
47
+ instance_variable_set(:"@#{key}", value)
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,40 @@
1
+ require "rails/configuration"
2
+
3
+ # Piggy back off of Rails Generators.
4
+ class Jets::Generator
5
+ def self.invoke(generator, *args)
6
+ new(generator, *args).invoke
7
+ end
8
+
9
+ def initialize(generator, *args)
10
+ @generator = generator
11
+ @args = args
12
+ end
13
+
14
+ def invoke
15
+ Rails::Generators.configure!(config)
16
+ Rails::Generators.invoke(@generator, @args, behavior: :invoke, destination_root: Jets.root)
17
+ end
18
+
19
+ def config
20
+ g = Rails::Configuration::Generators.new
21
+ g.orm :active_record, migration: true, timestamps: true
22
+ # TODO: support g.orm :dynamodb
23
+ g.template_engine :erb
24
+ g.test_framework false #:test_unit, fixture: false
25
+ # g.test_framework :rspec # need to
26
+ # TODO: load rspec configuration to use rspec
27
+ g.stylesheets false
28
+ g.javascripts false
29
+ g.assets false
30
+ g.api Jets.config.api_generator
31
+ g.resource_route true
32
+ g.templates.unshift(template_paths)
33
+ g
34
+ end
35
+
36
+ def template_paths
37
+ templates_path = File.expand_path("../generator/templates", __FILE__)
38
+ [templates_path]
39
+ end
40
+ end
@@ -0,0 +1,2 @@
1
+ <h1><%= class_name %>#<%= @action %></h1>
2
+ <p>Find me in <%= @path %></p>
@@ -0,0 +1,39 @@
1
+ <%% editing = @event["path"].include?("edit") %>
2
+ <%% action = editing ? "/<%= plural_table_name %>/#{<%= singular_table_name %>.id}" : "/<%= plural_table_name %>" %>
3
+ <%%= form_tag(action) do %>
4
+ <%% if editing -%>
5
+ <input type="hidden" name="_method" value="put" />
6
+ <%% end -%>
7
+ <%% if <%= singular_table_name %>.errors.any? %>
8
+ <div id="error_explanation">
9
+ <h2><%%= pluralize(<%= singular_table_name %>.errors.count, "error") %> prohibited this <%= singular_table_name %> from being saved:</h2>
10
+
11
+ <ul>
12
+ <%% <%= singular_table_name %>.errors.full_messages.each do |message| %>
13
+ <li><%%= message %></li>
14
+ <%% end %>
15
+ </ul>
16
+ </div>
17
+ <%% end %>
18
+
19
+ <% attributes.each do |attribute| -%>
20
+ <div class="field">
21
+ <% if attribute.password_digest? -%>
22
+ <%%= label_tag :password %>
23
+ <%%= password_field_tag :password, <%= singular_table_name %>.<%= attribute.column_name %> %>
24
+ </div>
25
+
26
+ <div class="field">
27
+ <%%= label_tag :password_confirmation %>
28
+ <%%= password_field_tag :password_confirmation, <%= singular_table_name %>.<%= attribute.column_name %> %>
29
+ <% else -%>
30
+ <%%= label_tag :<%= attribute.column_name %> %>
31
+ <%%= <%= attribute.field_type %>_tag "<%= "#{singular_table_name}[#{attribute.column_name}]" %>"<%= ", 'yes'" if attribute.field_type =~ /check_box/ %>, <%= singular_table_name %>.<%= attribute.column_name %> %>
32
+ <% end -%>
33
+ </div>
34
+
35
+ <% end -%>
36
+ <div class="actions">
37
+ <%%= submit_tag("Submit") %>
38
+ </div>
39
+ <%% end %>
@@ -0,0 +1,6 @@
1
+ <h1>Editing <%= singular_table_name.titleize %></h1>
2
+
3
+ <%%= render 'form', <%= singular_table_name %>: @<%= singular_table_name %> %>
4
+
5
+ <%%= link_to 'Show', "/<%= plural_table_name %>/#{@<%= singular_table_name %>.id}" %> |
6
+ <%%= link_to 'Back', "/<%= plural_table_name %>" %>
@@ -0,0 +1,29 @@
1
+ <h1><%= plural_table_name.titleize %></h1>
2
+
3
+ <table>
4
+ <thead>
5
+ <tr>
6
+ <% attributes.reject(&:password_digest?).each do |attribute| -%>
7
+ <th><%= attribute.human_name %></th>
8
+ <% end -%>
9
+ <th colspan="3"></th>
10
+ </tr>
11
+ </thead>
12
+
13
+ <tbody>
14
+ <%% @<%= plural_table_name %>.each do |<%= singular_table_name %>| %>
15
+ <tr class="jets-element-to-delete">
16
+ <% attributes.reject(&:password_digest?).each do |attribute| -%>
17
+ <td><%%= <%= singular_table_name %>.<%= attribute.name %> %></td>
18
+ <% end -%>
19
+ <td><%%= link_to 'Show', "/<%= plural_table_name %>/#{<%= singular_table_name %>.id}" %></td>
20
+ <td><%%= link_to 'Edit', "/<%= plural_table_name %>/#{<%= singular_table_name %>.id}/edit" %></td>
21
+ <td><%%= link_to 'Destroy', "/<%= plural_table_name %>/#{<%= singular_table_name %>.id}", method: :delete, data: { confirm: 'Are you sure?' } %></td>
22
+ </tr>
23
+ <%% end %>
24
+ </tbody>
25
+ </table>
26
+
27
+ <br>
28
+
29
+ <%%= link_to 'New <%= singular_table_name.titleize %>', "/<%= plural_table_name %>/new" %>