jets 5.0.5 → 5.0.7

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 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