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