jets 0.2.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/.circleci/bin/commit_docs.sh +26 -0
- data/.circleci/config.yml +126 -0
- data/.codebuild/README.md +57 -0
- data/.codebuild/bin/jets +3 -0
- data/.codebuild/buildspec-base.yml +14 -0
- data/.codebuild/integration.sh +54 -0
- data/.codebuild/jets.postman_collection.json +323 -0
- data/.codebuild/scripts/install-docker.sh +12 -0
- data/.codebuild/scripts/install-dynamodb-local.sh +22 -0
- data/.codebuild/scripts/install-java.sh +20 -0
- data/.codebuild/scripts/install-node.sh +4 -0
- data/.gitignore +3 -0
- data/.gitmodules +9 -0
- data/.python-version +1 -0
- data/.rspec +2 -0
- data/.ruby-version +1 -1
- data/CHANGELOG.md +3 -0
- data/Dockerfile +16 -0
- data/Dockerfile.base +53 -0
- data/Gemfile +8 -1
- data/Gemfile.lock +132 -28
- data/LICENSE.txt +1 -1
- data/Procfile +2 -0
- data/README.md +116 -17
- data/Rakefile +6 -0
- data/buildspec.yml +18 -0
- data/exe/jets +14 -0
- data/jets.gemspec +31 -3
- data/lib/jets.rb +56 -8
- data/lib/jets/application.rb +121 -0
- data/lib/jets/application/middleware.rb +23 -0
- data/lib/jets/aws_services.rb +71 -0
- data/lib/jets/booter.rb +95 -0
- data/lib/jets/builders.rb +6 -0
- data/lib/jets/builders/code_builder.rb +431 -0
- data/lib/jets/builders/deducer.rb +73 -0
- data/lib/jets/builders/gem_replacer.rb +154 -0
- data/lib/jets/builders/handler_generator.rb +76 -0
- data/lib/jets/builders/node-hello.js +73 -0
- data/lib/jets/builders/node-shim.js +151 -0
- data/lib/jets/cfn.rb +5 -4
- data/lib/jets/cfn/ship.rb +178 -0
- data/lib/jets/cfn/status.rb +208 -0
- data/lib/jets/cfn/template_builders.rb +21 -0
- data/lib/jets/cfn/template_builders/api_gateway_builder.rb +73 -0
- data/lib/jets/cfn/template_builders/api_gateway_deployment_builder.rb +38 -0
- data/lib/jets/cfn/template_builders/base_child_builder.rb +38 -0
- data/lib/jets/cfn/template_builders/controller_builder.rb +107 -0
- data/lib/jets/cfn/template_builders/function_builder.rb +20 -0
- data/lib/jets/cfn/template_builders/function_properties.rb +6 -0
- data/lib/jets/cfn/template_builders/function_properties/base_builder.rb +106 -0
- data/lib/jets/cfn/template_builders/function_properties/node_builder.rb +12 -0
- data/lib/jets/cfn/template_builders/function_properties/python_builder.rb +12 -0
- data/lib/jets/cfn/template_builders/function_properties/ruby_builder.rb +13 -0
- data/lib/jets/cfn/template_builders/interface.rb +91 -0
- data/lib/jets/cfn/template_builders/job_builder.rb +63 -0
- data/lib/jets/cfn/template_builders/parent_builder.rb +97 -0
- data/lib/jets/cfn/template_builders/rule_builder.rb +55 -0
- data/lib/jets/cfn/template_builders/templates/minimal-stack.yml +45 -0
- data/lib/jets/cfn/template_mappers.rb +23 -0
- data/lib/jets/cfn/template_mappers/api_gateway_deployment_mapper.rb +48 -0
- data/lib/jets/cfn/template_mappers/api_gateway_mapper.rb +4 -0
- data/lib/jets/cfn/template_mappers/child_mapper.rb +41 -0
- data/lib/jets/cfn/template_mappers/config_rule_mapper.rb +34 -0
- data/lib/jets/cfn/template_mappers/controller_mapper.rb +36 -0
- data/lib/jets/cfn/template_mappers/events_rule_mapper.rb +40 -0
- data/lib/jets/cfn/template_mappers/function_mapper.rb +4 -0
- data/lib/jets/cfn/template_mappers/gateway_method_mapper.rb +56 -0
- data/lib/jets/cfn/template_mappers/gateway_resource_mapper.rb +62 -0
- data/lib/jets/cfn/template_mappers/job_mapper.rb +4 -0
- data/lib/jets/cfn/template_mappers/lambda_function_mapper.rb +50 -0
- data/lib/jets/cfn/template_mappers/rule_mapper.rb +5 -0
- data/lib/jets/cli.rb +180 -15
- data/lib/jets/commands.rb +22 -0
- data/lib/jets/commands/base.rb +151 -0
- data/lib/jets/commands/build.rb +186 -0
- data/lib/jets/commands/call.rb +175 -0
- data/lib/jets/commands/call/anonymous_guesser.rb +96 -0
- data/lib/jets/commands/call/autoload_guesser.rb +112 -0
- data/lib/jets/commands/call/base_guesser.rb +33 -0
- data/lib/jets/commands/call/guesser.rb +51 -0
- data/lib/jets/commands/console.rb +12 -0
- data/lib/jets/commands/db.rb +15 -0
- data/lib/jets/commands/db/environment-task.rake +3 -0
- data/lib/jets/commands/db/tasks.rb +30 -0
- data/lib/jets/commands/dbconsole.rb +131 -0
- data/lib/jets/commands/delete.rb +119 -0
- data/lib/jets/commands/deploy.rb +53 -0
- data/lib/jets/commands/dynamodb.rb +22 -0
- data/lib/jets/commands/dynamodb/migrate.rb +9 -0
- data/lib/jets/commands/dynamodb/migrator.rb +36 -0
- data/lib/jets/commands/help.rb +9 -0
- data/lib/jets/commands/help/build.md +1 -0
- data/lib/jets/commands/help/call.md +55 -0
- data/lib/jets/commands/help/console.md +4 -0
- data/lib/jets/commands/help/db/generate.md +8 -0
- data/lib/jets/commands/help/dbconsole.md +5 -0
- data/lib/jets/commands/help/delete.md +9 -0
- data/lib/jets/commands/help/deploy.md +5 -0
- data/lib/jets/commands/help/dynamodb/generate.md +50 -0
- data/lib/jets/commands/help/dynamodb/migrate.md +4 -0
- data/lib/jets/commands/help/generate.md +5 -0
- data/lib/jets/commands/help/new.md +9 -0
- data/lib/jets/commands/help/process/controller.md +6 -0
- data/lib/jets/commands/help/process/function.md +5 -0
- data/lib/jets/commands/help/process/job.md +5 -0
- data/lib/jets/commands/help/process/rule.md +5 -0
- data/lib/jets/commands/help/routes.md +3 -0
- data/lib/jets/commands/help/server.md +6 -0
- data/lib/jets/commands/help/status.md +1 -0
- data/lib/jets/commands/help/url.md +5 -0
- data/lib/jets/commands/main.rb +111 -0
- data/lib/jets/commands/markdown.rb +8 -0
- data/lib/jets/commands/markdown/creator.rb +58 -0
- data/lib/jets/commands/markdown/index.rb +27 -0
- data/lib/jets/commands/markdown/page.rb +125 -0
- data/lib/jets/commands/markdown/shell.rb +11 -0
- data/lib/jets/commands/new.rb +110 -0
- data/lib/jets/commands/rake_command.rb +61 -0
- data/lib/jets/commands/rake_tasks.rb +45 -0
- data/lib/jets/commands/sequence.rb +44 -0
- data/lib/jets/commands/stack_info.rb +30 -0
- data/lib/jets/commands/templates/skeleton/.env +2 -0
- data/lib/jets/commands/templates/skeleton/.env.development.tt +3 -0
- data/lib/jets/commands/templates/skeleton/.env.test +3 -0
- data/lib/jets/commands/templates/skeleton/.gitignore +14 -0
- data/lib/jets/commands/templates/skeleton/.jetskeep +1 -0
- data/lib/jets/commands/templates/skeleton/Gemfile.tt +27 -0
- data/lib/jets/commands/templates/skeleton/Procfile +7 -0
- data/lib/jets/commands/templates/skeleton/README.md +4 -0
- data/lib/jets/commands/templates/skeleton/Rakefile +2 -0
- data/lib/jets/commands/templates/skeleton/app/controllers/application_controller.rb +2 -0
- data/lib/jets/commands/templates/skeleton/app/helpers/application_helper.rb +2 -0
- data/lib/jets/commands/templates/skeleton/app/jobs/application_job.rb +2 -0
- data/lib/jets/commands/templates/skeleton/app/models/application_item.rb +2 -0
- data/lib/jets/commands/templates/skeleton/app/models/application_record.rb +3 -0
- data/lib/jets/commands/templates/skeleton/app/views/layouts/application.html.erb.tt +24 -0
- data/lib/jets/commands/templates/skeleton/bin/ruby_server +18 -0
- data/lib/jets/commands/templates/skeleton/bin/ruby_server.rb +2 -0
- data/lib/jets/commands/templates/skeleton/config.ru +4 -0
- data/lib/jets/commands/templates/skeleton/config/application.rb.tt +26 -0
- data/lib/jets/commands/templates/skeleton/config/database.yml.tt +27 -0
- data/lib/jets/commands/templates/skeleton/config/dynamodb.yml +25 -0
- data/lib/jets/commands/templates/skeleton/config/routes.rb +8 -0
- data/lib/jets/commands/templates/skeleton/db/.gitkeep +0 -0
- data/lib/jets/commands/templates/skeleton/public/404.html +67 -0
- data/lib/jets/commands/templates/skeleton/public/422.html +67 -0
- data/lib/jets/commands/templates/skeleton/public/500.html +66 -0
- data/lib/jets/commands/templates/skeleton/public/favicon.ico +0 -0
- data/lib/jets/commands/templates/skeleton/public/index.html.tt +79 -0
- data/lib/jets/commands/templates/skeleton/spec/controllers/posts_controller_spec.rb +18 -0
- data/lib/jets/commands/templates/skeleton/spec/fixtures/payloads/posts-index.json +51 -0
- data/lib/jets/commands/templates/skeleton/spec/fixtures/payloads/posts-show.json +53 -0
- data/lib/jets/commands/templates/skeleton/spec/spec_helper.rb.tt +27 -0
- data/lib/jets/commands/templates/webpacker/app/javascript/packs/application.js.tt +14 -0
- data/lib/jets/commands/templates/webpacker/app/javascript/packs/theme.scss.tt +24 -0
- data/lib/jets/commands/templates/webpacker/app/javascript/src/jets/crud.js +87 -0
- data/lib/jets/commands/url.rb +45 -0
- data/lib/jets/commands/webpacker_template.rb +19 -0
- data/lib/jets/controller.rb +9 -0
- data/lib/jets/controller/base.rb +50 -0
- data/lib/jets/controller/callbacks.rb +43 -0
- data/lib/jets/controller/layout.rb +17 -0
- data/lib/jets/controller/params.rb +53 -0
- data/lib/jets/controller/redirection.rb +55 -0
- data/lib/jets/controller/renderers.rb +5 -0
- data/lib/jets/controller/renderers/aws_proxy_renderer.rb +69 -0
- data/lib/jets/controller/renderers/base_renderer.rb +16 -0
- data/lib/jets/controller/renderers/template_renderer.rb +107 -0
- data/lib/jets/controller/rendering.rb +80 -0
- data/lib/jets/controller/request.rb +55 -0
- data/lib/jets/core.rb +81 -0
- data/lib/jets/default/application.rb +20 -0
- data/lib/jets/dotenv.rb +37 -0
- data/lib/jets/erb.rb +51 -0
- data/lib/jets/generator.rb +40 -0
- data/lib/jets/generator/templates/erb/controller/view.html.erb +2 -0
- data/lib/jets/generator/templates/erb/scaffold/_form.html.erb +39 -0
- data/lib/jets/generator/templates/erb/scaffold/edit.html.erb +6 -0
- data/lib/jets/generator/templates/erb/scaffold/index.html.erb +29 -0
- data/lib/jets/generator/templates/erb/scaffold/new.html.erb +5 -0
- data/lib/jets/generator/templates/erb/scaffold/show.html.erb +9 -0
- data/lib/jets/generator/templates/rails/assets/javascript.js +2 -0
- data/lib/jets/generator/templates/rails/assets/stylesheet.css +4 -0
- data/lib/jets/generator/templates/rails/controller/controller.rb +13 -0
- data/lib/jets/generator/templates/rails/helper/helper.rb +4 -0
- data/lib/jets/generator/templates/rails/scaffold/scaffold.css +80 -0
- data/lib/jets/generator/templates/rails/scaffold_controller/api_controller.rb +62 -0
- data/lib/jets/generator/templates/rails/scaffold_controller/controller.rb +71 -0
- data/lib/jets/internal/app/controllers/jets/public_controller.rb +30 -0
- data/lib/jets/internal/app/controllers/jets/public_controller/python/show.py +47 -0
- data/lib/jets/internal/app/controllers/jets/public_controller/python/show.pyc +0 -0
- data/lib/jets/internal/app/controllers/jets/welcome_controller.rb +22 -0
- data/lib/jets/internal/app/controllers/jets/welcome_controller/python/index.py +24 -0
- data/lib/jets/internal/app/jobs/jets/preheat_job.rb +52 -0
- data/lib/jets/job.rb +5 -0
- data/lib/jets/job/base.rb +29 -0
- data/lib/jets/job/dsl.rb +58 -0
- data/lib/jets/job/task.rb +17 -0
- data/lib/jets/klass.rb +71 -0
- data/lib/jets/lambda.rb +18 -0
- data/lib/jets/lambda/dsl.rb +153 -0
- data/lib/jets/lambda/function.rb +29 -0
- data/lib/jets/lambda/function_constructor.rb +60 -0
- data/lib/jets/lambda/functions.rb +22 -0
- data/lib/jets/lambda/task.rb +77 -0
- data/lib/jets/naming.rb +61 -0
- data/lib/jets/pascalize.rb +30 -0
- data/lib/jets/poly_fun.rb +61 -0
- data/lib/jets/poly_fun/base_executor.rb +129 -0
- data/lib/jets/poly_fun/lambda_executor.rb +16 -0
- data/lib/jets/poly_fun/node_error.rb +8 -0
- data/lib/jets/poly_fun/node_executor.rb +54 -0
- data/lib/jets/poly_fun/python_error.rb +8 -0
- data/lib/jets/poly_fun/python_executor.rb +23 -0
- data/lib/jets/preheat.rb +72 -0
- data/lib/jets/processors.rb +4 -0
- data/lib/jets/processors/deducer.rb +54 -0
- data/lib/jets/processors/main_processor.rb +57 -0
- data/lib/jets/rails_overrides.rb +4 -0
- data/lib/jets/rails_overrides/asset_tag_helper.rb +41 -0
- data/lib/jets/rails_overrides/common_methods.rb +13 -0
- data/lib/jets/rails_overrides/rendering_helper.rb +26 -0
- data/lib/jets/rails_overrides/url_helper.rb +26 -0
- data/lib/jets/route.rb +145 -0
- data/lib/jets/router.rb +115 -0
- data/lib/jets/ruby_server.rb +91 -0
- data/lib/jets/rule.rb +5 -0
- data/lib/jets/rule/base.rb +19 -0
- data/lib/jets/rule/dsl.rb +64 -0
- data/lib/jets/rule/task.rb +44 -0
- data/lib/jets/server.rb +16 -0
- data/lib/jets/server/api_gateway.rb +39 -0
- data/lib/jets/server/lambda_aws_proxy.rb +122 -0
- data/lib/jets/server/route_matcher.rb +96 -0
- data/lib/jets/server/timing_middleware.rb +16 -0
- data/lib/jets/server/webpacker_setup.rb +7 -0
- data/lib/jets/timing.rb +65 -0
- data/lib/jets/timing/report.rb +82 -0
- data/lib/jets/util.rb +7 -12
- data/lib/jets/version.rb +1 -1
- data/support/clean +3 -0
- data/support/console +3 -0
- metadata +473 -76
- data/bin/jets +0 -14
- data/lib/jets/base_controller.rb +0 -54
- data/lib/jets/build.rb +0 -46
- data/lib/jets/build/handler_generator.rb +0 -46
- data/lib/jets/build/lambda_deducer.rb +0 -23
- data/lib/jets/build/templates/handler.js +0 -149
- data/lib/jets/build/traveling_ruby.rb +0 -133
- data/lib/jets/cfn/base.rb +0 -17
- data/lib/jets/cfn/builder.rb +0 -53
- data/lib/jets/cfn/namer.rb +0 -30
- data/lib/jets/cli/help.rb +0 -19
- data/lib/jets/command.rb +0 -25
- data/lib/jets/process.rb +0 -18
- data/lib/jets/process/base_processor.rb +0 -23
- data/lib/jets/process/controller_processor.rb +0 -36
- data/lib/jets/process/help.rb +0 -11
- data/lib/jets/process/processor_deducer.rb +0 -51
- data/lib/jets/project.rb +0 -23
- data/notes/design.md +0 -107
- data/notes/faq.md +0 -3
- data/notes/lambda_ruby_info.md +0 -34
- data/notes/traveling-ruby-packaging-jets.md +0 -26
- data/notes/traveling-ruby-packaging.md +0 -103
- data/notes/traveling-ruby-structure.md +0 -6
- data/notes/traveling-ruby.md +0 -82
- data/spec/fixtures/classes.rb +0 -5
- data/spec/fixtures/project/.gitignore +0 -3
- data/spec/fixtures/project/.ruby-version +0 -1
- data/spec/fixtures/project/Gemfile +0 -4
- data/spec/fixtures/project/Gemfile.lock +0 -23
- data/spec/fixtures/project/app/controllers/application_controller.rb +0 -2
- data/spec/fixtures/project/app/controllers/posts_controller.rb +0 -12
- data/spec/fixtures/project/bin/jets +0 -22
- data/spec/fixtures/project/config/routes.rb +0 -6
- data/spec/fixtures/project/handlers/controllers/posts.js +0 -212
- data/spec/lib/cli_spec.rb +0 -20
- data/spec/lib/jets/base_controller_spec.rb +0 -18
- data/spec/lib/jets/build/handler_generator_spec.rb +0 -20
- data/spec/lib/jets/build/lambda_deducer_spec.rb +0 -15
- data/spec/lib/jets/build_spec.rb +0 -34
- data/spec/lib/jets/cfn/builder_spec.rb +0 -18
- data/spec/lib/jets/cfn/namer_spec.rb +0 -16
- data/spec/lib/jets/process/controller_processor_spec.rb +0 -22
- data/spec/lib/jets/process/infer_spec.rb +0 -24
- data/spec/lib/jets/process_spec.rb +0 -18
- data/spec/lib/jets/project_spec.rb +0 -14
- data/spec/spec_helper.rb +0 -28
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Essentially the events of the CloudFormation stack update. If the CloudFormation stack is currently updating, this will tail the events logs.
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
require "thor"
|
|
2
|
+
|
|
3
|
+
module Jets::Commands
|
|
4
|
+
class Main < Base
|
|
5
|
+
|
|
6
|
+
class_option :noop, type: :boolean
|
|
7
|
+
|
|
8
|
+
desc "build", "Builds and packages project for AWS Lambda"
|
|
9
|
+
long_desc Help.text(:build)
|
|
10
|
+
option :templates_only, type: :boolean, default: false, desc: "provide a way to skip building the code and only build the CloudFormation templates"
|
|
11
|
+
def build
|
|
12
|
+
Build.new(options).run
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
desc "deploy [environment]", "Builds and deploys project to AWS Lambda"
|
|
16
|
+
long_desc Help.text(:deploy)
|
|
17
|
+
option :capabilities, type: :array, desc: "iam capabilities. Ex: CAPABILITY_IAM, CAPABILITY_NAMED_IAM"
|
|
18
|
+
option :iam, type: :boolean, desc: "Shortcut for common IAM capabilities: CAPABILITY_IAM, CAPABILITY_NAMED_IAM"
|
|
19
|
+
# Note the environment is here to trick the Thor parser to allowing an
|
|
20
|
+
# environment parameter. It is not actually set here. It is set earlier
|
|
21
|
+
# in cli.rb: set_jets_env_for_deploy_command!
|
|
22
|
+
def deploy(environment=nil)
|
|
23
|
+
Jets::Timing.clear # must happen outside Deploy#run
|
|
24
|
+
Deploy.new(options).run
|
|
25
|
+
Jets::Timing.report
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
desc "delete", "Delete the Jets project and all its resources"
|
|
29
|
+
long_desc Help.text(:delete)
|
|
30
|
+
option :sure, type: :boolean, desc: "Skip are you sure prompt."
|
|
31
|
+
option :wait, type: :boolean, default: true, desc: "Wait for stack deletion to complete."
|
|
32
|
+
def delete
|
|
33
|
+
Delete.new(options).run
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
desc "server", "Runs a local server that mimics API Gateway for development"
|
|
37
|
+
long_desc Help.text(:server)
|
|
38
|
+
option :port, default: "8888", desc: "use PORT"
|
|
39
|
+
option :host, default: "127.0.0.1", desc: "listen on HOST"
|
|
40
|
+
def server
|
|
41
|
+
# shell out to shotgun for automatic reloading
|
|
42
|
+
o = options
|
|
43
|
+
command = "bundle exec shotgun --port #{o[:port]} --host #{o[:host]}"
|
|
44
|
+
puts "=> #{command}".colorize(:green)
|
|
45
|
+
puts Jets::Booter.message
|
|
46
|
+
system(command)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
desc "routes", "Print out your application routes"
|
|
50
|
+
long_desc Help.text(:routes)
|
|
51
|
+
def routes
|
|
52
|
+
puts Jets::Router.routes_help
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
desc "console", "REPL console with Jets environment loaded"
|
|
56
|
+
long_desc Help.text(:console)
|
|
57
|
+
def console
|
|
58
|
+
Console.run
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
desc "dbconsole", "Starts DB REPL console"
|
|
62
|
+
long_desc Help.text(:dbconsole)
|
|
63
|
+
def dbconsole
|
|
64
|
+
Dbconsole.start(*args)
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
# Command is called 'call' because invoke is a Thor keyword.
|
|
68
|
+
desc "call [function] [event]", "Call a lambda function on AWS or locally"
|
|
69
|
+
long_desc Help.text(:call)
|
|
70
|
+
option :invocation_type, default: "RequestResponse", desc: "RequestResponse, Event, or DryRun"
|
|
71
|
+
option :log_type, default: "Tail", desc: "Works if invocation_type set to RequestResponse"
|
|
72
|
+
option :qualifier, desc: "Lambda function version or alias name"
|
|
73
|
+
option :show_log, type: :boolean, desc: "Shows last 4KB of log in the x-amz-log-result header"
|
|
74
|
+
option :lambda_proxy, type: :boolean, default: true, desc: "Enables automatic Lambda proxy transformation of the event payload"
|
|
75
|
+
option :guess, type: :boolean, default: true, desc: "Enables guess mode. Uses inference to allows use of all dashes to specify functions. Smart mode verifies that the function exists in the code base."
|
|
76
|
+
option :local, type: :boolean, desc: "Enables local mode. Instead of invoke the AWS Lambda function, the method gets called locally with current app code. With local mode guess mode is always used."
|
|
77
|
+
def call(function_name, payload='')
|
|
78
|
+
Call.new(function_name, payload, options).run
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
desc "generate [type] [args]", "Generates things like scaffolds"
|
|
82
|
+
long_desc Help.text(:generate)
|
|
83
|
+
def generate(generator, *args)
|
|
84
|
+
Jets::Generator.invoke(generator, *args)
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
desc "status", "Shows the current status of the Jets app."
|
|
88
|
+
long_desc Help.text(:status)
|
|
89
|
+
def status
|
|
90
|
+
Jets::Cfn::Status.new(options).run
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
desc "url", "App url if routes are defined"
|
|
94
|
+
long_desc Help.text(:url)
|
|
95
|
+
def url
|
|
96
|
+
Jets::Commands::Url.new(options).display
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
desc "version", "Prints Jets version"
|
|
100
|
+
long_desc Help.text(:version)
|
|
101
|
+
def version
|
|
102
|
+
puts Jets.version
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
long_desc Help.text(:new)
|
|
106
|
+
Jets::Commands::New.cli_options.each do |args|
|
|
107
|
+
option *args
|
|
108
|
+
end
|
|
109
|
+
register(Jets::Commands::New, "new", "new", "Creates a starter skeleton jets project")
|
|
110
|
+
end
|
|
111
|
+
end
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
module Jets::Commands::Markdown
|
|
2
|
+
class Creator
|
|
3
|
+
cattr_accessor :mute
|
|
4
|
+
|
|
5
|
+
def self.create_all
|
|
6
|
+
clean
|
|
7
|
+
new.create_all
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def self.clean
|
|
11
|
+
FileUtils.rm_rf("docs/_reference")
|
|
12
|
+
FileUtils.rm_f("docs/reference.md")
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def cli_classes
|
|
16
|
+
Jets::Commands::Base.namespaced_commands.map do |full_command|
|
|
17
|
+
# IE of full_command: dynamodb:generate
|
|
18
|
+
Jets::CLI.new([full_command]).lookup(full_command)
|
|
19
|
+
end.uniq
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def create_all
|
|
23
|
+
create_index
|
|
24
|
+
|
|
25
|
+
cli_classes.each do |cli_class|
|
|
26
|
+
# cli_class examples:
|
|
27
|
+
# Jets::Commands::Main
|
|
28
|
+
# Jets::Commands::Db
|
|
29
|
+
# Jets::Commands::Dynamodb::Migrate
|
|
30
|
+
cli_class.commands.each do |command|
|
|
31
|
+
command_name = command.first
|
|
32
|
+
|
|
33
|
+
page = Page.new(cli_class: cli_class, command_name: command_name)
|
|
34
|
+
create_page(page)
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def create_page(page)
|
|
40
|
+
puts "Creating page: #{page.path}..."
|
|
41
|
+
FileUtils.mkdir_p(File.dirname(page.path))
|
|
42
|
+
IO.write(page.path, page.doc)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def create_index
|
|
46
|
+
create_include_reference
|
|
47
|
+
page = Index.new
|
|
48
|
+
FileUtils.mkdir_p(File.dirname(page.path))
|
|
49
|
+
puts "Creating index: #{page.path}"
|
|
50
|
+
IO.write(page.path, page.doc)
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def create_include_reference
|
|
54
|
+
path = "docs/_includes/reference.md"
|
|
55
|
+
IO.write(path, "Generic tool description. Please edit #{path} with a description.") unless File.exist?(path)
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
module Jets::Commands::Markdown
|
|
2
|
+
class Index
|
|
3
|
+
def path
|
|
4
|
+
"docs/reference.md"
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
def command_list
|
|
8
|
+
commands = Jets::Commands::Base.namespaced_commands.sort.reject {|c| c.include?('help') }
|
|
9
|
+
commands.map do |full_command|
|
|
10
|
+
# Example: [jets deploy]({% link _reference/jets-deploy.md %})
|
|
11
|
+
link = full_command.gsub(':','-')
|
|
12
|
+
"* [jets #{full_command}]({% link _reference/jets-#{link}.md %})"
|
|
13
|
+
end.join("\n")
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def doc
|
|
17
|
+
<<-EOL
|
|
18
|
+
---
|
|
19
|
+
title: CLI Reference
|
|
20
|
+
---
|
|
21
|
+
{% include reference.md %}
|
|
22
|
+
|
|
23
|
+
#{command_list}
|
|
24
|
+
EOL
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
module Jets::Commands::Markdown
|
|
2
|
+
class Page
|
|
3
|
+
attr_reader :cli_name
|
|
4
|
+
def initialize(cli_class:, command_name:)
|
|
5
|
+
@cli_class = cli_class # IE: Jets::Commands::Main
|
|
6
|
+
@command_name = command_name # IE: generate
|
|
7
|
+
|
|
8
|
+
@cli_name = "jets"
|
|
9
|
+
@command = @cli_class.commands[@command_name]
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def usage
|
|
13
|
+
banner = @cli_class.send(:banner, @command) # banner is protected method
|
|
14
|
+
invoking_command = File.basename($0) # could be rspec, etc
|
|
15
|
+
banner.sub(invoking_command, cli_name)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def full_command
|
|
19
|
+
[namespace, @command_name].compact.join(':')
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def namespace
|
|
23
|
+
ns = @cli_class.to_s.sub('Jets::Commands::','').underscore.gsub('/','-')
|
|
24
|
+
ns == 'main' ? nil : ns
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def description
|
|
28
|
+
@command.description
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def options
|
|
32
|
+
shell = Shell.new
|
|
33
|
+
@cli_class.send(:class_options_help, shell, nil => @command.options.values)
|
|
34
|
+
text = shell.stdout.string
|
|
35
|
+
return "" if text.empty? # there are no options
|
|
36
|
+
|
|
37
|
+
lines = text.split("\n")[1..-1] # remove first line wihth "Options: "
|
|
38
|
+
lines.map! do |line|
|
|
39
|
+
# remove 2 leading spaces
|
|
40
|
+
line.sub(/^ /, '')
|
|
41
|
+
end
|
|
42
|
+
lines.join("\n")
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# Use command's long description as main description
|
|
46
|
+
def long_description
|
|
47
|
+
text = @command.long_description
|
|
48
|
+
return "" if text.nil? # empty description
|
|
49
|
+
|
|
50
|
+
lines = text.split("\n")
|
|
51
|
+
lines.map do |line|
|
|
52
|
+
# In the CLI help, we use 2 spaces to designate commands
|
|
53
|
+
# In Markdown we need 4 spaces.
|
|
54
|
+
line.sub(/^ \b/, ' ')
|
|
55
|
+
end.join("\n")
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def path
|
|
59
|
+
full_name = [cli_name, namespace, @command_name].compact.join('-')
|
|
60
|
+
"docs/_reference/#{full_name}.md"
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def doc
|
|
64
|
+
<<-EOL
|
|
65
|
+
#{front_matter}
|
|
66
|
+
#{usage_markdown}
|
|
67
|
+
#{long_desc_markdown}
|
|
68
|
+
#{options_markdown}
|
|
69
|
+
EOL
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def front_matter
|
|
73
|
+
command = [cli_name, full_command].compact.join(' ')
|
|
74
|
+
<<-EOL
|
|
75
|
+
---
|
|
76
|
+
title: #{command}
|
|
77
|
+
reference: true
|
|
78
|
+
---
|
|
79
|
+
EOL
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def usage_markdown
|
|
83
|
+
<<-EOL
|
|
84
|
+
## Usage
|
|
85
|
+
|
|
86
|
+
#{usage}
|
|
87
|
+
EOL
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def desc_markdown
|
|
91
|
+
<<-EOL
|
|
92
|
+
## Description
|
|
93
|
+
|
|
94
|
+
#{description}
|
|
95
|
+
EOL
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
# If the Thor long_description is empty then use the description.
|
|
99
|
+
def long_desc_markdown
|
|
100
|
+
return desc_markdown if long_description.empty?
|
|
101
|
+
|
|
102
|
+
<<-EOL
|
|
103
|
+
## Description
|
|
104
|
+
|
|
105
|
+
#{description}.
|
|
106
|
+
|
|
107
|
+
#{long_description}
|
|
108
|
+
EOL
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
# handles blank options
|
|
112
|
+
def options_markdown
|
|
113
|
+
return '' if options.empty?
|
|
114
|
+
|
|
115
|
+
<<-EOL
|
|
116
|
+
## Options
|
|
117
|
+
|
|
118
|
+
```
|
|
119
|
+
#{options}
|
|
120
|
+
```
|
|
121
|
+
EOL
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
end
|
|
125
|
+
end
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
module Jets::Commands
|
|
2
|
+
class New < Sequence
|
|
3
|
+
argument :project_name
|
|
4
|
+
|
|
5
|
+
# Ugly, but when the class_option is only defined in the Thor::Group class
|
|
6
|
+
# it doesnt show up with jets new help :(
|
|
7
|
+
# If anyone knows how to fix this let me know.
|
|
8
|
+
def self.cli_options
|
|
9
|
+
[
|
|
10
|
+
[:repo, desc: "GitHub repo to use. Format: user/repo"],
|
|
11
|
+
[:force, type: :boolean, desc: "Bypass overwrite are you sure prompt for existing files."],
|
|
12
|
+
[:api, type: :boolean, default: false, desc: "API mode."],
|
|
13
|
+
[:webpacker, type: :boolean, default: true, desc: "Install webpacker"],
|
|
14
|
+
[:bootstrap, type: :boolean, default: true, desc: "Install bootstrap css"], # same option in WebpackerTemplate
|
|
15
|
+
[:git, type: :boolean, default: true, desc: "Git initialize the project"],
|
|
16
|
+
]
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
cli_options.each do |args|
|
|
20
|
+
class_option *args
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def set_api_mode
|
|
24
|
+
# options is a frozen hash by Thor so cannot modify it.
|
|
25
|
+
# Also had trouble unfreezing it with .dup. So using instance variables instead
|
|
26
|
+
if options[:api]
|
|
27
|
+
@webpacker = false
|
|
28
|
+
@bootstrap = false
|
|
29
|
+
else
|
|
30
|
+
@webpacker = options[:webpacker]
|
|
31
|
+
@bootstrap = options[:bootstrap]
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def create_project
|
|
36
|
+
options[:repo] ? clone_project : copy_project
|
|
37
|
+
|
|
38
|
+
destination_root = "#{Dir.pwd}/#{project_name}"
|
|
39
|
+
self.destination_root = destination_root
|
|
40
|
+
FileUtils.cd("#{Dir.pwd}/#{project_name}")
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def make_bin_executable
|
|
44
|
+
chmod "bin", 0755 & ~File.umask, verbose: false
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def bundle_install
|
|
48
|
+
Bundler.with_clean_env do
|
|
49
|
+
system("BUNDLE_IGNORE_CONFIG=1 bundle install")
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def webpacker_install
|
|
54
|
+
return unless @webpacker
|
|
55
|
+
|
|
56
|
+
command = "jets webpacker:install"
|
|
57
|
+
command += " FORCE=1" if options[:force]
|
|
58
|
+
run(command)
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
# bootstrap is dependent on webpacker, options[:bootstrap] is used
|
|
62
|
+
# in webpacker_install.
|
|
63
|
+
def bootstrap_install
|
|
64
|
+
return unless @bootstrap
|
|
65
|
+
|
|
66
|
+
# Add jquery and popper plugin to handle Delete of CRUD
|
|
67
|
+
jquery =<<-JS
|
|
68
|
+
const webpack = require('webpack')
|
|
69
|
+
environment.plugins.prepend('Provide', new webpack.ProvidePlugin({
|
|
70
|
+
$: 'jquery',
|
|
71
|
+
jQuery: 'jquery',
|
|
72
|
+
Popper: ['popper.js', 'default']
|
|
73
|
+
}))
|
|
74
|
+
JS
|
|
75
|
+
after = "const { environment } = require('@rails/webpacker')\n"
|
|
76
|
+
insert_into_file("config/webpack/environment.js", jquery, after: after)
|
|
77
|
+
|
|
78
|
+
run("yarn add bootstrap@4.0.0-beta jquery popper.js")
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def git_init
|
|
82
|
+
return if !options[:git]
|
|
83
|
+
return unless git_installed?
|
|
84
|
+
return if File.exist?(".git") # this is a clone repo
|
|
85
|
+
|
|
86
|
+
run("git init")
|
|
87
|
+
run("git add .")
|
|
88
|
+
run("git commit -m 'first commit'")
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
def user_message
|
|
92
|
+
puts <<-EOL
|
|
93
|
+
#{"="*64}
|
|
94
|
+
Congrats 🎉 You have successfully created a Jets project.
|
|
95
|
+
|
|
96
|
+
Cd into the project directory:
|
|
97
|
+
cd #{project_name}
|
|
98
|
+
|
|
99
|
+
To start a server and test locally:
|
|
100
|
+
jets server # localhost:8888 should have the Jets welcome page
|
|
101
|
+
|
|
102
|
+
Scaffold example:
|
|
103
|
+
jets generate scaffold Post title:string body:text published:boolean
|
|
104
|
+
|
|
105
|
+
To deploy to AWS Lambda:
|
|
106
|
+
jets deploy
|
|
107
|
+
EOL
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
end
|