jets 1.0.18 → 1.1.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 +4 -4
- data/CHANGELOG.md +4 -0
- data/Gemfile.lock +10 -10
- data/README/testing.md +5 -2
- data/lib/jets.rb +2 -2
- data/lib/jets/application.rb +69 -40
- data/lib/jets/booter.rb +17 -20
- data/lib/jets/builders/code_builder.rb +7 -8
- data/lib/jets/cfn/ship.rb +0 -6
- data/lib/jets/commands/build.rb +0 -5
- data/lib/jets/commands/deploy.rb +0 -4
- data/lib/jets/commands/main.rb +31 -4
- data/lib/jets/commands/templates/skeleton/{.env → .env.tt} +1 -0
- data/lib/jets/commands/templates/skeleton/config.ru +1 -0
- data/lib/jets/commands/upgrade/v1.rb +12 -0
- data/lib/jets/controller.rb +5 -0
- data/lib/jets/controller/base.rb +43 -21
- data/lib/jets/controller/cookies.rb +40 -0
- data/lib/jets/controller/cookies/jar.rb +269 -0
- data/lib/jets/controller/middleware.rb +4 -0
- data/lib/jets/controller/middleware/local.rb +119 -0
- data/lib/jets/{server/lambda_aws_proxy.rb → controller/middleware/local/api_gateway.rb} +11 -49
- data/lib/jets/controller/middleware/local/mimic_aws_call.rb +38 -0
- data/lib/jets/{server → controller/middleware/local}/route_matcher.rb +4 -4
- data/lib/jets/controller/middleware/main.rb +46 -0
- data/lib/jets/{server → controller/middleware}/webpacker_setup.rb +0 -1
- data/lib/jets/controller/params.rb +2 -1
- data/lib/jets/controller/rack.rb +5 -0
- data/lib/jets/controller/rack/adapter.rb +60 -0
- data/lib/jets/controller/rack/env.rb +96 -0
- data/lib/jets/controller/redirection.rb +1 -1
- data/lib/jets/controller/renderers.rb +1 -1
- data/lib/jets/controller/renderers/base_renderer.rb +0 -4
- data/lib/jets/controller/renderers/{aws_proxy_renderer.rb → rack_renderer.rb} +7 -19
- data/lib/jets/controller/renderers/template_renderer.rb +1 -1
- data/lib/jets/controller/request.rb +14 -44
- data/lib/jets/controller/response.rb +55 -7
- data/lib/jets/internal/app/controllers/jets/rack_controller.rb +13 -3
- data/lib/jets/mega.rb +7 -0
- data/lib/jets/{rack → mega}/hash_converter.rb +1 -1
- data/lib/jets/{rack → mega}/request.rb +17 -4
- data/lib/jets/middleware.rb +38 -0
- data/lib/jets/middleware/configurator.rb +84 -0
- data/lib/jets/middleware/default_stack.rb +44 -0
- data/lib/jets/middleware/layer.rb +34 -0
- data/lib/jets/middleware/stack.rb +77 -0
- data/lib/jets/resource/function.rb +1 -1
- data/lib/jets/ruby_server.rb +1 -1
- data/lib/jets/server.rb +48 -13
- data/lib/jets/version.rb +1 -1
- metadata +24 -17
- data/lib/jets/application/middleware.rb +0 -23
- data/lib/jets/default/application.rb +0 -23
- data/lib/jets/rack.rb +0 -7
- data/lib/jets/rack/server.rb +0 -47
- data/lib/jets/server/api_gateway.rb +0 -39
- data/lib/jets/server/timing_middleware.rb +0 -33
- data/lib/jets/timing.rb +0 -65
- data/lib/jets/timing/report.rb +0 -82
@@ -0,0 +1,34 @@
|
|
1
|
+
module Jets::Middleware
|
2
|
+
class Layer
|
3
|
+
attr_reader :args, :block, :klass
|
4
|
+
|
5
|
+
def initialize(klass, args, block)
|
6
|
+
@klass = klass
|
7
|
+
@args = args
|
8
|
+
@block = block
|
9
|
+
end
|
10
|
+
|
11
|
+
def name; klass.name; end
|
12
|
+
|
13
|
+
def ==(middleware)
|
14
|
+
case middleware
|
15
|
+
when Layer
|
16
|
+
klass == middleware.klass
|
17
|
+
when Class
|
18
|
+
klass == middleware
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def inspect
|
23
|
+
if klass.is_a?(Class)
|
24
|
+
klass.to_s
|
25
|
+
else
|
26
|
+
klass.class.to_s
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def build(app)
|
31
|
+
klass.new(app, *args, &block)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
module Jets::Middleware
|
2
|
+
class Stack
|
3
|
+
include Enumerable
|
4
|
+
|
5
|
+
attr_accessor :middlewares
|
6
|
+
def initialize(*args)
|
7
|
+
@middlewares = []
|
8
|
+
yield(self) if block_given?
|
9
|
+
end
|
10
|
+
|
11
|
+
def each
|
12
|
+
@middlewares.each { |x| yield x }
|
13
|
+
end
|
14
|
+
|
15
|
+
def size
|
16
|
+
middlewares.size
|
17
|
+
end
|
18
|
+
|
19
|
+
def last
|
20
|
+
middlewares.last
|
21
|
+
end
|
22
|
+
|
23
|
+
def [](i)
|
24
|
+
middlewares[i]
|
25
|
+
end
|
26
|
+
|
27
|
+
def unshift(klass, *args, &block)
|
28
|
+
middlewares.unshift(build_middleware(klass, args, block))
|
29
|
+
end
|
30
|
+
|
31
|
+
def initialize_copy(other)
|
32
|
+
self.middlewares = other.middlewares.dup
|
33
|
+
end
|
34
|
+
|
35
|
+
def insert(index, klass, *args, &block)
|
36
|
+
index = assert_index(index, :before)
|
37
|
+
middlewares.insert(index, build_middleware(klass, args, block))
|
38
|
+
end
|
39
|
+
|
40
|
+
alias_method :insert_before, :insert
|
41
|
+
|
42
|
+
def insert_after(index, *args, &block)
|
43
|
+
index = assert_index(index, :after)
|
44
|
+
insert(index + 1, *args, &block)
|
45
|
+
end
|
46
|
+
|
47
|
+
def swap(target, *args, &block)
|
48
|
+
index = assert_index(target, :before)
|
49
|
+
insert(index, *args, &block)
|
50
|
+
middlewares.delete_at(index + 1)
|
51
|
+
end
|
52
|
+
|
53
|
+
def delete(target)
|
54
|
+
middlewares.delete_if { |m| m.klass == target }
|
55
|
+
end
|
56
|
+
|
57
|
+
def use(klass, *args, &block)
|
58
|
+
middlewares.push(build_middleware(klass, args, block))
|
59
|
+
end
|
60
|
+
|
61
|
+
def build(app = Proc.new)
|
62
|
+
middlewares.freeze.reverse.inject(app) { |a, e| e.build(a) }
|
63
|
+
end
|
64
|
+
|
65
|
+
private
|
66
|
+
|
67
|
+
def assert_index(index, where)
|
68
|
+
i = index.is_a?(Integer) ? index : middlewares.index { |m| m.klass == index }
|
69
|
+
raise "No such middleware to insert #{where}: #{index.inspect}" unless i
|
70
|
+
i
|
71
|
+
end
|
72
|
+
|
73
|
+
def build_middleware(klass, args, block)
|
74
|
+
Layer.new(klass, args, block)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
@@ -203,7 +203,7 @@ class Jets::Resource
|
|
203
203
|
# method: admin/pages_controller
|
204
204
|
# method: admin-pages_controller-index
|
205
205
|
method = @app_class.underscore
|
206
|
-
method = method.sub('/','-') + "-#{@task.meth}"
|
206
|
+
method = method.sub('/','-').gsub(/[^0-9a-z\-_]/i, '') + "-#{@task.meth}"
|
207
207
|
"#{Jets.config.project_namespace}-#{method}"
|
208
208
|
end
|
209
209
|
end
|
data/lib/jets/ruby_server.rb
CHANGED
data/lib/jets/server.rb
CHANGED
@@ -1,16 +1,51 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
1
|
+
module Jets
|
2
|
+
class Server
|
3
|
+
def self.start(options={})
|
4
|
+
new(options).start
|
5
|
+
end
|
4
6
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
autoload :ApiGateway, "jets/server/api_gateway"
|
9
|
-
autoload :LambdaAwsProxy, "jets/server/lambda_aws_proxy"
|
7
|
+
def initialize(options)
|
8
|
+
@options = options
|
9
|
+
end
|
10
10
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
11
|
+
def start
|
12
|
+
return unless File.exist?("#{rack_project}/config.ru")
|
13
|
+
puts "Starting additional rack server for the project under the rack subfolder..." if ENV['JETS_DEBUG']
|
14
|
+
|
15
|
+
if ENV['FOREGROUND']
|
16
|
+
serve
|
17
|
+
return
|
18
|
+
end
|
19
|
+
|
20
|
+
# Reaching here means we'll run the server in the background.
|
21
|
+
# Handle daemonzing ourselves because it keeps the stdout of the 2nd
|
22
|
+
# rack server. The rackup --daemonize option ends up hiding the output.
|
23
|
+
pid = Process.fork
|
24
|
+
if pid.nil?
|
25
|
+
# we're in the child process
|
26
|
+
serve
|
27
|
+
else
|
28
|
+
# we're in the parent process
|
29
|
+
Process.detach(pid) # dettached but still in the "foreground" since bin/rackup runs in the foreground
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
# Runs in the child process
|
34
|
+
def serve
|
35
|
+
# Note, looks like stopping jets server with Ctrl-C sends the TERM signal
|
36
|
+
# down to the sub bin/rackup command cleans up the child process fine.
|
37
|
+
Bundler.with_clean_env do
|
38
|
+
args = ''
|
39
|
+
args << " --host #{@options[:host]}" if @options[:host] # only forward the host option
|
40
|
+
# port is always 9292 for simplicity
|
41
|
+
command = "cd #{rack_project} && bin/rackup#{args}" # leads to the same wrapper rack scripts
|
42
|
+
puts "=> #{command}".colorize(:green)
|
43
|
+
system(command)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def rack_project
|
48
|
+
"#{Jets.root}rack"
|
49
|
+
end
|
15
50
|
end
|
16
|
-
end
|
51
|
+
end
|
data/lib/jets/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jets
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tung Nguyen
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-11-
|
11
|
+
date: 2018-11-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: actionpack
|
@@ -432,7 +432,6 @@ files:
|
|
432
432
|
- jets.gemspec
|
433
433
|
- lib/jets.rb
|
434
434
|
- lib/jets/application.rb
|
435
|
-
- lib/jets/application/middleware.rb
|
436
435
|
- lib/jets/aws_info.rb
|
437
436
|
- lib/jets/aws_services.rb
|
438
437
|
- lib/jets/aws_services/stack_status.rb
|
@@ -539,9 +538,9 @@ files:
|
|
539
538
|
- lib/jets/commands/runner.rb
|
540
539
|
- lib/jets/commands/sequence.rb
|
541
540
|
- lib/jets/commands/stack_info.rb
|
542
|
-
- lib/jets/commands/templates/skeleton/.env
|
543
541
|
- lib/jets/commands/templates/skeleton/.env.development.tt
|
544
542
|
- lib/jets/commands/templates/skeleton/.env.test
|
543
|
+
- lib/jets/commands/templates/skeleton/.env.tt
|
545
544
|
- lib/jets/commands/templates/skeleton/.gitignore
|
546
545
|
- lib/jets/commands/templates/skeleton/.jetskeep
|
547
546
|
- lib/jets/commands/templates/skeleton/.rspec
|
@@ -584,12 +583,24 @@ files:
|
|
584
583
|
- lib/jets/controller.rb
|
585
584
|
- lib/jets/controller/base.rb
|
586
585
|
- lib/jets/controller/callbacks.rb
|
586
|
+
- lib/jets/controller/cookies.rb
|
587
|
+
- lib/jets/controller/cookies/jar.rb
|
587
588
|
- lib/jets/controller/layout.rb
|
589
|
+
- lib/jets/controller/middleware.rb
|
590
|
+
- lib/jets/controller/middleware/local.rb
|
591
|
+
- lib/jets/controller/middleware/local/api_gateway.rb
|
592
|
+
- lib/jets/controller/middleware/local/mimic_aws_call.rb
|
593
|
+
- lib/jets/controller/middleware/local/route_matcher.rb
|
594
|
+
- lib/jets/controller/middleware/main.rb
|
595
|
+
- lib/jets/controller/middleware/webpacker_setup.rb
|
588
596
|
- lib/jets/controller/params.rb
|
597
|
+
- lib/jets/controller/rack.rb
|
598
|
+
- lib/jets/controller/rack/adapter.rb
|
599
|
+
- lib/jets/controller/rack/env.rb
|
589
600
|
- lib/jets/controller/redirection.rb
|
590
601
|
- lib/jets/controller/renderers.rb
|
591
|
-
- lib/jets/controller/renderers/aws_proxy_renderer.rb
|
592
602
|
- lib/jets/controller/renderers/base_renderer.rb
|
603
|
+
- lib/jets/controller/renderers/rack_renderer.rb
|
593
604
|
- lib/jets/controller/renderers/template_renderer.rb
|
594
605
|
- lib/jets/controller/rendering.rb
|
595
606
|
- lib/jets/controller/request.rb
|
@@ -597,7 +608,6 @@ files:
|
|
597
608
|
- lib/jets/core.rb
|
598
609
|
- lib/jets/core_ext/kernel.rb
|
599
610
|
- lib/jets/db.rb
|
600
|
-
- lib/jets/default/application.rb
|
601
611
|
- lib/jets/dotenv.rb
|
602
612
|
- lib/jets/erb.rb
|
603
613
|
- lib/jets/generator.rb
|
@@ -630,6 +640,14 @@ files:
|
|
630
640
|
- lib/jets/lambda/functions.rb
|
631
641
|
- lib/jets/lambda/task.rb
|
632
642
|
- lib/jets/logger.rb
|
643
|
+
- lib/jets/mega.rb
|
644
|
+
- lib/jets/mega/hash_converter.rb
|
645
|
+
- lib/jets/mega/request.rb
|
646
|
+
- lib/jets/middleware.rb
|
647
|
+
- lib/jets/middleware/configurator.rb
|
648
|
+
- lib/jets/middleware/default_stack.rb
|
649
|
+
- lib/jets/middleware/layer.rb
|
650
|
+
- lib/jets/middleware/stack.rb
|
633
651
|
- lib/jets/naming.rb
|
634
652
|
- lib/jets/poly_fun.rb
|
635
653
|
- lib/jets/poly_fun/base_executor.rb
|
@@ -642,10 +660,6 @@ files:
|
|
642
660
|
- lib/jets/processors.rb
|
643
661
|
- lib/jets/processors/deducer.rb
|
644
662
|
- lib/jets/processors/main_processor.rb
|
645
|
-
- lib/jets/rack.rb
|
646
|
-
- lib/jets/rack/hash_converter.rb
|
647
|
-
- lib/jets/rack/request.rb
|
648
|
-
- lib/jets/rack/server.rb
|
649
663
|
- lib/jets/rails_overrides.rb
|
650
664
|
- lib/jets/rails_overrides/asset_tag_helper.rb
|
651
665
|
- lib/jets/rails_overrides/common_methods.rb
|
@@ -692,11 +706,6 @@ files:
|
|
692
706
|
- lib/jets/rule/base.rb
|
693
707
|
- lib/jets/rule/dsl.rb
|
694
708
|
- lib/jets/server.rb
|
695
|
-
- lib/jets/server/api_gateway.rb
|
696
|
-
- lib/jets/server/lambda_aws_proxy.rb
|
697
|
-
- lib/jets/server/route_matcher.rb
|
698
|
-
- lib/jets/server/timing_middleware.rb
|
699
|
-
- lib/jets/server/webpacker_setup.rb
|
700
709
|
- lib/jets/stack.rb
|
701
710
|
- lib/jets/stack/builder.rb
|
702
711
|
- lib/jets/stack/definition.rb
|
@@ -715,8 +724,6 @@ files:
|
|
715
724
|
- lib/jets/stack/parameter/dsl.rb
|
716
725
|
- lib/jets/stack/resource.rb
|
717
726
|
- lib/jets/stack/resource/dsl.rb
|
718
|
-
- lib/jets/timing.rb
|
719
|
-
- lib/jets/timing/report.rb
|
720
727
|
- lib/jets/turbine.rb
|
721
728
|
- lib/jets/util.rb
|
722
729
|
- lib/jets/version.rb
|
@@ -1,23 +0,0 @@
|
|
1
|
-
module Jets::Application::Middleware
|
2
|
-
def call(env)
|
3
|
-
# Only require when necessary because middleware is only used for development
|
4
|
-
# Requring here instead of top of file because Jets::Application::Middleware
|
5
|
-
# gets autoloaded when Jets::Application gets autoloaded.
|
6
|
-
# Trying to keep the config.ru interface clean:
|
7
|
-
#
|
8
|
-
# require "jets"
|
9
|
-
# run Jets.application
|
10
|
-
require "jets/server/webpacker_setup" if Jets.webpacker? # makes "use Webpacker::DevServerProxy" works
|
11
|
-
triplet = assemble_app.call(env)
|
12
|
-
end
|
13
|
-
|
14
|
-
def assemble_app
|
15
|
-
Rack::Builder.new do
|
16
|
-
map("/") do
|
17
|
-
use Jets::Server::TimingMiddleware
|
18
|
-
use Webpacker::DevServerProxy if Jets.webpacker?
|
19
|
-
run Jets::Server
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
@@ -1,23 +0,0 @@
|
|
1
|
-
Jets.application.configure do
|
2
|
-
config.project_name = "project"
|
3
|
-
# config.env_extra = 2 # Optional. Any value works: 1,2,abc,xyz
|
4
|
-
# Allows creation of multiple instances of env.
|
5
|
-
config.cors = true
|
6
|
-
config.autoload_paths = %w[
|
7
|
-
app/controllers
|
8
|
-
app/models
|
9
|
-
app/jobs
|
10
|
-
app/rules
|
11
|
-
app/helpers
|
12
|
-
app/shared/resources
|
13
|
-
]
|
14
|
-
config.extra_autoload_paths = []
|
15
|
-
|
16
|
-
# function properties defaults
|
17
|
-
config.function = ActiveSupport::OrderedOptions.new
|
18
|
-
config.function.timeout = 30
|
19
|
-
# default memory setting based on:
|
20
|
-
# https://medium.com/epsagon/how-to-make-lambda-faster-memory-performance-benchmark-be6ebc41f0fc
|
21
|
-
config.function.memory_size = 1536
|
22
|
-
end
|
23
|
-
|
data/lib/jets/rack.rb
DELETED
data/lib/jets/rack/server.rb
DELETED
@@ -1,47 +0,0 @@
|
|
1
|
-
require 'fileutils'
|
2
|
-
|
3
|
-
module Jets::Rack
|
4
|
-
class Server
|
5
|
-
def self.start
|
6
|
-
new.start
|
7
|
-
end
|
8
|
-
|
9
|
-
def start
|
10
|
-
puts "Jets::Rack#start"
|
11
|
-
return unless File.exist?("#{rack_project}/config.ru")
|
12
|
-
puts "Starting additional rack server for the project under the rack subfolder..." if ENV['JETS_DEBUG']
|
13
|
-
|
14
|
-
if ENV['FOREGROUND']
|
15
|
-
serve
|
16
|
-
return
|
17
|
-
end
|
18
|
-
|
19
|
-
# Reaching here means we'll run the server in the background.
|
20
|
-
# Handle daemonzing ourselves because it keeps the stdout of the 2nd
|
21
|
-
# rack server. The rackup --daemonize option ends up hiding the output.
|
22
|
-
pid = Process.fork
|
23
|
-
if pid.nil?
|
24
|
-
# we're in the child process
|
25
|
-
serve
|
26
|
-
else
|
27
|
-
# we're in the parent process
|
28
|
-
Process.detach(pid) # dettached but still in the "foreground" since bin/rackup runs in the foreground
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
# Runs in the child process
|
33
|
-
def serve
|
34
|
-
# Note, looks like stopping jets server with Ctrl-C sends the TERM signal
|
35
|
-
# down to the sub bin/rackup command cleans up the child process fine.
|
36
|
-
Bundler.with_clean_env do
|
37
|
-
command = "cd #{rack_project} && bin/rackup" # leads to the same wrapper rack scripts
|
38
|
-
puts "=> #{command}".colorize(:green)
|
39
|
-
system(command)
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
def rack_project
|
44
|
-
"#{Jets.root}rack"
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
@@ -1,39 +0,0 @@
|
|
1
|
-
require 'kramdown'
|
2
|
-
|
3
|
-
class Jets::Server
|
4
|
-
class ApiGateway
|
5
|
-
def self.call(env)
|
6
|
-
Jets.boot
|
7
|
-
route = RouteMatcher.new(env).find_route
|
8
|
-
if route
|
9
|
-
proxy = LambdaAwsProxy.new(route, env)
|
10
|
-
proxy.response # triplet
|
11
|
-
else
|
12
|
-
[404, {'Content-Type' => 'text/html'}, [routes_error_message(env)]]
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
def self.routes_error_message(env)
|
17
|
-
message = "<h2>404 Error: Route #{env['PATH_INFO'].sub('/','')} not found</h2>"
|
18
|
-
if Jets.env != "production"
|
19
|
-
message << "<p>Here are the routes defined in your application:</p>"
|
20
|
-
message << "#{routes_table}"
|
21
|
-
end
|
22
|
-
message
|
23
|
-
end
|
24
|
-
|
25
|
-
# Show pretty route table for user to help with debugging in non-production mode
|
26
|
-
def self.routes_table
|
27
|
-
routes = Jets::Router.routes
|
28
|
-
|
29
|
-
return "Your routes table is empty." if routes.empty?
|
30
|
-
|
31
|
-
text = "Verb | Path | Controller#action\n"
|
32
|
-
text << "--- | --- | ---\n"
|
33
|
-
routes.each do |route|
|
34
|
-
text << "#{route.method} | #{route.path} | #{route.to}\n"
|
35
|
-
end
|
36
|
-
Kramdown::Document.new(text).to_html
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|