jets-fs 1.6.10
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 +7 -0
- data/.circleci/bin/commit_docs.sh +26 -0
- data/.circleci/config.yml +126 -0
- data/.codebuild/README.md +68 -0
- data/.codebuild/bin/jets +3 -0
- data/.codebuild/buildspec-base.yml +14 -0
- data/.codebuild/integration.sh +72 -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 +22 -0
- data/.codebuild/scripts/install-node.sh +4 -0
- data/.github/ISSUE_TEMPLATE.md +7 -0
- data/.github/ISSUE_TEMPLATE/bug_report.md +73 -0
- data/.github/ISSUE_TEMPLATE/documentation.md +27 -0
- data/.github/ISSUE_TEMPLATE/feature_request.md +64 -0
- data/.github/ISSUE_TEMPLATE/question.md +16 -0
- data/.github/PULL_REQUEST_TEMPLATE.md +42 -0
- data/.gitignore +24 -0
- data/.gitmodules +6 -0
- data/.python-version +1 -0
- data/.rspec +4 -0
- data/.ruby-version +1 -0
- data/CHANGELOG.md +533 -0
- data/Dockerfile +16 -0
- data/Dockerfile.base +53 -0
- data/Gemfile +14 -0
- data/Gemfile.lock +190 -0
- data/Guardfile +22 -0
- data/LICENSE.txt +22 -0
- data/Procfile +2 -0
- data/README.md +203 -0
- data/Rakefile +21 -0
- data/backers.md +16 -0
- data/bin/release +9 -0
- data/buildspec.yml +18 -0
- data/exe/jets +14 -0
- data/jets.gemspec +61 -0
- data/lib/jets.rb +71 -0
- data/lib/jets/application.rb +308 -0
- data/lib/jets/aws_info.rb +111 -0
- data/lib/jets/aws_services.rb +60 -0
- data/lib/jets/aws_services/stack_status.rb +59 -0
- data/lib/jets/booter.rb +130 -0
- data/lib/jets/builders.rb +16 -0
- data/lib/jets/builders/code_builder.rb +379 -0
- data/lib/jets/builders/code_size.rb +57 -0
- data/lib/jets/builders/gem_replacer.rb +76 -0
- data/lib/jets/builders/handler_generator.rb +172 -0
- data/lib/jets/builders/lambda_layer.rb +69 -0
- data/lib/jets/builders/md5.rb +60 -0
- data/lib/jets/builders/md5_zip.rb +61 -0
- data/lib/jets/builders/purger.rb +35 -0
- data/lib/jets/builders/rack_packager.rb +51 -0
- data/lib/jets/builders/rackup_wrappers/rackup +19 -0
- data/lib/jets/builders/rackup_wrappers/rackup.rb +7 -0
- data/lib/jets/builders/reconfigure_rails.rb +114 -0
- data/lib/jets/builders/reconfigure_rails/config/initializers/jets.rb +16 -0
- data/lib/jets/builders/ruby_packager.rb +207 -0
- data/lib/jets/builders/shim_vars.rb +5 -0
- data/lib/jets/builders/shim_vars/app.rb +78 -0
- data/lib/jets/builders/shim_vars/base.rb +25 -0
- data/lib/jets/builders/shim_vars/shared.rb +37 -0
- data/lib/jets/builders/templates/handler.rb +12 -0
- data/lib/jets/builders/tidy.rb +107 -0
- data/lib/jets/builders/util.rb +31 -0
- data/lib/jets/camelizer.rb +67 -0
- data/lib/jets/cfn.rb +6 -0
- data/lib/jets/cfn/builders.rb +20 -0
- data/lib/jets/cfn/builders/api_deployment_builder.rb +58 -0
- data/lib/jets/cfn/builders/api_gateway_builder.rb +80 -0
- data/lib/jets/cfn/builders/base_child_builder.rb +82 -0
- data/lib/jets/cfn/builders/controller_builder.rb +42 -0
- data/lib/jets/cfn/builders/function_builder.rb +14 -0
- data/lib/jets/cfn/builders/interface.rb +127 -0
- data/lib/jets/cfn/builders/job_builder.rb +14 -0
- data/lib/jets/cfn/builders/parent_builder.rb +93 -0
- data/lib/jets/cfn/builders/rule_builder.rb +24 -0
- data/lib/jets/cfn/builders/shared_builder.rb +14 -0
- data/lib/jets/cfn/ship.rb +189 -0
- data/lib/jets/cfn/status.rb +212 -0
- data/lib/jets/cfn/upload.rb +139 -0
- data/lib/jets/cli.rb +189 -0
- data/lib/jets/commands.rb +27 -0
- data/lib/jets/commands/base.rb +164 -0
- data/lib/jets/commands/build.rb +217 -0
- data/lib/jets/commands/call.rb +174 -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 +48 -0
- data/lib/jets/commands/clean.rb +23 -0
- data/lib/jets/commands/clean/base.rb +24 -0
- data/lib/jets/commands/clean/build.rb +13 -0
- data/lib/jets/commands/clean/log.rb +107 -0
- data/lib/jets/commands/console.rb +13 -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 +44 -0
- data/lib/jets/commands/dbconsole.rb +131 -0
- data/lib/jets/commands/delete.rb +143 -0
- data/lib/jets/commands/deploy.rb +131 -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/gems.rb +21 -0
- data/lib/jets/commands/help.rb +9 -0
- data/lib/jets/commands/help/build.md +6 -0
- data/lib/jets/commands/help/call.md +61 -0
- data/lib/jets/commands/help/clean/build.md +5 -0
- data/lib/jets/commands/help/clean/log.md +5 -0
- data/lib/jets/commands/help/console.md +18 -0
- data/lib/jets/commands/help/db/generate.md +8 -0
- data/lib/jets/commands/help/dbconsole.md +9 -0
- data/lib/jets/commands/help/delete.md +22 -0
- data/lib/jets/commands/help/deploy.md +32 -0
- data/lib/jets/commands/help/dynamodb/generate.md +52 -0
- data/lib/jets/commands/help/dynamodb/migrate.md +4 -0
- data/lib/jets/commands/help/gems/check.md +8 -0
- data/lib/jets/commands/help/generate.md +22 -0
- data/lib/jets/commands/help/import/rack.md +13 -0
- data/lib/jets/commands/help/import/rails.md +11 -0
- data/lib/jets/commands/help/new.md +42 -0
- data/lib/jets/commands/help/routes.md +16 -0
- data/lib/jets/commands/help/runner.md +17 -0
- data/lib/jets/commands/help/server.md +15 -0
- data/lib/jets/commands/help/status.md +14 -0
- data/lib/jets/commands/help/upgrade.md +5 -0
- data/lib/jets/commands/help/url.md +6 -0
- data/lib/jets/commands/import.rb +18 -0
- data/lib/jets/commands/import/base.rb +49 -0
- data/lib/jets/commands/import/cheatsheet.rb +35 -0
- data/lib/jets/commands/import/rack.rb +16 -0
- data/lib/jets/commands/import/rail.rb +74 -0
- data/lib/jets/commands/import/sequence.rb +90 -0
- data/lib/jets/commands/import/templates/config/database.yml +26 -0
- data/lib/jets/commands/import/templates/submodules-cheatsheet.md +89 -0
- data/lib/jets/commands/main.rb +152 -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 +157 -0
- data/lib/jets/commands/rake_command.rb +61 -0
- data/lib/jets/commands/rake_tasks.rb +45 -0
- data/lib/jets/commands/runner.rb +18 -0
- data/lib/jets/commands/sequence.rb +99 -0
- data/lib/jets/commands/stack_info.rb +30 -0
- data/lib/jets/commands/templates/skeleton/.gitignore +12 -0
- data/lib/jets/commands/templates/skeleton/.jetskeep +1 -0
- data/lib/jets/commands/templates/skeleton/.rspec +3 -0
- data/lib/jets/commands/templates/skeleton/Gemfile.tt +35 -0
- data/lib/jets/commands/templates/skeleton/Procfile +7 -0
- data/lib/jets/commands/templates/skeleton/README.md +11 -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 +4 -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 +25 -0
- data/lib/jets/commands/templates/skeleton/config.ru +5 -0
- data/lib/jets/commands/templates/skeleton/config/application.rb.tt +66 -0
- data/lib/jets/commands/templates/skeleton/config/database.yml.tt +26 -0
- data/lib/jets/commands/templates/skeleton/config/dynamodb.yml +22 -0
- data/lib/jets/commands/templates/skeleton/config/environments/development.rb +4 -0
- data/lib/jets/commands/templates/skeleton/config/environments/production.rb +4 -0
- data/lib/jets/commands/templates/skeleton/config/routes.rb +9 -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 +91 -0
- data/lib/jets/commands/templates/skeleton/spec/controllers/posts_controller_spec.rb +15 -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 +30 -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/upgrade.rb +146 -0
- data/lib/jets/commands/upgrade/templates/bin/webpack +19 -0
- data/lib/jets/commands/upgrade/templates/bin/webpack-dev-server +19 -0
- data/lib/jets/commands/url.rb +68 -0
- data/lib/jets/commands/webpacker_template.rb +18 -0
- data/lib/jets/controller.rb +16 -0
- data/lib/jets/controller/base.rb +103 -0
- data/lib/jets/controller/callbacks.rb +62 -0
- data/lib/jets/controller/cookies.rb +40 -0
- data/lib/jets/controller/cookies/jar.rb +269 -0
- data/lib/jets/controller/layout.rb +17 -0
- data/lib/jets/controller/middleware.rb +5 -0
- data/lib/jets/controller/middleware/cors.rb +60 -0
- data/lib/jets/controller/middleware/local.rb +119 -0
- data/lib/jets/controller/middleware/local/api_gateway.rb +93 -0
- data/lib/jets/controller/middleware/local/mimic_aws_call.rb +38 -0
- data/lib/jets/controller/middleware/local/route_matcher.rb +97 -0
- data/lib/jets/controller/middleware/main.rb +46 -0
- data/lib/jets/controller/middleware/webpacker_setup.rb +6 -0
- data/lib/jets/controller/params.rb +87 -0
- data/lib/jets/controller/rack.rb +5 -0
- data/lib/jets/controller/rack/adapter.rb +63 -0
- data/lib/jets/controller/rack/env.rb +105 -0
- data/lib/jets/controller/redirection.rb +55 -0
- data/lib/jets/controller/rendering.rb +84 -0
- data/lib/jets/controller/rendering/rack_renderer.rb +238 -0
- data/lib/jets/controller/request.rb +29 -0
- data/lib/jets/controller/response.rb +61 -0
- data/lib/jets/core.rb +211 -0
- data/lib/jets/core_ext/kernel.rb +56 -0
- data/lib/jets/db.rb +15 -0
- data/lib/jets/dotenv.rb +39 -0
- data/lib/jets/erb.rb +51 -0
- data/lib/jets/generator.rb +41 -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 +79 -0
- data/lib/jets/inflections.rb +32 -0
- data/lib/jets/internal/app/controllers/jets/public_controller.rb +31 -0
- data/lib/jets/internal/app/controllers/jets/rack_controller.rb +25 -0
- data/lib/jets/internal/app/functions/jets/base_path.rb +153 -0
- data/lib/jets/internal/app/jobs/jets/preheat_job.rb +62 -0
- data/lib/jets/io.rb +14 -0
- data/lib/jets/job.rb +4 -0
- data/lib/jets/job/base.rb +29 -0
- data/lib/jets/job/dsl.rb +108 -0
- data/lib/jets/klass.rb +109 -0
- data/lib/jets/lambda.rb +18 -0
- data/lib/jets/lambda/dsl.rb +384 -0
- data/lib/jets/lambda/function.rb +29 -0
- data/lib/jets/lambda/function_constructor.rb +55 -0
- data/lib/jets/lambda/functions.rb +34 -0
- data/lib/jets/lambda/task.rb +111 -0
- data/lib/jets/logger.rb +24 -0
- data/lib/jets/mega.rb +7 -0
- data/lib/jets/mega/hash_converter.rb +25 -0
- data/lib/jets/mega/request.rb +140 -0
- data/lib/jets/mega/request/source.rb +21 -0
- data/lib/jets/middleware.rb +38 -0
- data/lib/jets/middleware/configurator.rb +84 -0
- data/lib/jets/middleware/default_stack.rb +49 -0
- data/lib/jets/middleware/layer.rb +34 -0
- data/lib/jets/middleware/stack.rb +77 -0
- data/lib/jets/naming.rb +49 -0
- data/lib/jets/overrides/lambda.rb +1 -0
- data/lib/jets/overrides/lambda/marshaller.rb +31 -0
- data/lib/jets/overrides/rails.rb +4 -0
- data/lib/jets/overrides/rails/asset_tag_helper.rb +114 -0
- data/lib/jets/overrides/rails/common_methods.rb +20 -0
- data/lib/jets/overrides/rails/rendering_helper.rb +26 -0
- data/lib/jets/overrides/rails/url_helper.rb +25 -0
- data/lib/jets/poly_fun.rb +82 -0
- data/lib/jets/poly_fun/base_executor.rb +125 -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 +117 -0
- data/lib/jets/processors.rb +4 -0
- data/lib/jets/processors/deducer.rb +65 -0
- data/lib/jets/processors/main_processor.rb +59 -0
- data/lib/jets/rack_server.rb +80 -0
- data/lib/jets/rdoc.rb +30 -0
- data/lib/jets/resource.rb +74 -0
- data/lib/jets/resource/api_gateway.rb +9 -0
- data/lib/jets/resource/api_gateway/base_path.rb +5 -0
- data/lib/jets/resource/api_gateway/base_path/function.rb +42 -0
- data/lib/jets/resource/api_gateway/base_path/mapping.rb +44 -0
- data/lib/jets/resource/api_gateway/base_path/role.rb +76 -0
- data/lib/jets/resource/api_gateway/cors.rb +61 -0
- data/lib/jets/resource/api_gateway/deployment.rb +78 -0
- data/lib/jets/resource/api_gateway/domain_name.rb +59 -0
- data/lib/jets/resource/api_gateway/method.rb +98 -0
- data/lib/jets/resource/api_gateway/resource.rb +78 -0
- data/lib/jets/resource/api_gateway/rest_api.rb +60 -0
- data/lib/jets/resource/api_gateway/rest_api/change_detection.rb +42 -0
- data/lib/jets/resource/api_gateway/rest_api/logical_id.rb +63 -0
- data/lib/jets/resource/api_gateway/rest_api/routes.rb +11 -0
- data/lib/jets/resource/api_gateway/rest_api/routes/change.rb +12 -0
- data/lib/jets/resource/api_gateway/rest_api/routes/change/base.rb +130 -0
- data/lib/jets/resource/api_gateway/rest_api/routes/change/to.rb +29 -0
- data/lib/jets/resource/api_gateway/rest_api/routes/change/variable.rb +39 -0
- data/lib/jets/resource/api_gateway/rest_api/routes/collision.rb +123 -0
- data/lib/jets/resource/api_gateway/rest_api/routes/collision/variable_exception.rb +7 -0
- data/lib/jets/resource/associated.rb +26 -0
- data/lib/jets/resource/base.rb +28 -0
- data/lib/jets/resource/child_stack.rb +7 -0
- data/lib/jets/resource/child_stack/api_deployment.rb +56 -0
- data/lib/jets/resource/child_stack/api_gateway.rb +29 -0
- data/lib/jets/resource/child_stack/app_class.rb +112 -0
- data/lib/jets/resource/child_stack/base.rb +24 -0
- data/lib/jets/resource/child_stack/shared.rb +90 -0
- data/lib/jets/resource/config.rb +4 -0
- data/lib/jets/resource/config/config_rule.rb +74 -0
- data/lib/jets/resource/config/managed_rule.rb +15 -0
- data/lib/jets/resource/events.rb +3 -0
- data/lib/jets/resource/events/rule.rb +31 -0
- data/lib/jets/resource/iam.rb +8 -0
- data/lib/jets/resource/iam/application_role.rb +27 -0
- data/lib/jets/resource/iam/base_role_definition.rb +47 -0
- data/lib/jets/resource/iam/class_role.rb +74 -0
- data/lib/jets/resource/iam/function_role.rb +54 -0
- data/lib/jets/resource/iam/managed_policy.rb +22 -0
- data/lib/jets/resource/iam/policy_document.rb +41 -0
- data/lib/jets/resource/lambda.rb +5 -0
- data/lib/jets/resource/lambda/function.rb +216 -0
- data/lib/jets/resource/lambda/function/environment.rb +61 -0
- data/lib/jets/resource/lambda/gem_layer.rb +17 -0
- data/lib/jets/resource/lambda/layer_version.rb +44 -0
- data/lib/jets/resource/permission.rb +45 -0
- data/lib/jets/resource/replacer.rb +77 -0
- data/lib/jets/resource/route53.rb +3 -0
- data/lib/jets/resource/route53/record_set.rb +70 -0
- data/lib/jets/resource/s3.rb +17 -0
- data/lib/jets/resource/sns.rb +3 -0
- data/lib/jets/resource/sqs.rb +3 -0
- data/lib/jets/resource/standardizer.rb +42 -0
- data/lib/jets/route.rb +166 -0
- data/lib/jets/router.rb +175 -0
- data/lib/jets/router/scope.rb +30 -0
- data/lib/jets/rule.rb +4 -0
- data/lib/jets/rule/base.rb +19 -0
- data/lib/jets/rule/dsl.rb +110 -0
- data/lib/jets/spec_helpers.rb +52 -0
- data/lib/jets/spec_helpers/params.rb +10 -0
- data/lib/jets/spec_helpers/request.rb +98 -0
- data/lib/jets/spec_helpers/response.rb +5 -0
- data/lib/jets/stack.rb +103 -0
- data/lib/jets/stack/builder.rb +38 -0
- data/lib/jets/stack/definition.rb +50 -0
- data/lib/jets/stack/function.rb +60 -0
- data/lib/jets/stack/main.rb +5 -0
- data/lib/jets/stack/main/dsl.rb +33 -0
- data/lib/jets/stack/main/extensions/base.rb +45 -0
- data/lib/jets/stack/main/extensions/cloudwatch.rb +19 -0
- data/lib/jets/stack/main/extensions/lambda.rb +71 -0
- data/lib/jets/stack/main/extensions/sns.rb +12 -0
- data/lib/jets/stack/main/extensions/sqs.rb +36 -0
- data/lib/jets/stack/output.rb +38 -0
- data/lib/jets/stack/output/dsl.rb +19 -0
- data/lib/jets/stack/output/lookup.rb +36 -0
- data/lib/jets/stack/parameter.rb +38 -0
- data/lib/jets/stack/parameter/dsl.rb +42 -0
- data/lib/jets/stack/resource.rb +32 -0
- data/lib/jets/stack/resource/dsl.rb +19 -0
- data/lib/jets/tmp_loader.rb +52 -0
- data/lib/jets/turbine.rb +30 -0
- data/lib/jets/turbo.rb +47 -0
- data/lib/jets/turbo/database_yaml.rb +41 -0
- data/lib/jets/turbo/project/.gitignore +12 -0
- data/lib/jets/turbo/project/.jetskeep +1 -0
- data/lib/jets/turbo/project/Gemfile +16 -0
- data/lib/jets/turbo/project/Rakefile +2 -0
- data/lib/jets/turbo/project/app/controllers/application_controller.rb +2 -0
- data/lib/jets/turbo/project/app/helpers/application_helper.rb +2 -0
- data/lib/jets/turbo/project/app/jobs/application_job.rb +4 -0
- data/lib/jets/turbo/project/config.ru +5 -0
- data/lib/jets/turbo/project/config/application.rb +4 -0
- data/lib/jets/turbo/project/config/routes.rb +4 -0
- data/lib/jets/turbo/rail.rb +113 -0
- data/lib/jets/turbo/templates/config/database.yml +26 -0
- data/lib/jets/util.rb +38 -0
- data/lib/jets/version.rb +3 -0
- data/readme/prerelease.md +6 -0
- data/readme/testing.md +60 -0
- metadata +859 -0
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
module Jets
|
|
2
|
+
class RackServer
|
|
3
|
+
def self.start(options={})
|
|
4
|
+
new(options).start
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
def initialize(options={})
|
|
8
|
+
@options = options
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def start
|
|
12
|
+
return unless File.exist?("#{rack_project}/config.ru")
|
|
13
|
+
puts "Starting additional rack server for the project under the rack subfolder..." if ENV['JETS_DEBUG']
|
|
14
|
+
|
|
15
|
+
if ENV['FOREGROUND']
|
|
16
|
+
serve
|
|
17
|
+
return
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# Reaching here means we'll run the server in the background.
|
|
21
|
+
# Handle daemonzing ourselves because it keeps the stdout of the 2nd
|
|
22
|
+
# rack server. The rackup --daemonize option ends up hiding the output.
|
|
23
|
+
pid = Process.fork
|
|
24
|
+
if pid.nil?
|
|
25
|
+
# we're in the child process
|
|
26
|
+
serve
|
|
27
|
+
else
|
|
28
|
+
# we're in the parent process
|
|
29
|
+
Process.detach(pid) # dettached but still in the "foreground" since bin/rackup runs in the foreground
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# Runs in the child process
|
|
34
|
+
def serve
|
|
35
|
+
# Note, looks like stopping jets server with Ctrl-C sends the TERM signal
|
|
36
|
+
# down to the sub bin/rackup command cleans up the child process fine.
|
|
37
|
+
Bundler.with_clean_env do
|
|
38
|
+
args = ''
|
|
39
|
+
args << " --host #{@options[:host]}" if @options[:host] # only forward the host option
|
|
40
|
+
# port is always 9292 for simplicity
|
|
41
|
+
command = "cd #{rack_project} && bin/rackup#{args}" # leads to the same wrapper rack scripts
|
|
42
|
+
puts "=> #{command}".color(:green)
|
|
43
|
+
system(command)
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# blocks until rack server is up
|
|
48
|
+
def wait_for_socket
|
|
49
|
+
return unless Jets.rack?
|
|
50
|
+
|
|
51
|
+
retries = 0
|
|
52
|
+
max_retries = 30 # 15 seconds at a delay of 0.5s
|
|
53
|
+
delay = 0.5
|
|
54
|
+
if ENV['C9_USER'] # overrides for local testing
|
|
55
|
+
max_retries = 3
|
|
56
|
+
delay = 3
|
|
57
|
+
end
|
|
58
|
+
begin
|
|
59
|
+
server = TCPSocket.new('localhost', 9292)
|
|
60
|
+
server.close
|
|
61
|
+
rescue Errno::ECONNREFUSED
|
|
62
|
+
puts "Unable to connect to localhost:9292. Delay for #{delay} and will try to connect again." if ENV['JETS_DEBUG']
|
|
63
|
+
sleep(delay)
|
|
64
|
+
retries += 1
|
|
65
|
+
if retries < max_retries
|
|
66
|
+
retry
|
|
67
|
+
else
|
|
68
|
+
puts "Giving up on trying to connect to localhost:9292"
|
|
69
|
+
return false
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
puts "Connected to localhost:9292 successfully"
|
|
73
|
+
true
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def rack_project
|
|
77
|
+
"#{Jets.root}/rack"
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|
data/lib/jets/rdoc.rb
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
module Jets
|
|
2
|
+
module Rdoc
|
|
3
|
+
# Use for both jets.gemspec and rake rdoc task
|
|
4
|
+
def options
|
|
5
|
+
exclude = %w[
|
|
6
|
+
docs
|
|
7
|
+
spec
|
|
8
|
+
vendor
|
|
9
|
+
core.rb
|
|
10
|
+
.js
|
|
11
|
+
templates
|
|
12
|
+
commands
|
|
13
|
+
internal
|
|
14
|
+
support
|
|
15
|
+
Dockerfile
|
|
16
|
+
Dockerfile.base
|
|
17
|
+
Gemfile
|
|
18
|
+
Gemfile.lock
|
|
19
|
+
Guardfile
|
|
20
|
+
LICENSE
|
|
21
|
+
Procfile
|
|
22
|
+
Rakefile
|
|
23
|
+
bin
|
|
24
|
+
]
|
|
25
|
+
exclude = exclude.map { |word| ['-x', word] }.flatten
|
|
26
|
+
["-m", "README.md", "--markup", "tomdoc"] + exclude
|
|
27
|
+
end
|
|
28
|
+
extend self
|
|
29
|
+
end
|
|
30
|
+
end
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
class Jets::Resource
|
|
2
|
+
extend Memoist
|
|
3
|
+
|
|
4
|
+
autoload :ApiGateway, 'jets/resource/api_gateway'
|
|
5
|
+
autoload :Associated, 'jets/resource/associated'
|
|
6
|
+
autoload :Base, 'jets/resource/base'
|
|
7
|
+
autoload :ChildStack, 'jets/resource/child_stack'
|
|
8
|
+
autoload :Config, 'jets/resource/config'
|
|
9
|
+
autoload :Events, 'jets/resource/events'
|
|
10
|
+
autoload :Iam, 'jets/resource/iam'
|
|
11
|
+
autoload :Lambda, 'jets/resource/lambda'
|
|
12
|
+
autoload :Permission, 'jets/resource/permission'
|
|
13
|
+
autoload :Replacer, 'jets/resource/replacer'
|
|
14
|
+
autoload :Route53, 'jets/resource/route53'
|
|
15
|
+
autoload :S3, 'jets/resource/s3'
|
|
16
|
+
autoload :Sns, 'jets/resource/sns'
|
|
17
|
+
autoload :Sqs, 'jets/resource/sqs'
|
|
18
|
+
autoload :Standardizer, 'jets/resource/standardizer'
|
|
19
|
+
|
|
20
|
+
attr_reader :definition, :replacements
|
|
21
|
+
def initialize(definition, replacements={})
|
|
22
|
+
@definition = definition
|
|
23
|
+
@replacements = replacements
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def template
|
|
27
|
+
standarize(definition)
|
|
28
|
+
end
|
|
29
|
+
memoize :template
|
|
30
|
+
|
|
31
|
+
# CloudFormation Resources reference: https://amzn.to/2NKg6ip
|
|
32
|
+
def standarize(*definition)
|
|
33
|
+
Standardizer.new(definition).template
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def logical_id
|
|
37
|
+
id = template.keys.first
|
|
38
|
+
# replace possible {namespace} in the logical id
|
|
39
|
+
id = replacer.replace_value(id)
|
|
40
|
+
Jets::Camelizer.camelize(id)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def type
|
|
44
|
+
attributes['Type']
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def properties
|
|
48
|
+
attributes['Properties']
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def attributes
|
|
52
|
+
attributes = template.values.first
|
|
53
|
+
attributes = replacer.replace_placeholders(attributes)
|
|
54
|
+
Jets::Camelizer.transform(attributes)
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def parameters
|
|
58
|
+
{}
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def outputs
|
|
62
|
+
{}
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def replacer
|
|
66
|
+
Replacer.new(replacements)
|
|
67
|
+
end
|
|
68
|
+
memoize :replacer
|
|
69
|
+
|
|
70
|
+
def permission
|
|
71
|
+
Permission.new(replacements, self)
|
|
72
|
+
end
|
|
73
|
+
memoize :permission
|
|
74
|
+
end
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
module Jets::Resource::ApiGateway
|
|
2
|
+
autoload :BasePath, 'jets/resource/api_gateway/base_path'
|
|
3
|
+
autoload :Cors, 'jets/resource/api_gateway/cors'
|
|
4
|
+
autoload :Deployment, 'jets/resource/api_gateway/deployment'
|
|
5
|
+
autoload :DomainName, 'jets/resource/api_gateway/domain_name'
|
|
6
|
+
autoload :Method, 'jets/resource/api_gateway/method'
|
|
7
|
+
autoload :Resource, 'jets/resource/api_gateway/resource'
|
|
8
|
+
autoload :RestApi, 'jets/resource/api_gateway/rest_api'
|
|
9
|
+
end
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
module Jets::Resource::ApiGateway::BasePath
|
|
2
|
+
class Function < Jets::Resource::Base
|
|
3
|
+
include Jets::Resource::Lambda::Function::Environment
|
|
4
|
+
|
|
5
|
+
def definition
|
|
6
|
+
{
|
|
7
|
+
base_path_function: {
|
|
8
|
+
type: "AWS::Lambda::Function",
|
|
9
|
+
properties: {
|
|
10
|
+
function_name: function_name,
|
|
11
|
+
code: {
|
|
12
|
+
s3_bucket: "!Ref S3Bucket",
|
|
13
|
+
s3_key: code_s3_key,
|
|
14
|
+
},
|
|
15
|
+
role: "!GetAtt BasePathRole.Arn",
|
|
16
|
+
handler: handler,
|
|
17
|
+
runtime: "ruby2.5",
|
|
18
|
+
timeout: 60,
|
|
19
|
+
memory_size: 1536,
|
|
20
|
+
environment: env_properties[:environment],
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def function_name
|
|
27
|
+
method = "jets-base-path"
|
|
28
|
+
# need to add the deployment timestamp because or else function name collides between deploys
|
|
29
|
+
timestamp = Jets::Resource::ApiGateway::Deployment.timestamp
|
|
30
|
+
"#{Jets.config.project_namespace}-#{method}-#{timestamp}"
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def handler
|
|
34
|
+
"handlers/functions/jets/base_path.lambda_handler"
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def code_s3_key
|
|
38
|
+
checksum = Jets::Builders::Md5.checksums["stage/code"]
|
|
39
|
+
"jets/code/code-#{checksum}.zip" # s3_key
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# CloudFormation Docs AWS::ApiGateway::DomainName: https://amzn.to/2BsrSqo
|
|
2
|
+
#
|
|
3
|
+
# Example:
|
|
4
|
+
#
|
|
5
|
+
# Type: AWS::ApiGateway::BasePathMapping
|
|
6
|
+
# Properties:
|
|
7
|
+
# BasePath: String
|
|
8
|
+
# DomainName: String
|
|
9
|
+
# RestApiId: String
|
|
10
|
+
# Stage: String
|
|
11
|
+
#
|
|
12
|
+
# Currently unable to add base path mapping in-place with CloudFormation.
|
|
13
|
+
# The workaround for this is to do it post deployment with raw API calls outside
|
|
14
|
+
# of CloudFormation. Leaving this around for now in case there's a workaround
|
|
15
|
+
# to get this into CloudFormation instead of raw API calls. Some notes:
|
|
16
|
+
# * Also tried to change the domain name of to something like demo-dev-[random].mydomain.com
|
|
17
|
+
# That does not work because the domain name has to match the route53 record exactly.
|
|
18
|
+
#
|
|
19
|
+
module Jets::Resource::ApiGateway::BasePath
|
|
20
|
+
class Mapping < Jets::Resource::Base
|
|
21
|
+
def definition
|
|
22
|
+
function_logical_id = "BasePathFunction" # lambda function that supports custom resource
|
|
23
|
+
{
|
|
24
|
+
base_path_mapping: {
|
|
25
|
+
type: "Custom::BasePathMapping",
|
|
26
|
+
properties: {
|
|
27
|
+
service_token: "!GetAtt #{function_logical_id}.Arn",
|
|
28
|
+
# base_path: '', # empty path represents root
|
|
29
|
+
# domain_name: "!Ref DomainName",
|
|
30
|
+
# rest_api_id: "!Ref RestApi", # since this is in the Deployment template
|
|
31
|
+
# stage: Deployment.stage_name,
|
|
32
|
+
},
|
|
33
|
+
depends_on: Jets::Resource::ApiGateway::Deployment.logical_id,
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def outputs
|
|
39
|
+
{
|
|
40
|
+
"BasePathMapping" => "!Ref BasePathMapping",
|
|
41
|
+
}
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
module Jets::Resource::ApiGateway::BasePath
|
|
2
|
+
class Role < Jets::Resource::Base
|
|
3
|
+
extend Memoist
|
|
4
|
+
include Jets::AwsServices
|
|
5
|
+
|
|
6
|
+
def definition
|
|
7
|
+
{
|
|
8
|
+
base_path_role: {
|
|
9
|
+
type: "AWS::IAM::Role",
|
|
10
|
+
properties: {
|
|
11
|
+
role_name: role_name,
|
|
12
|
+
path: "/",
|
|
13
|
+
assume_role_policy_document: {
|
|
14
|
+
version: "2012-10-17",
|
|
15
|
+
statement: [{
|
|
16
|
+
effect: "Allow",
|
|
17
|
+
principal: {service: ["lambda.amazonaws.com"]},
|
|
18
|
+
action: ["sts:AssumeRole"]}
|
|
19
|
+
]
|
|
20
|
+
},
|
|
21
|
+
policies: [
|
|
22
|
+
policy_name: "#{role_name}-policy",
|
|
23
|
+
policy_document: policy_document,
|
|
24
|
+
]
|
|
25
|
+
},
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def policy_document
|
|
31
|
+
project_namespace = Jets.config.project_namespace
|
|
32
|
+
default_policy_statements = Jets::Application.default_iam_policy # Array of Hashes
|
|
33
|
+
apigateway = [{
|
|
34
|
+
action: [ "apigateway:*" ],
|
|
35
|
+
effect: "Allow",
|
|
36
|
+
resource: "arn:aws:apigateway:#{Jets.aws.region}::/restapis/*", # scoped to all restapis because this changes
|
|
37
|
+
},{
|
|
38
|
+
action: [ "apigateway:*" ],
|
|
39
|
+
effect: "Allow",
|
|
40
|
+
resource: "arn:aws:apigateway:#{Jets.aws.region}::/domainnames/*", # scoped to all restapis because this changes
|
|
41
|
+
}]
|
|
42
|
+
cloudformation = [{
|
|
43
|
+
action: ["cloudformation:DescribeStacks"],
|
|
44
|
+
effect: "Allow",
|
|
45
|
+
resource: "arn:aws:cloudformation:#{Jets.aws.region}:#{Jets.aws.account}:stack/#{project_namespace}*",
|
|
46
|
+
}]
|
|
47
|
+
|
|
48
|
+
# Combine the statements
|
|
49
|
+
{
|
|
50
|
+
version: '2012-10-17',
|
|
51
|
+
statement: default_policy_statements + apigateway + cloudformation
|
|
52
|
+
}
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# Duplicated in rest_api/change_detection.rb, base_path/role.rb, rest_api/routes.rb
|
|
56
|
+
def rest_api_id
|
|
57
|
+
stack_name = Jets::Naming.parent_stack_name
|
|
58
|
+
return "RestApi" unless stack_exists?(stack_name)
|
|
59
|
+
|
|
60
|
+
stack = cfn.describe_stacks(stack_name: stack_name).stacks.first
|
|
61
|
+
|
|
62
|
+
api_gateway_stack_arn = lookup(stack[:outputs], "ApiGateway")
|
|
63
|
+
|
|
64
|
+
# resources = cfn.describe_stack_resources(stack_name: api_gateway_stack_arn).stack_resources
|
|
65
|
+
stack = cfn.describe_stacks(stack_name: api_gateway_stack_arn).stacks.first
|
|
66
|
+
rest_api_id = lookup(stack[:outputs], "RestApi")
|
|
67
|
+
end
|
|
68
|
+
memoize :rest_api_id
|
|
69
|
+
|
|
70
|
+
def role_name
|
|
71
|
+
# TODO: dont think we should change the role name every time but have to right now because the deployment logical id changes
|
|
72
|
+
timestamp = Jets::Resource::ApiGateway::Deployment.timestamp
|
|
73
|
+
"#{Jets.config.project_namespace}-base-path-mapping-#{timestamp}"
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
module Jets::Resource::ApiGateway
|
|
2
|
+
# Might be weird inheriting from Method because Method has Method#cors also
|
|
3
|
+
# but Cors is essentially a Method class.
|
|
4
|
+
class Cors < Method
|
|
5
|
+
def definition
|
|
6
|
+
{
|
|
7
|
+
cors_logical_id => {
|
|
8
|
+
type: "AWS::ApiGateway::Method",
|
|
9
|
+
|
|
10
|
+
properties: {
|
|
11
|
+
resource_id: "!Ref #{resource_id}",
|
|
12
|
+
rest_api_id: "!Ref #{RestApi.logical_id}",
|
|
13
|
+
authorization_type: cors_authorization_type,
|
|
14
|
+
http_method: "OPTIONS",
|
|
15
|
+
method_responses: [{
|
|
16
|
+
status_code: '200',
|
|
17
|
+
response_parameters: response_parameters(true),
|
|
18
|
+
response_models: {},
|
|
19
|
+
}],
|
|
20
|
+
request_parameters: {},
|
|
21
|
+
integration: {
|
|
22
|
+
type: "MOCK",
|
|
23
|
+
request_templates: {
|
|
24
|
+
"application/json": "{statusCode:200}",
|
|
25
|
+
},
|
|
26
|
+
integration_responses: [{
|
|
27
|
+
status_code: '200',
|
|
28
|
+
response_parameters: response_parameters,
|
|
29
|
+
response_templates: {
|
|
30
|
+
"application/json": '',
|
|
31
|
+
},
|
|
32
|
+
}] # closes integration_responses
|
|
33
|
+
} # closes integration
|
|
34
|
+
} # closes properties
|
|
35
|
+
} # closes logical id
|
|
36
|
+
} # closes definition
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def response_parameters(method_response=false)
|
|
40
|
+
cors_headers.map do |k,v|
|
|
41
|
+
k = "method.response.header.#{k}"
|
|
42
|
+
v = method_response ? true : "'#{v}'" # surround value with single quotes
|
|
43
|
+
[k,v]
|
|
44
|
+
end.to_h
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# Always the pre-flight headers in this case
|
|
48
|
+
def cors_headers
|
|
49
|
+
rack = Jets::Controller::Middleware::Cors.new(Jets.application)
|
|
50
|
+
rack.cors_headers(true)
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def cors_authorization_type
|
|
54
|
+
Jets.config.api.cors_authorization_type || @route.authorization_type || "NONE"
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def cors_logical_id
|
|
58
|
+
"#{resource_logical_id}_cors_api_method"
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
module Jets::Resource::ApiGateway
|
|
2
|
+
class Deployment < Jets::Resource::Base
|
|
3
|
+
def definition
|
|
4
|
+
{
|
|
5
|
+
deployment_logical_id => {
|
|
6
|
+
type: "AWS::ApiGateway::Deployment",
|
|
7
|
+
properties: {
|
|
8
|
+
description: "Version #{timestamp} deployed by jets",
|
|
9
|
+
rest_api_id: "!Ref #{RestApi.logical_id}",
|
|
10
|
+
stage_name: stage_name,
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def parameters
|
|
17
|
+
p = {
|
|
18
|
+
"IamRole" => "IamRole",
|
|
19
|
+
"RestApi" => "RestApi",
|
|
20
|
+
"S3Bucket" => "S3Bucket",
|
|
21
|
+
}
|
|
22
|
+
p[:DomainName] = "DomainName" if Jets.custom_domain?
|
|
23
|
+
p
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def outputs(internal=false)
|
|
27
|
+
rest_api = internal ? RestApi.internal_logical_id : "RestApi"
|
|
28
|
+
{
|
|
29
|
+
"RestApiUrl" => "!Sub 'https://${#{rest_api}}.execute-api.${AWS::Region}.amazonaws.com/#{stage_name}/'",
|
|
30
|
+
}
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def depends_on
|
|
34
|
+
expression = "#{Jets::Naming.template_path_prefix}-*_controller*"
|
|
35
|
+
controller_logical_ids = []
|
|
36
|
+
Dir.glob(expression).each do |path|
|
|
37
|
+
next unless File.file?(path)
|
|
38
|
+
|
|
39
|
+
regexp = Regexp.new(".*#{Jets.config.project_namespace}-")
|
|
40
|
+
controller_name = path.sub(regexp, '').sub('.yml', '')
|
|
41
|
+
# map the path to a camelized logical_id. Example:
|
|
42
|
+
# /tmp/jets/demo/templates/demo-dev-2-posts_controller.yml to
|
|
43
|
+
# PostsController
|
|
44
|
+
controller_logical_id = controller_name.underscore.camelize
|
|
45
|
+
|
|
46
|
+
controller_logical_ids << controller_logical_id
|
|
47
|
+
end
|
|
48
|
+
controller_logical_ids
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
# stage_name: dev, dev-1, dev-2, etc
|
|
52
|
+
def stage_name
|
|
53
|
+
self.class.stage_name
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def self.stage_name
|
|
57
|
+
# Stage name only allows a-zA-Z0-9_
|
|
58
|
+
[Jets.config.short_env, Jets.config.env_extra].compact.join('_').gsub('-','_')
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def timestamp
|
|
62
|
+
self.class.timestamp
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
@@timestamp = nil
|
|
66
|
+
def self.timestamp
|
|
67
|
+
@@timestamp ||= Time.now.strftime("%Y%m%d%H%M%S")
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def deployment_logical_id
|
|
71
|
+
self.class.logical_id.underscore
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def self.logical_id
|
|
75
|
+
"ApiDeployment#{timestamp}"
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
end
|