jets 5.0.5 → 5.0.7

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: 9188a490c6d04a0c7b0f947442718008cc8724979dfe0f0f49d1302d90185efc
4
- data.tar.gz: a3f42abadc033434cb21af8b43ed7ecccdfbd41a4da8a4eb23bd959506a3c5e9
3
+ metadata.gz: e04f05b1acc2261aa805569fce675ac41b87de70487156b625ddc1beedad957a
4
+ data.tar.gz: 4f89a28661441ff74bf7cb98b90eef08583fe18e20ba72472240e41f942b8ff2
5
5
  SHA512:
6
- metadata.gz: f8d64806385a02832b1c14de77f2262b7507dc4090afad9e240740d7ec4ce8fa0c4970cd30d80ccdbd960d70d4248ad7ed1d2efc1bf4e5ddde473c0bc4705279
7
- data.tar.gz: 7f5cb632fe2bc2de10a986db14921d48b867c352af313192825180fd2a9d7687b75b2ed55772d66b60e266b788297b2e97aabdbfa07a07a466d774861906b3cd
6
+ metadata.gz: 189e8b589c09a258329a7f0d29ac52759a854e75ddafa312716e93359689ee87946c7cecb8cbb720e0046042e0358fd7086ef2b011ecb2929014f0c371352548
7
+ data.tar.gz: 5f2adbfc890b6a0346a998463fa3d297138aebe570576d1f2d3f782456da5c4384151043f9b241a966c6fcfcf3b2fb2ffda49c129ea43a3581513422f85e42fa
data/CHANGELOG.md CHANGED
@@ -3,6 +3,15 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  This project *loosely tries* to adhere to [Semantic Versioning](http://semver.org/).
5
5
 
6
+ ## [5.0.7] - 2023-12-24
7
+ - [#699](https://github.com/rubyonjets/jets/pull/699) cache Stack.lookup output in class memory
8
+ - [#700](https://github.com/rubyonjets/jets/pull/700) update s3 sns and sqs event helpers to return all events
9
+ - [#701](https://github.com/rubyonjets/jets/pull/701) fix s3_event and change method to s3_event_payloads
10
+
11
+ ## [5.0.6] - 2023-12-21
12
+ - [#698](https://github.com/rubyonjets/jets/pull/698) make iam_policy additive to default_iam_policy for event
13
+ - jets new environments/production.rb dont include assets.compile for api mode
14
+
6
15
  ## [5.0.5] - 2023-12-19
7
16
  - [#697](https://github.com/rubyonjets/jets/pull/697) fix sqs_queue output url camelcase name
8
17
 
@@ -4,8 +4,8 @@ class <%= class_name %>Job < ApplicationJob
4
4
  s3_event "my-bucket" # new or existing bucket
5
5
  def <%= options[:name] %>
6
6
  puts "event #{JSON.dump(event)}"
7
- puts "s3_event #{JSON.dump(s3_event)}"
8
- puts "s3_object #{JSON.dump(s3_object)}"
7
+ puts "s3_events #{JSON.dump(s3_events)}"
8
+ puts "s3_objects #{JSON.dump(s3_objects)}"
9
9
  end
10
10
  end
11
11
  <% end -%>
@@ -7,7 +7,9 @@ Jets.application.configure do
7
7
  <%- unless options[:mode] == 'job' -%>
8
8
  config.consider_all_requests_local = false
9
9
  # Do not fallback to assets pipeline if a precompiled asset is missed.
10
+ <%- if options[:mode] == 'html' -%>
10
11
  config.assets.compile = false
12
+ <%- end -%>
11
13
 
12
14
  # Ignore bad email addresses and do not raise email delivery errors.
13
15
  # Set this to true and configure the email server for immediate delivery to raise delivery errors.
@@ -7,10 +7,11 @@ module Jets::Job::Dsl
7
7
  stream_arn = full_dynamodb_stream_arn(table_name)
8
8
  default_iam_policy = default_dynamodb_stream_policy(stream_arn)
9
9
 
10
- # Create iam policy allows access to queue
11
- # Allow disabling in case use wants to add permission application-wide and not have extra IAM policy
12
- iam_policy_props = options.delete(:iam_policy) || @iam_policy || default_iam_policy
13
- iam_policy(iam_policy_props) unless iam_policy_props == :disable
10
+ # Create iam policy allows access to dynamodb
11
+ iam_policy_option = [options.delete(:iam_policy)].compact.flatten
12
+ user_iam_policy = [@iam_policy].compact.flatten
13
+ iam_policy_props = iam_policy_option + user_iam_policy + [default_iam_policy]
14
+ iam_policy(iam_policy_props)
14
15
 
15
16
  props = options # by this time options only has EventSourceMapping properties
16
17
  default = {
@@ -4,10 +4,11 @@ module Jets::Job::Dsl
4
4
  stream_arn = full_kinesis_stream_arn(stream_name)
5
5
  default_iam_policy = default_kinesis_stream_policy(stream_arn)
6
6
 
7
- # Create iam policy allows access to queue
8
- # Allow disabling in case use wants to add permission application-wide and not have extra IAM policy
9
- iam_policy_props = options.delete(:iam_policy) || @iam_policy || default_iam_policy
10
- iam_policy(iam_policy_props) unless iam_policy_props == :disable
7
+ # Create iam policy allows access to kinesis
8
+ iam_policy_option = [options.delete(:iam_policy)].compact.flatten
9
+ user_iam_policy = [@iam_policy].compact.flatten
10
+ iam_policy_props = iam_policy_option + user_iam_policy + [default_iam_policy]
11
+ iam_policy(iam_policy_props)
11
12
 
12
13
  props = options # by this time options only has EventSourceMapping properties
13
14
  default = {
@@ -51,9 +51,10 @@ module Jets::Job::Dsl
51
51
  end
52
52
 
53
53
  # Create iam policy allows access to queue
54
- # Allow disabling in case use wants to add permission application-wide and not have extra IAM policy
55
- iam_policy_props = options.delete(:iam_policy) || @iam_policy || default_iam_policy
56
- iam_policy(iam_policy_props) unless iam_policy_props == :disable
54
+ iam_policy_option = [options.delete(:iam_policy)].compact.flatten
55
+ user_iam_policy = [@iam_policy].compact.flatten
56
+ iam_policy_props = iam_policy_option + user_iam_policy + [default_iam_policy]
57
+ iam_policy(iam_policy_props)
57
58
 
58
59
  props = options # by this time options only has EventSourceMapping properties
59
60
  default = {
@@ -9,5 +9,9 @@ module Jets::Job::Helpers
9
9
  Base64.decode64(encoded) # data
10
10
  end
11
11
  end
12
+
13
+ def kinesis_data?
14
+ event["Records"]&.any? { |r| r.dig("kinesis", "data") }
15
+ end
12
16
  end
13
17
  end
@@ -13,5 +13,9 @@ module Jets::Job::Helpers
13
13
  data = JSON.load(uncompressed_string)
14
14
  ActiveSupport::HashWithIndifferentAccess.new(data)
15
15
  end
16
+
17
+ def log_event?
18
+ !!event.dig("awslogs", "data")
19
+ end
16
20
  end
17
21
  end
@@ -1,13 +1,45 @@
1
1
  module Jets::Job::Helpers
2
2
  module S3EventHelper
3
+ def s3_event_payloads
4
+ messages = event["Records"].map do |record|
5
+ record["Sns"]["Message"]
6
+ end
7
+ messages.map do |message|
8
+ h = JSON.load(message)
9
+ ActiveSupport::HashWithIndifferentAccess.new(h)
10
+ end
11
+ end
12
+
13
+ def s3_event_payloads?
14
+ event["Records"]&.any? { |r| r.dig("Sns", "Message") }
15
+ end
16
+
17
+ def s3_objects
18
+ s3_event_payloads.map do |payload|
19
+ records = payload["Records"]
20
+ records.map do |record|
21
+ record["s3"]["object"]
22
+ end
23
+ end.flatten
24
+ end
25
+
26
+ def s3_objects?
27
+ s3_event_payloads["Records"]&.any? { |r| r.dig("s3", "object") }
28
+ end
29
+
30
+ # Deprecated methods below
3
31
  def s3_event
4
- message = event["Records"][0]["Sns"]["Message"]
5
- h = JSON.load(message)
6
- ActiveSupport::HashWithIndifferentAccess.new(h)
32
+ puts "WARN: s3_event is deprecated".color(:yellow)
33
+ puts "It can possibly drop events when come in extremely fast."
34
+ puts "Use s3_event_payloads instead"
35
+ s3_event_payloads.first
7
36
  end
8
37
 
9
38
  def s3_object
10
- s3_event["Records"][0]["s3"]["object"]
39
+ puts "WARN: s3_object is deprecated".color(:yellow)
40
+ puts "It can possibly drop events when come in extremely fast."
41
+ puts "Use s3_objects instead"
42
+ s3_objects.first
11
43
  end
12
44
  end
13
45
  end
@@ -1,8 +1,24 @@
1
1
  module Jets::Job::Helpers
2
- module SnsEventHelper
3
- def sns_event_payload
4
- message = event&.dig("Records", 0, "Sns", "Message")
5
- @sns_event_payload ||= ActiveSupport::HashWithIndifferentAccess.new(JSON.load(message))
2
+ module SnsEventHelper
3
+ def sns_event_payloads
4
+ records = event["Records"]
5
+ return [] unless records
6
+ records.map do |record|
7
+ message = record["Sns"]["Message"]
8
+ ActiveSupport::HashWithIndifferentAccess.new(JSON.load(message))
6
9
  end
7
10
  end
11
+
12
+ def sns_event_payloads?
13
+ event["Records"]&.any? { |r| r.dig("Sns", "Message") }
14
+ end
15
+
16
+ # Deprecated methods below
17
+ def sns_event_payload
18
+ puts "WARN: sns_event_payload is deprecated".color(:yellow)
19
+ puts "It can possibly drop events when come in extremely fast."
20
+ puts "Use sns_event_payloads instead"
21
+ sns_event_payloads.first
22
+ end
23
+ end
8
24
  end
@@ -1,8 +1,24 @@
1
1
  module Jets::Job::Helpers
2
- module SqsEventHelper
3
- def sqs_event_payload
4
- message = event&.dig("Records", 0, "body")
5
- @sqs_event_payload ||= ActiveSupport::HashWithIndifferentAccess.new(JSON.parse(message))
6
- end
2
+ module SqsEventHelper
3
+ def sqs_event_payloads
4
+ records = event["Records"]
5
+ return [] unless records
6
+ records.map do |record|
7
+ message = record["body"]
8
+ ActiveSupport::HashWithIndifferentAccess.new(JSON.load(message))
9
+ end
7
10
  end
8
- end
11
+
12
+ def sqs_event_payloads?
13
+ event["Records"]&.any? { |r| r.dig("body") }
14
+ end
15
+
16
+ # Deprecated methods below
17
+ def sqs_event_payload
18
+ puts "WARN: sqs_event_payload is deprecated".color(:yellow)
19
+ puts "It can possibly drop events when come in extremely fast."
20
+ puts "Use sqs_event_payloads instead"
21
+ sqs_event_payloads.first
22
+ end
23
+ end
24
+ end
@@ -6,7 +6,11 @@ class Jets::Stack::Output
6
6
  @stack_subclass = stack_subclass
7
7
  end
8
8
 
9
+ @@cache = {}
9
10
  def output(logical_id)
11
+ cache_key = "#{@stack_subclass}-#{logical_id}"
12
+ return @@cache[cache_key] if @@cache[cache_key]
13
+
10
14
  child_stack_id = @stack_subclass.to_s.camelize
11
15
 
12
16
  stack_arn = shared_stack_arn(child_stack_id)
@@ -14,7 +18,7 @@ class Jets::Stack::Output
14
18
  child = resp.stacks.first
15
19
  return unless child
16
20
 
17
- output_value(child, logical_id)
21
+ @@cache[cache_key] = output_value(child, logical_id)
18
22
  end
19
23
 
20
24
  # Shared child stack arn
data/lib/jets/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Jets
2
- VERSION = "5.0.5"
2
+ VERSION = "5.0.7"
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: 5.0.5
4
+ version: 5.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tung Nguyen
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-12-19 00:00:00.000000000 Z
11
+ date: 2023-12-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: actionmailer