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.
Files changed (59) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +4 -0
  3. data/Gemfile.lock +10 -10
  4. data/README/testing.md +5 -2
  5. data/lib/jets.rb +2 -2
  6. data/lib/jets/application.rb +69 -40
  7. data/lib/jets/booter.rb +17 -20
  8. data/lib/jets/builders/code_builder.rb +7 -8
  9. data/lib/jets/cfn/ship.rb +0 -6
  10. data/lib/jets/commands/build.rb +0 -5
  11. data/lib/jets/commands/deploy.rb +0 -4
  12. data/lib/jets/commands/main.rb +31 -4
  13. data/lib/jets/commands/templates/skeleton/{.env → .env.tt} +1 -0
  14. data/lib/jets/commands/templates/skeleton/config.ru +1 -0
  15. data/lib/jets/commands/upgrade/v1.rb +12 -0
  16. data/lib/jets/controller.rb +5 -0
  17. data/lib/jets/controller/base.rb +43 -21
  18. data/lib/jets/controller/cookies.rb +40 -0
  19. data/lib/jets/controller/cookies/jar.rb +269 -0
  20. data/lib/jets/controller/middleware.rb +4 -0
  21. data/lib/jets/controller/middleware/local.rb +119 -0
  22. data/lib/jets/{server/lambda_aws_proxy.rb → controller/middleware/local/api_gateway.rb} +11 -49
  23. data/lib/jets/controller/middleware/local/mimic_aws_call.rb +38 -0
  24. data/lib/jets/{server → controller/middleware/local}/route_matcher.rb +4 -4
  25. data/lib/jets/controller/middleware/main.rb +46 -0
  26. data/lib/jets/{server → controller/middleware}/webpacker_setup.rb +0 -1
  27. data/lib/jets/controller/params.rb +2 -1
  28. data/lib/jets/controller/rack.rb +5 -0
  29. data/lib/jets/controller/rack/adapter.rb +60 -0
  30. data/lib/jets/controller/rack/env.rb +96 -0
  31. data/lib/jets/controller/redirection.rb +1 -1
  32. data/lib/jets/controller/renderers.rb +1 -1
  33. data/lib/jets/controller/renderers/base_renderer.rb +0 -4
  34. data/lib/jets/controller/renderers/{aws_proxy_renderer.rb → rack_renderer.rb} +7 -19
  35. data/lib/jets/controller/renderers/template_renderer.rb +1 -1
  36. data/lib/jets/controller/request.rb +14 -44
  37. data/lib/jets/controller/response.rb +55 -7
  38. data/lib/jets/internal/app/controllers/jets/rack_controller.rb +13 -3
  39. data/lib/jets/mega.rb +7 -0
  40. data/lib/jets/{rack → mega}/hash_converter.rb +1 -1
  41. data/lib/jets/{rack → mega}/request.rb +17 -4
  42. data/lib/jets/middleware.rb +38 -0
  43. data/lib/jets/middleware/configurator.rb +84 -0
  44. data/lib/jets/middleware/default_stack.rb +44 -0
  45. data/lib/jets/middleware/layer.rb +34 -0
  46. data/lib/jets/middleware/stack.rb +77 -0
  47. data/lib/jets/resource/function.rb +1 -1
  48. data/lib/jets/ruby_server.rb +1 -1
  49. data/lib/jets/server.rb +48 -13
  50. data/lib/jets/version.rb +1 -1
  51. metadata +24 -17
  52. data/lib/jets/application/middleware.rb +0 -23
  53. data/lib/jets/default/application.rb +0 -23
  54. data/lib/jets/rack.rb +0 -7
  55. data/lib/jets/rack/server.rb +0 -47
  56. data/lib/jets/server/api_gateway.rb +0 -39
  57. data/lib/jets/server/timing_middleware.rb +0 -33
  58. data/lib/jets/timing.rb +0 -65
  59. 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
@@ -51,7 +51,7 @@ module Jets
51
51
 
52
52
  # Fire and forget for concurrent, will wait with wait_for_rack_socket
53
53
  Thread.new do
54
- Jets::Rack::Server.start
54
+ Jets::Server.start
55
55
  end
56
56
 
57
57
  wait_for_rack_socket # blocks until rack server is up
@@ -1,16 +1,51 @@
1
- require 'rack'
2
- require 'rack/server'
3
- require "jets/server/webpacker_setup" if Jets.webpacker?
1
+ module Jets
2
+ class Server
3
+ def self.start(options={})
4
+ new(options).start
5
+ end
4
6
 
5
- class Jets::Server
6
- autoload :RouteMatcher, "jets/server/route_matcher"
7
- autoload :TimingMiddleware, "jets/server/timing_middleware"
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
- # Use by Jets::Application
12
- # Where config.ru in the project leads to.
13
- def self.call(env)
14
- ApiGateway.call(env)
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
@@ -1,3 +1,3 @@
1
1
  module Jets
2
- VERSION = "1.0.18"
2
+ VERSION = "1.1.0"
3
3
  end
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.18
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-15 00:00:00.000000000 Z
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
-
@@ -1,7 +0,0 @@
1
- module Jets
2
- module Rack
3
- autoload :Request, 'jets/rack/request'
4
- autoload :Server, 'jets/rack/server'
5
- autoload :HashConverter, 'jets/rack/hash_converter'
6
- end
7
- end
@@ -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