lamby 2.6.1 → 2.8.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 680b99fd678aef833c4bdca9cee66b2adcb171f8e0ada61fffec9443f6304c21
4
- data.tar.gz: 41664f4e4e02e4ab88112ad6f5f16ec59901cbd7f58639833a322658afec9443
3
+ metadata.gz: 24518347cf3f2b14390d16a2fff5f0025d3911efd06252721cd49f8fedb90562
4
+ data.tar.gz: 3e55836604fc8b6abdf953f2b421f9efdb7689a9ea3fa27cc1528844de06418e
5
5
  SHA512:
6
- metadata.gz: 7705fcb6bf84b50267a0a51008d0003b506198cbfd72c69d7b1114c97780f52f89793374f10d2a36fb0ec7932243e13ba5e8a29b69ab8d8eaa4d9cbb37f16861
7
- data.tar.gz: 73f4038e54a8a5417cef4586c25497dcad49af932b3359ae3827a115b5d018c42f57a7b39ce8ef43d5da1b6be6251f945e6bf5ee72b2c66d67587d0f11f5c36f
6
+ metadata.gz: 79bf535b1fc336b634ee33bc5e3a847bd9aaa1c809c6f49c37d6807dc44d26468da1fcf4272599b2d11c1c2d8ed90420301963dbd2723e72060b2067c97b86e1
7
+ data.tar.gz: 2ea5e61fe84d7b7b5d9be7001376346dc2574feb68e9a2230e79e781c8365e465f193dc7c89d62cc954d5f37195bae81ebf69376f5d0621b79b8fbbbea76171a
data/CHANGELOG.md CHANGED
@@ -4,6 +4,34 @@
4
4
 
5
5
  See this http://keepachangelog.com link for information on how we want this documented formatted.
6
6
 
7
+ ## v2.8.0
8
+
9
+ #### Fixed
10
+
11
+ - Perform rack body closing hooks on request #85
12
+
13
+ ## v2.7.1
14
+
15
+ #### Removed
16
+
17
+ - Bootsnap setup convenience require.
18
+
19
+ ## v2.7.0
20
+
21
+ #### Added
22
+
23
+ - Support EventBridge events in handler with default proc to log.
24
+
25
+ ## v2.6.3
26
+
27
+ #### Added
28
+
29
+ - Bootsnap setup convenience require.
30
+
31
+ ## v2.6.2
32
+
33
+ - Fixed Rack::Deflate usage with an ALB.
34
+
7
35
  ## v2.6.1
8
36
 
9
37
  #### Fixed
data/Dockerfile CHANGED
@@ -1,10 +1,5 @@
1
1
  FROM lambci/lambda:build-ruby2.7
2
2
 
3
- # Lock down AWS SAM version.
4
- RUN pip install awscli && \
5
- pip uninstall --yes aws-sam-cli && \
6
- pip install aws-sam-cli==0.45.0
7
-
8
3
  # Asset Pipeline
9
4
  RUN curl -sL https://rpm.nodesource.com/setup_12.x | bash - && \
10
5
  yum install -y nodejs
data/Gemfile.lock CHANGED
@@ -1,155 +1,158 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- lamby (2.6.0)
4
+ lamby (2.8.0)
5
5
  rack
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
9
9
  specs:
10
- actioncable (6.0.2.2)
11
- actionpack (= 6.0.2.2)
10
+ actioncable (6.1.3.1)
11
+ actionpack (= 6.1.3.1)
12
+ activesupport (= 6.1.3.1)
12
13
  nio4r (~> 2.0)
13
14
  websocket-driver (>= 0.6.1)
14
- actionmailbox (6.0.2.2)
15
- actionpack (= 6.0.2.2)
16
- activejob (= 6.0.2.2)
17
- activerecord (= 6.0.2.2)
18
- activestorage (= 6.0.2.2)
19
- activesupport (= 6.0.2.2)
15
+ actionmailbox (6.1.3.1)
16
+ actionpack (= 6.1.3.1)
17
+ activejob (= 6.1.3.1)
18
+ activerecord (= 6.1.3.1)
19
+ activestorage (= 6.1.3.1)
20
+ activesupport (= 6.1.3.1)
20
21
  mail (>= 2.7.1)
21
- actionmailer (6.0.2.2)
22
- actionpack (= 6.0.2.2)
23
- actionview (= 6.0.2.2)
24
- activejob (= 6.0.2.2)
22
+ actionmailer (6.1.3.1)
23
+ actionpack (= 6.1.3.1)
24
+ actionview (= 6.1.3.1)
25
+ activejob (= 6.1.3.1)
26
+ activesupport (= 6.1.3.1)
25
27
  mail (~> 2.5, >= 2.5.4)
26
28
  rails-dom-testing (~> 2.0)
27
- actionpack (6.0.2.2)
28
- actionview (= 6.0.2.2)
29
- activesupport (= 6.0.2.2)
30
- rack (~> 2.0, >= 2.0.8)
29
+ actionpack (6.1.3.1)
30
+ actionview (= 6.1.3.1)
31
+ activesupport (= 6.1.3.1)
32
+ rack (~> 2.0, >= 2.0.9)
31
33
  rack-test (>= 0.6.3)
32
34
  rails-dom-testing (~> 2.0)
33
35
  rails-html-sanitizer (~> 1.0, >= 1.2.0)
34
- actiontext (6.0.2.2)
35
- actionpack (= 6.0.2.2)
36
- activerecord (= 6.0.2.2)
37
- activestorage (= 6.0.2.2)
38
- activesupport (= 6.0.2.2)
36
+ actiontext (6.1.3.1)
37
+ actionpack (= 6.1.3.1)
38
+ activerecord (= 6.1.3.1)
39
+ activestorage (= 6.1.3.1)
40
+ activesupport (= 6.1.3.1)
39
41
  nokogiri (>= 1.8.5)
40
- actionview (6.0.2.2)
41
- activesupport (= 6.0.2.2)
42
+ actionview (6.1.3.1)
43
+ activesupport (= 6.1.3.1)
42
44
  builder (~> 3.1)
43
45
  erubi (~> 1.4)
44
46
  rails-dom-testing (~> 2.0)
45
47
  rails-html-sanitizer (~> 1.1, >= 1.2.0)
46
- activejob (6.0.2.2)
47
- activesupport (= 6.0.2.2)
48
+ activejob (6.1.3.1)
49
+ activesupport (= 6.1.3.1)
48
50
  globalid (>= 0.3.6)
49
- activemodel (6.0.2.2)
50
- activesupport (= 6.0.2.2)
51
- activerecord (6.0.2.2)
52
- activemodel (= 6.0.2.2)
53
- activesupport (= 6.0.2.2)
54
- activestorage (6.0.2.2)
55
- actionpack (= 6.0.2.2)
56
- activejob (= 6.0.2.2)
57
- activerecord (= 6.0.2.2)
58
- marcel (~> 0.3.1)
59
- activesupport (6.0.2.2)
51
+ activemodel (6.1.3.1)
52
+ activesupport (= 6.1.3.1)
53
+ activerecord (6.1.3.1)
54
+ activemodel (= 6.1.3.1)
55
+ activesupport (= 6.1.3.1)
56
+ activestorage (6.1.3.1)
57
+ actionpack (= 6.1.3.1)
58
+ activejob (= 6.1.3.1)
59
+ activerecord (= 6.1.3.1)
60
+ activesupport (= 6.1.3.1)
61
+ marcel (~> 1.0.0)
62
+ mini_mime (~> 1.0.2)
63
+ activesupport (6.1.3.1)
60
64
  concurrent-ruby (~> 1.0, >= 1.0.2)
61
- i18n (>= 0.7, < 2)
62
- minitest (~> 5.1)
63
- tzinfo (~> 1.1)
64
- zeitwerk (~> 2.2)
65
- aws-eventstream (1.0.3)
66
- aws-partitions (1.287.0)
67
- aws-sdk-core (3.92.0)
68
- aws-eventstream (~> 1.0, >= 1.0.2)
65
+ i18n (>= 1.6, < 2)
66
+ minitest (>= 5.1)
67
+ tzinfo (~> 2.0)
68
+ zeitwerk (~> 2.3)
69
+ aws-eventstream (1.1.1)
70
+ aws-partitions (1.446.0)
71
+ aws-sdk-core (3.114.0)
72
+ aws-eventstream (~> 1, >= 1.0.2)
69
73
  aws-partitions (~> 1, >= 1.239.0)
70
74
  aws-sigv4 (~> 1.1)
71
75
  jmespath (~> 1.0)
72
- aws-sdk-ssm (1.73.0)
73
- aws-sdk-core (~> 3, >= 3.71.0)
76
+ aws-sdk-ssm (1.108.0)
77
+ aws-sdk-core (~> 3, >= 3.112.0)
74
78
  aws-sigv4 (~> 1.1)
75
- aws-sigv4 (1.1.1)
76
- aws-eventstream (~> 1.0, >= 1.0.2)
79
+ aws-sigv4 (1.2.3)
80
+ aws-eventstream (~> 1, >= 1.0.2)
77
81
  builder (3.2.4)
78
- coderay (1.1.2)
79
- concurrent-ruby (1.1.6)
82
+ coderay (1.1.3)
83
+ concurrent-ruby (1.1.8)
80
84
  crass (1.0.6)
81
- erubi (1.9.0)
85
+ erubi (1.10.0)
82
86
  globalid (0.4.2)
83
87
  activesupport (>= 4.2.0)
84
- i18n (1.8.2)
88
+ i18n (1.8.10)
85
89
  concurrent-ruby (~> 1.0)
86
90
  jmespath (1.4.0)
87
- loofah (2.4.0)
91
+ loofah (2.9.1)
88
92
  crass (~> 1.0.2)
89
93
  nokogiri (>= 1.5.9)
90
94
  mail (2.7.1)
91
95
  mini_mime (>= 0.1.1)
92
- marcel (0.3.3)
93
- mimemagic (~> 0.3.2)
96
+ marcel (1.0.1)
94
97
  method_source (1.0.0)
95
- mimemagic (0.3.4)
96
- mini_mime (1.0.2)
97
- mini_portile2 (2.4.0)
98
- minitest (5.14.0)
99
- minitest-focus (1.1.2)
98
+ mini_mime (1.0.3)
99
+ mini_portile2 (2.5.0)
100
+ minitest (5.14.4)
101
+ minitest-focus (1.2.1)
100
102
  minitest (>= 4, < 6)
101
- mocha (1.11.2)
102
- nio4r (2.5.2)
103
- nokogiri (1.10.9)
104
- mini_portile2 (~> 2.4.0)
105
- pry (0.13.0)
103
+ mocha (1.12.0)
104
+ nio4r (2.5.7)
105
+ nokogiri (1.11.3)
106
+ mini_portile2 (~> 2.5.0)
107
+ racc (~> 1.4)
108
+ pry (0.14.1)
106
109
  coderay (~> 1.1)
107
110
  method_source (~> 1.0)
108
- rack (2.2.2)
111
+ racc (1.5.2)
112
+ rack (2.2.3)
109
113
  rack-test (1.1.0)
110
114
  rack (>= 1.0, < 3)
111
- rails (6.0.2.2)
112
- actioncable (= 6.0.2.2)
113
- actionmailbox (= 6.0.2.2)
114
- actionmailer (= 6.0.2.2)
115
- actionpack (= 6.0.2.2)
116
- actiontext (= 6.0.2.2)
117
- actionview (= 6.0.2.2)
118
- activejob (= 6.0.2.2)
119
- activemodel (= 6.0.2.2)
120
- activerecord (= 6.0.2.2)
121
- activestorage (= 6.0.2.2)
122
- activesupport (= 6.0.2.2)
123
- bundler (>= 1.3.0)
124
- railties (= 6.0.2.2)
115
+ rails (6.1.3.1)
116
+ actioncable (= 6.1.3.1)
117
+ actionmailbox (= 6.1.3.1)
118
+ actionmailer (= 6.1.3.1)
119
+ actionpack (= 6.1.3.1)
120
+ actiontext (= 6.1.3.1)
121
+ actionview (= 6.1.3.1)
122
+ activejob (= 6.1.3.1)
123
+ activemodel (= 6.1.3.1)
124
+ activerecord (= 6.1.3.1)
125
+ activestorage (= 6.1.3.1)
126
+ activesupport (= 6.1.3.1)
127
+ bundler (>= 1.15.0)
128
+ railties (= 6.1.3.1)
125
129
  sprockets-rails (>= 2.0.0)
126
130
  rails-dom-testing (2.0.3)
127
131
  activesupport (>= 4.2.0)
128
132
  nokogiri (>= 1.6)
129
133
  rails-html-sanitizer (1.3.0)
130
134
  loofah (~> 2.3)
131
- railties (6.0.2.2)
132
- actionpack (= 6.0.2.2)
133
- activesupport (= 6.0.2.2)
135
+ railties (6.1.3.1)
136
+ actionpack (= 6.1.3.1)
137
+ activesupport (= 6.1.3.1)
134
138
  method_source
135
139
  rake (>= 0.8.7)
136
- thor (>= 0.20.3, < 2.0)
137
- rake (13.0.1)
138
- sprockets (4.0.0)
140
+ thor (~> 1.0)
141
+ rake (13.0.3)
142
+ sprockets (4.0.2)
139
143
  concurrent-ruby (~> 1.0)
140
144
  rack (> 1, < 3)
141
- sprockets-rails (3.2.1)
145
+ sprockets-rails (3.2.2)
142
146
  actionpack (>= 4.0)
143
147
  activesupport (>= 4.0)
144
148
  sprockets (>= 3.0.0)
145
- thor (1.0.1)
146
- thread_safe (0.3.6)
147
- tzinfo (1.2.6)
148
- thread_safe (~> 0.1)
149
- websocket-driver (0.7.1)
149
+ thor (1.1.0)
150
+ tzinfo (2.0.4)
151
+ concurrent-ruby (~> 1.0)
152
+ websocket-driver (0.7.3)
150
153
  websocket-extensions (>= 0.1.0)
151
- websocket-extensions (0.1.4)
152
- zeitwerk (2.3.0)
154
+ websocket-extensions (0.1.5)
155
+ zeitwerk (2.4.2)
153
156
 
154
157
  PLATFORMS
155
158
  ruby
@@ -166,4 +169,4 @@ DEPENDENCIES
166
169
  rake
167
170
 
168
171
  BUNDLED WITH
169
- 2.2.7
172
+ 2.2.15
data/lib/lamby.rb CHANGED
@@ -2,6 +2,7 @@ require 'lamby/logger'
2
2
  require 'rack'
3
3
  require 'base64'
4
4
  require 'lamby/version'
5
+ require 'lamby/config'
5
6
  require 'lamby/sam_helpers'
6
7
  require 'lamby/rack'
7
8
  require 'lamby/rack_alb'
@@ -23,6 +24,10 @@ module Lamby
23
24
  Handler.call(app, event, context, options)
24
25
  end
25
26
 
27
+ def config
28
+ Lamby::Config.config
29
+ end
30
+
26
31
  autoload :SsmParameterStore, 'lamby/ssm_parameter_store'
27
32
 
28
33
  end
@@ -0,0 +1,47 @@
1
+ module Lamby
2
+ module Config
3
+
4
+ def configure
5
+ yield(config)
6
+ config
7
+ end
8
+
9
+ def reconfigure
10
+ config.reconfigure { |c| yield(c) if block_given? }
11
+ end
12
+
13
+ def config
14
+ @config ||= Configuration.new
15
+ end
16
+
17
+ extend self
18
+
19
+ end
20
+
21
+ class Configuration
22
+
23
+ def initialize
24
+ initialize_defaults
25
+ end
26
+
27
+ def reconfigure
28
+ instance_variables.each { |var| instance_variable_set var, nil }
29
+ initialize_defaults
30
+ yield(self) if block_given?
31
+ self
32
+ end
33
+
34
+ def initialize_defaults
35
+ @event_bridge_handler = lambda { |event, context| puts(event) }
36
+ end
37
+
38
+ def event_bridge_handler
39
+ @event_bridge_handler
40
+ end
41
+
42
+ def event_bridge_handler=(func)
43
+ @event_bridge_handler = func
44
+ end
45
+
46
+ end
47
+ end
data/lib/lamby/handler.rb CHANGED
@@ -41,22 +41,23 @@ module Lamby
41
41
  def body
42
42
  @rbody ||= ''.tap do |rbody|
43
43
  @body.each { |part| rbody << part if part }
44
+ @body.close if @body.respond_to? :close
44
45
  end
45
46
  end
46
47
 
47
48
  def call
48
49
  return self if @called
49
50
  @status, @headers, @body = call_app
50
- set_cookies
51
+ set_cookies if rack?
51
52
  @called = true
52
53
  self
53
54
  end
54
55
 
55
- def base64_encodeable?
56
- @headers && (
57
- @headers['Content-Transfer-Encoding'] == 'binary' ||
58
- content_encoding_compressed? ||
59
- @headers['X-Lamby-Base64'] == '1'
56
+ def base64_encodeable?(hdrs = @headers)
57
+ hdrs && (
58
+ hdrs['Content-Transfer-Encoding'] == 'binary' ||
59
+ content_encoding_compressed?(hdrs) ||
60
+ hdrs['X-Lamby-Base64'] == '1'
60
61
  )
61
62
  end
62
63
 
@@ -78,20 +79,34 @@ module Lamby
78
79
  end
79
80
 
80
81
  def rack_response
81
- rack.response(self)
82
+ rack? ? rack.response(self) : {}
82
83
  end
83
84
 
84
85
  def call_app
85
86
  if Debug.on?(@event)
86
87
  Debug.call @event, @context, rack.env
87
- else
88
+ elsif rack?
88
89
  @app.call rack.env
90
+ elsif event_bridge?
91
+ Lamby.config.event_bridge_handler.call @event, @context
92
+ [200, {}, StringIO.new('')]
93
+ else
94
+ [404, {}, StringIO.new('')]
89
95
  end
90
96
  end
91
97
 
92
- def content_encoding_compressed?
93
- content_encoding_header = @headers['Content-Encoding'] || ''
98
+ def content_encoding_compressed?(hdrs)
99
+ content_encoding_header = hdrs['Content-Encoding'] || ''
94
100
  content_encoding_header.split(', ').any? { |h| ['br', 'gzip'].include?(h) }
95
101
  end
102
+
103
+ def rack?
104
+ @event.key?('httpMethod') || @event.dig('requestContext', 'http')
105
+ end
106
+
107
+ def event_bridge?
108
+ Lamby.config.event_bridge_handler &&
109
+ @event.key?('source') && @event.key?('detail') && @event.key?('detail-type')
110
+ end
96
111
  end
97
112
  end
@@ -16,7 +16,7 @@ module Lamby
16
16
  multivalue_headers['Set-Cookie'] = handler.set_cookies if handler.set_cookies
17
17
  end
18
18
  status_description = "#{handler.status} #{::Rack::Utils::HTTP_STATUS_CODES[handler.status]}"
19
- base64_encode = hhdrs['Content-Transfer-Encoding'] == 'binary' || hhdrs['X-Lamby-Base64'] == '1'
19
+ base64_encode = handler.base64_encodeable?(hhdrs)
20
20
  body = Base64.strict_encode64(handler.body) if base64_encode
21
21
  { multiValueHeaders: multivalue_headers,
22
22
  statusDescription: status_description,
data/lib/lamby/railtie.rb CHANGED
@@ -1,8 +1,6 @@
1
1
  module Lamby
2
2
  class Railtie < ::Rails::Railtie
3
3
 
4
- config.lamby = ActiveSupport::OrderedOptions.new
5
-
6
4
  rake_tasks do
7
5
  load 'lamby/tasks.rake'
8
6
  load 'lamby/templates.rake'
data/lib/lamby/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Lamby
2
- VERSION = '2.6.1'
2
+ VERSION = '2.8.0'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lamby
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.6.1
4
+ version: 2.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ken Collins
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-03-16 00:00:00.000000000 Z
11
+ date: 2021-05-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack
@@ -150,6 +150,7 @@ files:
150
150
  - docker-compose.yml
151
151
  - lamby.gemspec
152
152
  - lib/lamby.rb
153
+ - lib/lamby/config.rb
153
154
  - lib/lamby/debug.rb
154
155
  - lib/lamby/handler.rb
155
156
  - lib/lamby/logger.rb