jets_bb_fork 0.0.4
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 +84 -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 +0 -0
- data/.python-version +1 -0
- data/.rspec +4 -0
- data/.ruby-version +1 -0
- data/CHANGELOG.md +734 -0
- data/CONDUCT.md +1 -0
- data/CONTRIBUTING.md +1 -0
- data/Dockerfile +16 -0
- data/Dockerfile.base +53 -0
- data/Gemfile +14 -0
- data/Guardfile +22 -0
- data/LICENSE.txt +22 -0
- data/Procfile +2 -0
- data/README.md +203 -0
- data/Rakefile +24 -0
- data/backers.md +16 -0
- data/bin/release +9 -0
- data/buildspec.yml +18 -0
- data/exe/jets_bb_fork +14 -0
- data/jets.gemspec +68 -0
- data/lib/jets.rb +27 -0
- data/lib/jets/application.rb +216 -0
- data/lib/jets/application/defaults.rb +172 -0
- data/lib/jets/autoloaders.rb +97 -0
- data/lib/jets/aws_info.rb +113 -0
- data/lib/jets/aws_services.rb +65 -0
- data/lib/jets/aws_services/global_memoist.rb +57 -0
- data/lib/jets/aws_services/s3_bucket.rb +34 -0
- data/lib/jets/aws_services/stack_status.rb +59 -0
- data/lib/jets/booter.rb +119 -0
- data/lib/jets/builders/code_builder.rb +399 -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 +186 -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/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/bundle.rb +82 -0
- data/lib/jets/camelizer.rb +71 -0
- data/lib/jets/cfn/builders/api_deployment_builder.rb +63 -0
- data/lib/jets/cfn/builders/api_gateway_builder.rb +157 -0
- data/lib/jets/cfn/builders/base_child_builder.rb +75 -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 +137 -0
- data/lib/jets/cfn/builders/job_builder.rb +14 -0
- data/lib/jets/cfn/builders/paged.rb +37 -0
- data/lib/jets/cfn/builders/parent_builder.rb +100 -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 +185 -0
- data/lib/jets/cfn/status.rb +212 -0
- data/lib/jets/cfn/upload.rb +139 -0
- data/lib/jets/cli.rb +194 -0
- data/lib/jets/commands/base.rb +146 -0
- data/lib/jets/commands/build.rb +234 -0
- data/lib/jets/commands/call.rb +169 -0
- data/lib/jets/commands/call/anonymous_guesser.rb +96 -0
- data/lib/jets/commands/call/autoload_guesser.rb +136 -0
- data/lib/jets/commands/call/base_guesser.rb +60 -0
- data/lib/jets/commands/call/guesser.rb +48 -0
- data/lib/jets/commands/clean.rb +19 -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 +12 -0
- data/lib/jets/commands/db.rb +13 -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 +141 -0
- data/lib/jets/commands/dynamodb.rb +19 -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/destroy.md +16 -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 +12 -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/rails.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 +157 -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 +46 -0
- data/lib/jets/commands/runner.rb +16 -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 +38 -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 +67 -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 +7 -0
- data/lib/jets/commands/templates/skeleton/config/environments/production.rb +9 -0
- data/lib/jets/commands/templates/skeleton/config/environments/test.rb +7 -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 +145 -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 +3 -0
- data/lib/jets/controller/base.rb +108 -0
- data/lib/jets/controller/callbacks.rb +68 -0
- data/lib/jets/controller/cookies.rb +38 -0
- data/lib/jets/controller/cookies/jar.rb +269 -0
- data/lib/jets/controller/layout.rb +17 -0
- data/lib/jets/controller/middleware/cors.rb +60 -0
- data/lib/jets/controller/middleware/local.rb +116 -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 +106 -0
- data/lib/jets/controller/middleware/main.rb +46 -0
- data/lib/jets/controller/middleware/reloader.rb +15 -0
- data/lib/jets/controller/middleware/webpacker_setup.rb +6 -0
- data/lib/jets/controller/params.rb +87 -0
- data/lib/jets/controller/rack/adapter.rb +88 -0
- data/lib/jets/controller/rack/env.rb +105 -0
- data/lib/jets/controller/redirection.rb +55 -0
- data/lib/jets/controller/rendering.rb +79 -0
- data/lib/jets/controller/rendering/rack_renderer.rb +250 -0
- data/lib/jets/controller/request.rb +29 -0
- data/lib/jets/controller/response.rb +61 -0
- data/lib/jets/controller/stage.rb +33 -0
- data/lib/jets/core.rb +149 -0
- data/lib/jets/core_ext/kernel.rb +13 -0
- data/lib/jets/db.rb +15 -0
- data/lib/jets/dotenv.rb +48 -0
- data/lib/jets/dotenv/ssm.rb +48 -0
- data/lib/jets/erb.rb +51 -0
- data/lib/jets/generator.rb +48 -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/mailers_controller.rb +97 -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 +157 -0
- data/lib/jets/internal/app/helpers/jets/mailers_helper.rb +9 -0
- data/lib/jets/internal/app/jobs/jets/preheat_job.rb +70 -0
- data/lib/jets/internal/app/shared/functions/jets/s3_bucket_config.rb +43 -0
- data/lib/jets/internal/app/views/jets/mailers/email.html.erb +145 -0
- data/lib/jets/internal/app/views/jets/mailers/index.html.erb +8 -0
- data/lib/jets/internal/app/views/jets/mailers/mailer.html.erb +6 -0
- data/lib/jets/internal/turbines/jets/mailer.rb +51 -0
- data/lib/jets/job/base.rb +39 -0
- data/lib/jets/job/dsl.rb +40 -0
- data/lib/jets/job/dsl/dynamodb_event.rb +65 -0
- data/lib/jets/job/dsl/event_source_mapping.rb +11 -0
- data/lib/jets/job/dsl/iot_event.rb +24 -0
- data/lib/jets/job/dsl/kinesis_event.rb +46 -0
- data/lib/jets/job/dsl/log_event.rb +15 -0
- data/lib/jets/job/dsl/rule_event.rb +75 -0
- data/lib/jets/job/dsl/s3_event.rb +36 -0
- data/lib/jets/job/dsl/sns_event.rb +54 -0
- data/lib/jets/job/dsl/sqs_event.rb +96 -0
- data/lib/jets/job/helpers/kinesis_event_helper.rb +13 -0
- data/lib/jets/job/helpers/log_event_helper.rb +17 -0
- data/lib/jets/job/helpers/s3_event_helper.rb +13 -0
- data/lib/jets/klass.rb +109 -0
- data/lib/jets/lambda/dsl.rb +419 -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 +21 -0
- data/lib/jets/mega/hash_converter.rb +25 -0
- data/lib/jets/mega/request.rb +139 -0
- data/lib/jets/mega/request/source.rb +21 -0
- data/lib/jets/middleware.rb +33 -0
- data/lib/jets/middleware/configurator.rb +84 -0
- data/lib/jets/middleware/default_stack.rb +51 -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 +13 -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 +73 -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/deducer.rb +65 -0
- data/lib/jets/processors/main_processor.rb +61 -0
- data/lib/jets/rack_server.rb +86 -0
- data/lib/jets/rdoc.rb +30 -0
- data/lib/jets/resource.rb +71 -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 +101 -0
- data/lib/jets/resource/api_gateway/rest_api.rb +56 -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 +7 -0
- data/lib/jets/resource/api_gateway/rest_api/routes/change.rb +8 -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 +121 -0
- data/lib/jets/resource/api_gateway/rest_api/routes/collision/variable_exception.rb +7 -0
- data/lib/jets/resource/associated.rb +37 -0
- data/lib/jets/resource/base.rb +28 -0
- data/lib/jets/resource/child_stack/api_deployment.rb +56 -0
- data/lib/jets/resource/child_stack/api_gateway.rb +53 -0
- data/lib/jets/resource/child_stack/app_class.rb +107 -0
- data/lib/jets/resource/child_stack/base.rb +24 -0
- data/lib/jets/resource/child_stack/shared.rb +92 -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/rule.rb +31 -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/iot/topic_rule.rb +34 -0
- data/lib/jets/resource/lambda/event_source_mapping.rb +31 -0
- data/lib/jets/resource/lambda/function.rb +214 -0
- data/lib/jets/resource/lambda/function/environment.rb +62 -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/logs/subscription_filter.rb +31 -0
- data/lib/jets/resource/permission.rb +45 -0
- data/lib/jets/resource/replacer.rb +85 -0
- data/lib/jets/resource/route53/record_set.rb +70 -0
- data/lib/jets/resource/s3/bucket.rb +24 -0
- data/lib/jets/resource/sns/subscription.rb +29 -0
- data/lib/jets/resource/sns/topic.rb +35 -0
- data/lib/jets/resource/sns/topic_policy.rb +40 -0
- data/lib/jets/resource/sqs/queue.rb +21 -0
- data/lib/jets/resource/standardizer.rb +42 -0
- data/lib/jets/route.rb +166 -0
- data/lib/jets/router.rb +177 -0
- data/lib/jets/router/scope.rb +30 -0
- data/lib/jets/rule/base.rb +19 -0
- data/lib/jets/rule/dsl.rb +110 -0
- data/lib/jets/spec_helpers.rb +54 -0
- data/lib/jets/spec_helpers/params.rb +10 -0
- data/lib/jets/spec_helpers/request.rb +78 -0
- data/lib/jets/spec_helpers/response.rb +5 -0
- data/lib/jets/stack.rb +88 -0
- data/lib/jets/stack/builder.rb +43 -0
- data/lib/jets/stack/definition.rb +50 -0
- data/lib/jets/stack/depends.rb +34 -0
- data/lib/jets/stack/depends/item.rb +9 -0
- data/lib/jets/stack/function.rb +69 -0
- data/lib/jets/stack/main.rb +4 -0
- data/lib/jets/stack/main/dsl.rb +28 -0
- data/lib/jets/stack/main/dsl/base.rb +49 -0
- data/lib/jets/stack/main/dsl/cloudwatch.rb +19 -0
- data/lib/jets/stack/main/dsl/iam.rb +8 -0
- data/lib/jets/stack/main/dsl/lambda.rb +83 -0
- data/lib/jets/stack/main/dsl/s3.rb +12 -0
- data/lib/jets/stack/main/dsl/sns.rb +16 -0
- data/lib/jets/stack/main/dsl/sqs.rb +10 -0
- data/lib/jets/stack/output.rb +35 -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 +37 -0
- data/lib/jets/stack/parameter/dsl.rb +42 -0
- data/lib/jets/stack/resource.rb +31 -0
- data/lib/jets/stack/resource/dsl.rb +19 -0
- data/lib/jets/stack/s3_event.rb +87 -0
- data/lib/jets/tmp_loader.rb +52 -0
- data/lib/jets/turbine.rb +41 -0
- data/lib/jets/turbo.rb +55 -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/rails.rb +127 -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 +1004 -0
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
module Jets::CommonMethods
|
|
2
|
+
extend Memoist
|
|
3
|
+
# Add API Gateway Stage Name
|
|
4
|
+
def add_stage_name(url)
|
|
5
|
+
Jets::Controller::Stage.add(request.host, url)
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def on_aws?
|
|
9
|
+
on_cloud9 = Jets::Controller::Stage.on_cloud9?(request.headers['HTTP_HOST'])
|
|
10
|
+
!request.headers['HTTP_X_AMZN_TRACE_ID'].nil? && !on_cloud9
|
|
11
|
+
end
|
|
12
|
+
memoize :on_aws?
|
|
13
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
module Jets::RenderingHelper
|
|
2
|
+
# ensure that we always add the controller view name. So when rendering
|
|
3
|
+
# a partial:
|
|
4
|
+
# <%= render "mypartial" %>
|
|
5
|
+
# gets turned into:
|
|
6
|
+
# <%= render "articles/mypartial" %>
|
|
7
|
+
def render(options = {}, locals = {}, &block)
|
|
8
|
+
if options.is_a?(String) && !options.include?('/')
|
|
9
|
+
folder = _get_containing_folder(caller[0])
|
|
10
|
+
partial_name = options # happens to be the partial name
|
|
11
|
+
partial_name = "#{folder}/#{partial_name}"
|
|
12
|
+
options = partial_name
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
super(options, locals, &block)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# Ugly, going back up the caller stack to find out what view path
|
|
19
|
+
# we are in
|
|
20
|
+
def _get_containing_folder(caller_line)
|
|
21
|
+
text = caller_line.split(':').first
|
|
22
|
+
# .../fixtures/apps/demo/app/views/posts/index.html.erb
|
|
23
|
+
text.split('/')[-2] # posts
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
ActionView::Helpers.send(:include, Jets::RenderingHelper)
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
require "action_view"
|
|
2
|
+
|
|
3
|
+
# hackety hack
|
|
4
|
+
module Jets::UrlHelper
|
|
5
|
+
include Jets::CommonMethods
|
|
6
|
+
|
|
7
|
+
# Basic implementation of url_for to allow use helpers without routes existence
|
|
8
|
+
def url_for(options = nil) # :nodoc:
|
|
9
|
+
url = case options
|
|
10
|
+
when String
|
|
11
|
+
options
|
|
12
|
+
when :back
|
|
13
|
+
_back_url
|
|
14
|
+
# TODO: hook this up to Jets implmentation of config/routes.rb
|
|
15
|
+
# when ActiveRecord::Base
|
|
16
|
+
# record = options
|
|
17
|
+
# record.id
|
|
18
|
+
else
|
|
19
|
+
raise ArgumentError, "Please provided a String to link_to as the the second argument. The Jets link_to helper takes as the second argument."
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
add_stage_name(url)
|
|
23
|
+
end
|
|
24
|
+
end # UrlHelper
|
|
25
|
+
ActionView::Helpers.send(:include, Jets::UrlHelper)
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
module Jets
|
|
2
|
+
class PolyFun
|
|
3
|
+
extend Memoist
|
|
4
|
+
|
|
5
|
+
def initialize(app_class, app_meth)
|
|
6
|
+
@app_class = app_class # already a Constant, IE: PostController
|
|
7
|
+
@app_meth = app_meth.to_sym
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def run(event, context={})
|
|
11
|
+
check_private_method!
|
|
12
|
+
|
|
13
|
+
if task.lang == :ruby
|
|
14
|
+
# controller = PostsController.new(event, content)
|
|
15
|
+
# resp = controller.edit
|
|
16
|
+
run_ruby_code(event, context)
|
|
17
|
+
else
|
|
18
|
+
executor = LambdaExecutor.new(task)
|
|
19
|
+
resp = executor.run(event, context)
|
|
20
|
+
if resp["errorMessage"]
|
|
21
|
+
raise_error(resp)
|
|
22
|
+
end
|
|
23
|
+
resp
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def run_ruby_code(event, context)
|
|
28
|
+
@app_class.process(event, context, @app_meth)
|
|
29
|
+
rescue Exception => e
|
|
30
|
+
Jets.on_exception(e)
|
|
31
|
+
raise(e)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def raise_error(resp)
|
|
35
|
+
backtrace = resp["stackTrace"] + caller
|
|
36
|
+
backtrace = backtrace.map { |l| l.sub(/^\s+/,'') }
|
|
37
|
+
# Adjust the paths from the tmp path to the app path to improve user debugging
|
|
38
|
+
# experience. Example:
|
|
39
|
+
# From:
|
|
40
|
+
# File "/tmp/jets/lite/executor/20180917-16777-43a9e48/app/controllers/jets/public_controller/python/show.py", line 32
|
|
41
|
+
# To:
|
|
42
|
+
# File "app/controllers/jets/public_controller/python/show.py", line 32 backtrace =
|
|
43
|
+
backtrace = backtrace.map do |l|
|
|
44
|
+
if l.include?(Jets.build_root) && !l.include?("lambda_executor.")
|
|
45
|
+
l.sub(/\/tmp\/jets.*executor\/\d{8}-+.*?\//, '')
|
|
46
|
+
else
|
|
47
|
+
l
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
# IE: Jets::PolyFun::PythonError
|
|
52
|
+
error_class = "Jets::PolyFun::#{task.lang.to_s.camelize}Error".constantize
|
|
53
|
+
raise error_class.new(resp["errorMessage"], backtrace)
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def task
|
|
57
|
+
task = @app_class.all_public_tasks[@app_meth]
|
|
58
|
+
# Provider user a better error message to user than a nil failure.
|
|
59
|
+
unless task
|
|
60
|
+
raise "Unable to find #{@app_class}##{@app_meth}"
|
|
61
|
+
end
|
|
62
|
+
task
|
|
63
|
+
end
|
|
64
|
+
memoize :task
|
|
65
|
+
|
|
66
|
+
def check_private_method!
|
|
67
|
+
private_detected = @app_class.all_private_tasks.keys.include?(@app_meth)
|
|
68
|
+
return unless private_detected # Ok to continue
|
|
69
|
+
|
|
70
|
+
raise "The #{@app_class}##{@app_meth} is a private method. Unable to call it unless it is public"
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
require 'open3'
|
|
2
|
+
require 'tmpdir'
|
|
3
|
+
|
|
4
|
+
class Jets::PolyFun
|
|
5
|
+
class BaseExecutor
|
|
6
|
+
extend Memoist
|
|
7
|
+
|
|
8
|
+
def initialize(task)
|
|
9
|
+
@task = task
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
# Handler is in properties:
|
|
13
|
+
# 1. copy lambda function into tmp folder
|
|
14
|
+
# 2. generate Lang wrapper script
|
|
15
|
+
# 3. call wrapper script from ruby. Handle stdout and stderr and result. Pass info back to ruby
|
|
16
|
+
def run(event, context)
|
|
17
|
+
@temp_dir = create_tmpdir
|
|
18
|
+
copy_src_to_temp
|
|
19
|
+
write(code)
|
|
20
|
+
result = run_lambda_executor(event, context)
|
|
21
|
+
cleanup
|
|
22
|
+
result
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def write(code)
|
|
26
|
+
puts "lambda_executor_script #{lambda_executor_script}" if ENV['KEEP_LAMBDA_WRAPPER']
|
|
27
|
+
IO.write(lambda_executor_script, code)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# Mimic Dir.mktmpdir randomness, not using Dir.mktmpdir because that generates
|
|
31
|
+
# the folder at the /tmp level only.
|
|
32
|
+
def create_tmpdir
|
|
33
|
+
random = "#{Time.now.strftime("%Y%d%H")}-#{Process.pid}-#{SecureRandom.hex[0..6]}"
|
|
34
|
+
tmpdir = "#{Jets.build_root}/executor/#{random}"
|
|
35
|
+
FileUtils.mkdir_p(tmpdir)
|
|
36
|
+
tmpdir
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def copy_src_to_temp
|
|
40
|
+
app_class = @task.class_name.constantize
|
|
41
|
+
internal = app_class.respond_to?(:internal) && app_class.internal
|
|
42
|
+
src = internal ?
|
|
43
|
+
"#{File.expand_path("../internal", File.dirname(__FILE__))}/#{@task.poly_src_path}" :
|
|
44
|
+
"#{Jets.root}/#{@task.poly_src_path}"
|
|
45
|
+
dest = "#{@temp_dir}/#{@task.poly_src_path}"
|
|
46
|
+
|
|
47
|
+
FileUtils.mkdir_p(File.dirname(dest))
|
|
48
|
+
FileUtils.cp(src, dest)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def lambda_executor_script
|
|
52
|
+
File.dirname("#{@temp_dir}/#{@task.poly_src_path}") + "/lambda_executor" + @task.lang_ext
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# When polymorphic method errors, this method reproduces an error in the lambda format
|
|
56
|
+
# Here's some examples to help example:
|
|
57
|
+
#
|
|
58
|
+
# Example of what the raw python prints out to stderr:
|
|
59
|
+
#
|
|
60
|
+
# Traceback (most recent call last):
|
|
61
|
+
# File "/tmp/jets/lite/executor/20180804-10727-mcs6qk/lambda_executor.py", line 6, in <module>
|
|
62
|
+
# resp = handle(event, context)
|
|
63
|
+
# File "/tmp/jets/lite/executor/20180804-10727-mcs6qk/index.py", line 22, in handle
|
|
64
|
+
# return response({'message': e.message}, 400)
|
|
65
|
+
# File "/tmp/jets/lite/executor/20180804-10727-mcs6qk/index.py", line 5, in response
|
|
66
|
+
# badcode
|
|
67
|
+
# NameError: global name 'badcode' is not defined
|
|
68
|
+
#
|
|
69
|
+
# So last line has the error summary info. Other lines have stack trace after the Traceback indicator.
|
|
70
|
+
#
|
|
71
|
+
# Example of the reproduced lambda error format:
|
|
72
|
+
#
|
|
73
|
+
# {
|
|
74
|
+
# "errorMessage": "'NameError' object has no attribute 'message'",
|
|
75
|
+
# "errorType": "AttributeError",
|
|
76
|
+
# "stackTrace": [
|
|
77
|
+
# [
|
|
78
|
+
# "/var/task/handlers/controllers/posts_controller/python/index.py",
|
|
79
|
+
# 22,
|
|
80
|
+
# "handle",
|
|
81
|
+
# "return response({'message': e.message}, 400)"
|
|
82
|
+
# ]
|
|
83
|
+
# ]
|
|
84
|
+
# }
|
|
85
|
+
#
|
|
86
|
+
def run_lambda_executor(event, context)
|
|
87
|
+
interpreter = @task.lang
|
|
88
|
+
command = %Q|#{interpreter} #{lambda_executor_script} '#{JSON.dump(event)}' '#{JSON.dump(context)}'|
|
|
89
|
+
stdout, stderr, status = Open3.capture3(command)
|
|
90
|
+
# puts "=> #{command}".color(:green)
|
|
91
|
+
# puts "stdout #{stdout}"
|
|
92
|
+
# puts "stderr #{stderr}"
|
|
93
|
+
# puts "status #{status}"
|
|
94
|
+
if status.success?
|
|
95
|
+
stdout
|
|
96
|
+
else
|
|
97
|
+
# We'll mimic the way lambda displays an error.
|
|
98
|
+
# $stderr.puts(stderr) # uncomment to debug
|
|
99
|
+
error_lines = stderr.split("\n")
|
|
100
|
+
error_message = error_lines.pop
|
|
101
|
+
error_type = error_message.split(':').first
|
|
102
|
+
error_lines.shift # remove first line that has the Traceback
|
|
103
|
+
stack_trace = error_lines.reverse # python shows stack trace in opposite order from ruby
|
|
104
|
+
JSON.dump(
|
|
105
|
+
"errorMessage" => error_message,
|
|
106
|
+
"errorType" => error_type, # hardcode
|
|
107
|
+
"stackTrace" => stack_trace
|
|
108
|
+
)
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
def cleanup
|
|
113
|
+
FileUtils.rm_rf(@temp_dir) unless ENV['KEEP_LAMBDA_WRAPPER']
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
def handler
|
|
117
|
+
# Must use the generated CloudFormation template to get the handler because
|
|
118
|
+
# the handler is derived from mutiple sources.
|
|
119
|
+
resource = Jets::Resource::Lambda::Function.new(@task)
|
|
120
|
+
full_handler = resource.properties["Handler"] # full handler here
|
|
121
|
+
File.extname(full_handler).sub(/^./,'') # the extension of the full handler is the handler
|
|
122
|
+
end
|
|
123
|
+
memoize :handler
|
|
124
|
+
end
|
|
125
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
require 'json'
|
|
2
|
+
|
|
3
|
+
class Jets::PolyFun
|
|
4
|
+
class LambdaExecutor
|
|
5
|
+
def initialize(task)
|
|
6
|
+
@task = task
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def run(event, context)
|
|
10
|
+
executor_class = "Jets::PolyFun::#{@task.lang.capitalize}Executor".constantize
|
|
11
|
+
executor = executor_class.new(@task)
|
|
12
|
+
text = executor.run(event, context)
|
|
13
|
+
JSON.load(text)
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
class Jets::PolyFun
|
|
2
|
+
class NodeExecutor < BaseExecutor
|
|
3
|
+
# Code for wrapper script that mimics lambda execution. Wrapper script usage:
|
|
4
|
+
#
|
|
5
|
+
# node WRAPPER_SCRIPT EVENT
|
|
6
|
+
#
|
|
7
|
+
# Example:
|
|
8
|
+
#
|
|
9
|
+
# node /tmp/jets/demo/executor/20180804-12816-imqb9/lambda_executor.js '{}'
|
|
10
|
+
#
|
|
11
|
+
def code
|
|
12
|
+
if async_syntax?
|
|
13
|
+
async_code
|
|
14
|
+
else
|
|
15
|
+
callback_code
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# https://docs.aws.amazon.com/lambda/latest/dg/nodejs-prog-model-handler.html
|
|
20
|
+
def async_syntax?
|
|
21
|
+
app_path = "#{Jets.root}/" + @task.handler_path.sub('handlers/', 'app/')
|
|
22
|
+
source_code = IO.read(app_path)
|
|
23
|
+
source_code.match(/=\s*async.*\(/)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def async_code
|
|
27
|
+
<<-EOL
|
|
28
|
+
var event = process.argv[2]
|
|
29
|
+
event = JSON.parse(event)
|
|
30
|
+
var context = {}
|
|
31
|
+
|
|
32
|
+
var app = require("./#{@task.meth}.js")
|
|
33
|
+
app.#{handler}(event, context).then(resp => console.log(JSON.stringify(resp)))
|
|
34
|
+
EOL
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def callback_code
|
|
39
|
+
<<-EOL
|
|
40
|
+
function callback(error, response) {
|
|
41
|
+
var text = JSON.stringify(response)
|
|
42
|
+
console.log(text)
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
var event = process.argv[2]
|
|
46
|
+
event = JSON.parse(event)
|
|
47
|
+
var context = {}
|
|
48
|
+
|
|
49
|
+
var app = require("./#{@task.meth}.js")
|
|
50
|
+
var resp = app.#{handler}(event, context, callback)
|
|
51
|
+
EOL
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
class Jets::PolyFun
|
|
2
|
+
class PythonExecutor < BaseExecutor
|
|
3
|
+
# Code for wrapper script that mimics lambda execution. Wrapper script usage:
|
|
4
|
+
#
|
|
5
|
+
# python WRAPPER_SCRIPT EVENT
|
|
6
|
+
#
|
|
7
|
+
# Example:
|
|
8
|
+
#
|
|
9
|
+
# python /tmp/jets/demo/executor/20180804-12816-imqb9/lambda_executor.py '{}'
|
|
10
|
+
def code
|
|
11
|
+
<<-EOL
|
|
12
|
+
import sys
|
|
13
|
+
import json
|
|
14
|
+
from #{@task.meth} import #{handler}
|
|
15
|
+
event = json.loads(sys.argv[1])
|
|
16
|
+
context = {}
|
|
17
|
+
resp = #{handler}(event, context)
|
|
18
|
+
result = json.dumps(resp)
|
|
19
|
+
print(result)
|
|
20
|
+
EOL
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
data/lib/jets/preheat.rb
ADDED
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
module Jets
|
|
2
|
+
class Preheat
|
|
3
|
+
extend Memoist
|
|
4
|
+
|
|
5
|
+
# Examples:
|
|
6
|
+
#
|
|
7
|
+
# Jets::Preheat.warm("posts_controller-index")
|
|
8
|
+
# Jets::Preheat.warm("jets-preheat_job-warm")
|
|
9
|
+
#
|
|
10
|
+
def self.warm(function_name, options={})
|
|
11
|
+
Preheat.new(options).warm(function_name)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def self.warm_all(options={})
|
|
15
|
+
Preheat.new(options).warm_all
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def initialize(options)
|
|
19
|
+
@options = options # passed to Call.new options
|
|
20
|
+
@options[:mute_output] = true if @options[:mute_output].nil?
|
|
21
|
+
@options[:lambda_proxy] = false # do not transform controller event from {"event": "1"} to {"queryStringParameters":{"_prewarm":"1"}}
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# Makes remote call to the Lambda function.
|
|
25
|
+
def warm(function_name)
|
|
26
|
+
Jets::Commands::Call.new(function_name, '{"_prewarm": "1"}', @options).run unless ENV['TEST']
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# Loop through all methods for each class and makes special prewarm call to each method.
|
|
30
|
+
def warm_all
|
|
31
|
+
threads = []
|
|
32
|
+
all_functions.each do |function_name|
|
|
33
|
+
next if function_name.include?('jets-public_controller') # handled by warm_public_controller_more
|
|
34
|
+
next if function_name.include?('jets-rack_controller') # handled by warm_rack_controller_more
|
|
35
|
+
threads << Thread.new do
|
|
36
|
+
warm(function_name)
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
threads.each { |t| t.join }
|
|
40
|
+
|
|
41
|
+
# Warm the these controllers more since they can be hit more often
|
|
42
|
+
warm_public_controller_more
|
|
43
|
+
warm_rack_controller_more
|
|
44
|
+
|
|
45
|
+
# return the funciton names so we can see in the Lambda console
|
|
46
|
+
# the functions being prewarmed
|
|
47
|
+
all_functions
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def warm_public_controller_more
|
|
51
|
+
function_name = 'jets-public_controller-show' # key function name
|
|
52
|
+
return unless all_functions.include?(function_name)
|
|
53
|
+
|
|
54
|
+
public_ratio = Jets.config.prewarm.public_ratio
|
|
55
|
+
return if public_ratio == 0
|
|
56
|
+
|
|
57
|
+
puts "Prewarming the public controller extra at a ratio of #{public_ratio}" unless @options[:mute]
|
|
58
|
+
|
|
59
|
+
threads = []
|
|
60
|
+
public_ratio.times do
|
|
61
|
+
threads << Thread.new do
|
|
62
|
+
warm(function_name)
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
threads.each { |t| t.join }
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def warm_rack_controller_more
|
|
69
|
+
return unless Jets.rack?
|
|
70
|
+
function_name = 'jets-rack_controller-process' # key function name
|
|
71
|
+
return unless all_functions.include?(function_name)
|
|
72
|
+
|
|
73
|
+
rack_ratio = Jets.config.prewarm.rack_ratio
|
|
74
|
+
return if rack_ratio == 0
|
|
75
|
+
|
|
76
|
+
puts "Prewarming the rack controller extra at a ratio of #{rack_ratio}" unless @options[:mute]
|
|
77
|
+
|
|
78
|
+
threads = []
|
|
79
|
+
rack_ratio.times do
|
|
80
|
+
threads << Thread.new do
|
|
81
|
+
warm(function_name)
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
threads.each { |t| t.join }
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
# Returns:
|
|
88
|
+
# [
|
|
89
|
+
# "posts_controller-index",
|
|
90
|
+
# "posts_controller-show",
|
|
91
|
+
# ...
|
|
92
|
+
# ]
|
|
93
|
+
def all_functions
|
|
94
|
+
classes.map do |klass|
|
|
95
|
+
tasks = klass.tasks.select { |t| t.lang == :ruby } # only prewarm ruby functions
|
|
96
|
+
tasks.map do |task|
|
|
97
|
+
meth = task.meth
|
|
98
|
+
underscored = klass.to_s.underscore.gsub('/','-')
|
|
99
|
+
"#{underscored}-#{meth}" # function_name
|
|
100
|
+
end
|
|
101
|
+
end.flatten.uniq.compact
|
|
102
|
+
end
|
|
103
|
+
memoize :all_functions
|
|
104
|
+
|
|
105
|
+
def classes
|
|
106
|
+
Jets::Commands::Build.app_files.map do |path|
|
|
107
|
+
next if path.include?("preheat_job.rb") # dont want to cause an infinite loop, just in case
|
|
108
|
+
next unless path =~ %r{app/controllers} # only prewarm controllers
|
|
109
|
+
|
|
110
|
+
class_path = path.sub(%r{.*app/\w+/},'').sub(/\.rb$/,'')
|
|
111
|
+
class_name = class_path.camelize
|
|
112
|
+
# IE: PostsController
|
|
113
|
+
class_name.constantize # load app/**/* class definition
|
|
114
|
+
end.compact
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
end
|