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.
- checksums.yaml +5 -5
- data/.circleci/bin/commit_docs.sh +26 -0
- data/.circleci/config.yml +126 -0
- data/.codebuild/README.md +57 -0
- data/.codebuild/bin/jets +3 -0
- data/.codebuild/buildspec-base.yml +14 -0
- data/.codebuild/integration.sh +54 -0
- data/.codebuild/jets.postman_collection.json +323 -0
- data/.codebuild/scripts/install-docker.sh +12 -0
- data/.codebuild/scripts/install-dynamodb-local.sh +22 -0
- data/.codebuild/scripts/install-java.sh +20 -0
- data/.codebuild/scripts/install-node.sh +4 -0
- data/.gitignore +3 -0
- data/.gitmodules +9 -0
- data/.python-version +1 -0
- data/.rspec +2 -0
- data/.ruby-version +1 -1
- data/CHANGELOG.md +3 -0
- data/Dockerfile +16 -0
- data/Dockerfile.base +53 -0
- data/Gemfile +8 -1
- data/Gemfile.lock +132 -28
- data/LICENSE.txt +1 -1
- data/Procfile +2 -0
- data/README.md +116 -17
- data/Rakefile +6 -0
- data/buildspec.yml +18 -0
- data/exe/jets +14 -0
- data/jets.gemspec +31 -3
- data/lib/jets.rb +56 -8
- data/lib/jets/application.rb +121 -0
- data/lib/jets/application/middleware.rb +23 -0
- data/lib/jets/aws_services.rb +71 -0
- data/lib/jets/booter.rb +95 -0
- data/lib/jets/builders.rb +6 -0
- data/lib/jets/builders/code_builder.rb +431 -0
- data/lib/jets/builders/deducer.rb +73 -0
- data/lib/jets/builders/gem_replacer.rb +154 -0
- data/lib/jets/builders/handler_generator.rb +76 -0
- data/lib/jets/builders/node-hello.js +73 -0
- data/lib/jets/builders/node-shim.js +151 -0
- data/lib/jets/cfn.rb +5 -4
- data/lib/jets/cfn/ship.rb +178 -0
- data/lib/jets/cfn/status.rb +208 -0
- data/lib/jets/cfn/template_builders.rb +21 -0
- data/lib/jets/cfn/template_builders/api_gateway_builder.rb +73 -0
- data/lib/jets/cfn/template_builders/api_gateway_deployment_builder.rb +38 -0
- data/lib/jets/cfn/template_builders/base_child_builder.rb +38 -0
- data/lib/jets/cfn/template_builders/controller_builder.rb +107 -0
- data/lib/jets/cfn/template_builders/function_builder.rb +20 -0
- data/lib/jets/cfn/template_builders/function_properties.rb +6 -0
- data/lib/jets/cfn/template_builders/function_properties/base_builder.rb +106 -0
- data/lib/jets/cfn/template_builders/function_properties/node_builder.rb +12 -0
- data/lib/jets/cfn/template_builders/function_properties/python_builder.rb +12 -0
- data/lib/jets/cfn/template_builders/function_properties/ruby_builder.rb +13 -0
- data/lib/jets/cfn/template_builders/interface.rb +91 -0
- data/lib/jets/cfn/template_builders/job_builder.rb +63 -0
- data/lib/jets/cfn/template_builders/parent_builder.rb +97 -0
- data/lib/jets/cfn/template_builders/rule_builder.rb +55 -0
- data/lib/jets/cfn/template_builders/templates/minimal-stack.yml +45 -0
- data/lib/jets/cfn/template_mappers.rb +23 -0
- data/lib/jets/cfn/template_mappers/api_gateway_deployment_mapper.rb +48 -0
- data/lib/jets/cfn/template_mappers/api_gateway_mapper.rb +4 -0
- data/lib/jets/cfn/template_mappers/child_mapper.rb +41 -0
- data/lib/jets/cfn/template_mappers/config_rule_mapper.rb +34 -0
- data/lib/jets/cfn/template_mappers/controller_mapper.rb +36 -0
- data/lib/jets/cfn/template_mappers/events_rule_mapper.rb +40 -0
- data/lib/jets/cfn/template_mappers/function_mapper.rb +4 -0
- data/lib/jets/cfn/template_mappers/gateway_method_mapper.rb +56 -0
- data/lib/jets/cfn/template_mappers/gateway_resource_mapper.rb +62 -0
- data/lib/jets/cfn/template_mappers/job_mapper.rb +4 -0
- data/lib/jets/cfn/template_mappers/lambda_function_mapper.rb +50 -0
- data/lib/jets/cfn/template_mappers/rule_mapper.rb +5 -0
- data/lib/jets/cli.rb +180 -15
- data/lib/jets/commands.rb +22 -0
- data/lib/jets/commands/base.rb +151 -0
- data/lib/jets/commands/build.rb +186 -0
- data/lib/jets/commands/call.rb +175 -0
- data/lib/jets/commands/call/anonymous_guesser.rb +96 -0
- data/lib/jets/commands/call/autoload_guesser.rb +112 -0
- data/lib/jets/commands/call/base_guesser.rb +33 -0
- data/lib/jets/commands/call/guesser.rb +51 -0
- data/lib/jets/commands/console.rb +12 -0
- data/lib/jets/commands/db.rb +15 -0
- data/lib/jets/commands/db/environment-task.rake +3 -0
- data/lib/jets/commands/db/tasks.rb +30 -0
- data/lib/jets/commands/dbconsole.rb +131 -0
- data/lib/jets/commands/delete.rb +119 -0
- data/lib/jets/commands/deploy.rb +53 -0
- data/lib/jets/commands/dynamodb.rb +22 -0
- data/lib/jets/commands/dynamodb/migrate.rb +9 -0
- data/lib/jets/commands/dynamodb/migrator.rb +36 -0
- data/lib/jets/commands/help.rb +9 -0
- data/lib/jets/commands/help/build.md +1 -0
- data/lib/jets/commands/help/call.md +55 -0
- data/lib/jets/commands/help/console.md +4 -0
- data/lib/jets/commands/help/db/generate.md +8 -0
- data/lib/jets/commands/help/dbconsole.md +5 -0
- data/lib/jets/commands/help/delete.md +9 -0
- data/lib/jets/commands/help/deploy.md +5 -0
- data/lib/jets/commands/help/dynamodb/generate.md +50 -0
- data/lib/jets/commands/help/dynamodb/migrate.md +4 -0
- data/lib/jets/commands/help/generate.md +5 -0
- data/lib/jets/commands/help/new.md +9 -0
- data/lib/jets/commands/help/process/controller.md +6 -0
- data/lib/jets/commands/help/process/function.md +5 -0
- data/lib/jets/commands/help/process/job.md +5 -0
- data/lib/jets/commands/help/process/rule.md +5 -0
- data/lib/jets/commands/help/routes.md +3 -0
- data/lib/jets/commands/help/server.md +6 -0
- data/lib/jets/commands/help/status.md +1 -0
- data/lib/jets/commands/help/url.md +5 -0
- data/lib/jets/commands/main.rb +111 -0
- data/lib/jets/commands/markdown.rb +8 -0
- data/lib/jets/commands/markdown/creator.rb +58 -0
- data/lib/jets/commands/markdown/index.rb +27 -0
- data/lib/jets/commands/markdown/page.rb +125 -0
- data/lib/jets/commands/markdown/shell.rb +11 -0
- data/lib/jets/commands/new.rb +110 -0
- data/lib/jets/commands/rake_command.rb +61 -0
- data/lib/jets/commands/rake_tasks.rb +45 -0
- data/lib/jets/commands/sequence.rb +44 -0
- data/lib/jets/commands/stack_info.rb +30 -0
- data/lib/jets/commands/templates/skeleton/.env +2 -0
- data/lib/jets/commands/templates/skeleton/.env.development.tt +3 -0
- data/lib/jets/commands/templates/skeleton/.env.test +3 -0
- data/lib/jets/commands/templates/skeleton/.gitignore +14 -0
- data/lib/jets/commands/templates/skeleton/.jetskeep +1 -0
- data/lib/jets/commands/templates/skeleton/Gemfile.tt +27 -0
- data/lib/jets/commands/templates/skeleton/Procfile +7 -0
- data/lib/jets/commands/templates/skeleton/README.md +4 -0
- data/lib/jets/commands/templates/skeleton/Rakefile +2 -0
- data/lib/jets/commands/templates/skeleton/app/controllers/application_controller.rb +2 -0
- data/lib/jets/commands/templates/skeleton/app/helpers/application_helper.rb +2 -0
- data/lib/jets/commands/templates/skeleton/app/jobs/application_job.rb +2 -0
- data/lib/jets/commands/templates/skeleton/app/models/application_item.rb +2 -0
- data/lib/jets/commands/templates/skeleton/app/models/application_record.rb +3 -0
- data/lib/jets/commands/templates/skeleton/app/views/layouts/application.html.erb.tt +24 -0
- data/lib/jets/commands/templates/skeleton/bin/ruby_server +18 -0
- data/lib/jets/commands/templates/skeleton/bin/ruby_server.rb +2 -0
- data/lib/jets/commands/templates/skeleton/config.ru +4 -0
- data/lib/jets/commands/templates/skeleton/config/application.rb.tt +26 -0
- data/lib/jets/commands/templates/skeleton/config/database.yml.tt +27 -0
- data/lib/jets/commands/templates/skeleton/config/dynamodb.yml +25 -0
- data/lib/jets/commands/templates/skeleton/config/routes.rb +8 -0
- data/lib/jets/commands/templates/skeleton/db/.gitkeep +0 -0
- data/lib/jets/commands/templates/skeleton/public/404.html +67 -0
- data/lib/jets/commands/templates/skeleton/public/422.html +67 -0
- data/lib/jets/commands/templates/skeleton/public/500.html +66 -0
- data/lib/jets/commands/templates/skeleton/public/favicon.ico +0 -0
- data/lib/jets/commands/templates/skeleton/public/index.html.tt +79 -0
- data/lib/jets/commands/templates/skeleton/spec/controllers/posts_controller_spec.rb +18 -0
- data/lib/jets/commands/templates/skeleton/spec/fixtures/payloads/posts-index.json +51 -0
- data/lib/jets/commands/templates/skeleton/spec/fixtures/payloads/posts-show.json +53 -0
- data/lib/jets/commands/templates/skeleton/spec/spec_helper.rb.tt +27 -0
- data/lib/jets/commands/templates/webpacker/app/javascript/packs/application.js.tt +14 -0
- data/lib/jets/commands/templates/webpacker/app/javascript/packs/theme.scss.tt +24 -0
- data/lib/jets/commands/templates/webpacker/app/javascript/src/jets/crud.js +87 -0
- data/lib/jets/commands/url.rb +45 -0
- data/lib/jets/commands/webpacker_template.rb +19 -0
- data/lib/jets/controller.rb +9 -0
- data/lib/jets/controller/base.rb +50 -0
- data/lib/jets/controller/callbacks.rb +43 -0
- data/lib/jets/controller/layout.rb +17 -0
- data/lib/jets/controller/params.rb +53 -0
- data/lib/jets/controller/redirection.rb +55 -0
- data/lib/jets/controller/renderers.rb +5 -0
- data/lib/jets/controller/renderers/aws_proxy_renderer.rb +69 -0
- data/lib/jets/controller/renderers/base_renderer.rb +16 -0
- data/lib/jets/controller/renderers/template_renderer.rb +107 -0
- data/lib/jets/controller/rendering.rb +80 -0
- data/lib/jets/controller/request.rb +55 -0
- data/lib/jets/core.rb +81 -0
- data/lib/jets/default/application.rb +20 -0
- data/lib/jets/dotenv.rb +37 -0
- data/lib/jets/erb.rb +51 -0
- data/lib/jets/generator.rb +40 -0
- data/lib/jets/generator/templates/erb/controller/view.html.erb +2 -0
- data/lib/jets/generator/templates/erb/scaffold/_form.html.erb +39 -0
- data/lib/jets/generator/templates/erb/scaffold/edit.html.erb +6 -0
- data/lib/jets/generator/templates/erb/scaffold/index.html.erb +29 -0
- data/lib/jets/generator/templates/erb/scaffold/new.html.erb +5 -0
- data/lib/jets/generator/templates/erb/scaffold/show.html.erb +9 -0
- data/lib/jets/generator/templates/rails/assets/javascript.js +2 -0
- data/lib/jets/generator/templates/rails/assets/stylesheet.css +4 -0
- data/lib/jets/generator/templates/rails/controller/controller.rb +13 -0
- data/lib/jets/generator/templates/rails/helper/helper.rb +4 -0
- data/lib/jets/generator/templates/rails/scaffold/scaffold.css +80 -0
- data/lib/jets/generator/templates/rails/scaffold_controller/api_controller.rb +62 -0
- data/lib/jets/generator/templates/rails/scaffold_controller/controller.rb +71 -0
- data/lib/jets/internal/app/controllers/jets/public_controller.rb +30 -0
- data/lib/jets/internal/app/controllers/jets/public_controller/python/show.py +47 -0
- data/lib/jets/internal/app/controllers/jets/public_controller/python/show.pyc +0 -0
- data/lib/jets/internal/app/controllers/jets/welcome_controller.rb +22 -0
- data/lib/jets/internal/app/controllers/jets/welcome_controller/python/index.py +24 -0
- data/lib/jets/internal/app/jobs/jets/preheat_job.rb +52 -0
- data/lib/jets/job.rb +5 -0
- data/lib/jets/job/base.rb +29 -0
- data/lib/jets/job/dsl.rb +58 -0
- data/lib/jets/job/task.rb +17 -0
- data/lib/jets/klass.rb +71 -0
- data/lib/jets/lambda.rb +18 -0
- data/lib/jets/lambda/dsl.rb +153 -0
- data/lib/jets/lambda/function.rb +29 -0
- data/lib/jets/lambda/function_constructor.rb +60 -0
- data/lib/jets/lambda/functions.rb +22 -0
- data/lib/jets/lambda/task.rb +77 -0
- data/lib/jets/naming.rb +61 -0
- data/lib/jets/pascalize.rb +30 -0
- data/lib/jets/poly_fun.rb +61 -0
- data/lib/jets/poly_fun/base_executor.rb +129 -0
- data/lib/jets/poly_fun/lambda_executor.rb +16 -0
- data/lib/jets/poly_fun/node_error.rb +8 -0
- data/lib/jets/poly_fun/node_executor.rb +54 -0
- data/lib/jets/poly_fun/python_error.rb +8 -0
- data/lib/jets/poly_fun/python_executor.rb +23 -0
- data/lib/jets/preheat.rb +72 -0
- data/lib/jets/processors.rb +4 -0
- data/lib/jets/processors/deducer.rb +54 -0
- data/lib/jets/processors/main_processor.rb +57 -0
- data/lib/jets/rails_overrides.rb +4 -0
- data/lib/jets/rails_overrides/asset_tag_helper.rb +41 -0
- data/lib/jets/rails_overrides/common_methods.rb +13 -0
- data/lib/jets/rails_overrides/rendering_helper.rb +26 -0
- data/lib/jets/rails_overrides/url_helper.rb +26 -0
- data/lib/jets/route.rb +145 -0
- data/lib/jets/router.rb +115 -0
- data/lib/jets/ruby_server.rb +91 -0
- data/lib/jets/rule.rb +5 -0
- data/lib/jets/rule/base.rb +19 -0
- data/lib/jets/rule/dsl.rb +64 -0
- data/lib/jets/rule/task.rb +44 -0
- data/lib/jets/server.rb +16 -0
- data/lib/jets/server/api_gateway.rb +39 -0
- data/lib/jets/server/lambda_aws_proxy.rb +122 -0
- data/lib/jets/server/route_matcher.rb +96 -0
- data/lib/jets/server/timing_middleware.rb +16 -0
- data/lib/jets/server/webpacker_setup.rb +7 -0
- data/lib/jets/timing.rb +65 -0
- data/lib/jets/timing/report.rb +82 -0
- data/lib/jets/util.rb +7 -12
- data/lib/jets/version.rb +1 -1
- data/support/clean +3 -0
- data/support/console +3 -0
- metadata +473 -76
- data/bin/jets +0 -14
- data/lib/jets/base_controller.rb +0 -54
- data/lib/jets/build.rb +0 -46
- data/lib/jets/build/handler_generator.rb +0 -46
- data/lib/jets/build/lambda_deducer.rb +0 -23
- data/lib/jets/build/templates/handler.js +0 -149
- data/lib/jets/build/traveling_ruby.rb +0 -133
- data/lib/jets/cfn/base.rb +0 -17
- data/lib/jets/cfn/builder.rb +0 -53
- data/lib/jets/cfn/namer.rb +0 -30
- data/lib/jets/cli/help.rb +0 -19
- data/lib/jets/command.rb +0 -25
- data/lib/jets/process.rb +0 -18
- data/lib/jets/process/base_processor.rb +0 -23
- data/lib/jets/process/controller_processor.rb +0 -36
- data/lib/jets/process/help.rb +0 -11
- data/lib/jets/process/processor_deducer.rb +0 -51
- data/lib/jets/project.rb +0 -23
- data/notes/design.md +0 -107
- data/notes/faq.md +0 -3
- data/notes/lambda_ruby_info.md +0 -34
- data/notes/traveling-ruby-packaging-jets.md +0 -26
- data/notes/traveling-ruby-packaging.md +0 -103
- data/notes/traveling-ruby-structure.md +0 -6
- data/notes/traveling-ruby.md +0 -82
- data/spec/fixtures/classes.rb +0 -5
- data/spec/fixtures/project/.gitignore +0 -3
- data/spec/fixtures/project/.ruby-version +0 -1
- data/spec/fixtures/project/Gemfile +0 -4
- data/spec/fixtures/project/Gemfile.lock +0 -23
- data/spec/fixtures/project/app/controllers/application_controller.rb +0 -2
- data/spec/fixtures/project/app/controllers/posts_controller.rb +0 -12
- data/spec/fixtures/project/bin/jets +0 -22
- data/spec/fixtures/project/config/routes.rb +0 -6
- data/spec/fixtures/project/handlers/controllers/posts.js +0 -212
- data/spec/lib/cli_spec.rb +0 -20
- data/spec/lib/jets/base_controller_spec.rb +0 -18
- data/spec/lib/jets/build/handler_generator_spec.rb +0 -20
- data/spec/lib/jets/build/lambda_deducer_spec.rb +0 -15
- data/spec/lib/jets/build_spec.rb +0 -34
- data/spec/lib/jets/cfn/builder_spec.rb +0 -18
- data/spec/lib/jets/cfn/namer_spec.rb +0 -16
- data/spec/lib/jets/process/controller_processor_spec.rb +0 -22
- data/spec/lib/jets/process/infer_spec.rb +0 -24
- data/spec/lib/jets/process_spec.rb +0 -18
- data/spec/lib/jets/project_spec.rb +0 -14
- 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,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,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
|
data/lib/jets/cli.rb
CHANGED
|
@@ -1,23 +1,188 @@
|
|
|
1
1
|
require "thor"
|
|
2
|
-
require "jets/cli/help"
|
|
3
2
|
|
|
4
|
-
|
|
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
|
-
|
|
7
|
-
|
|
8
|
-
|
|
12
|
+
def initialize(given_args=ARGV, **config)
|
|
13
|
+
@given_args = given_args.dup
|
|
14
|
+
@config = config
|
|
15
|
+
end
|
|
9
16
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
Jets
|
|
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
|
-
|
|
20
|
-
|
|
21
|
-
|
|
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
|