jets 5.0.6 → 5.0.8

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: 7d0438bdc5ee9aaa104aad58486eb1b45d8619ea9fc98d95c51bd569047a0238
4
- data.tar.gz: 210532fb5b1c69b9463c824bbae2c4a40a7724aad5802f3b871aa386b643e745
3
+ metadata.gz: 3c9deeac005b373929e04e747ce2465b82eccc49a99a39830025228e1da199e7
4
+ data.tar.gz: e1e5849237312cfe6725a1d4bd163b8b17f4ef904a000b5c5323de05a7afbaf4
5
5
  SHA512:
6
- metadata.gz: 2667161cd40b1f8356ad8fcb107d43be6086a92312fe2efc9eba8af246f1f0709c9a04f3e6782cbfc79502a6de190a5c328094cd5a29d63609030f034de558e6
7
- data.tar.gz: 3de7ac271c630fe8014e0d2a9468645a4ed097ea5d70d6c6ec4707d48c4aa5de4b6dbd4fa45501e3cbbb30dfc8ba63905d3392efb487758958ef9feb4c90aeb6
6
+ metadata.gz: c351ace071bea12bca7785140d1a3cd0abcc8750a1e06d99cbe5691af1a26a573f8ff915a1d4569dd97c736df852d83d8944161c2387c42791588f568d13e17f
7
+ data.tar.gz: 1bef67bd4957279b84d2315597568a78c4fe17806d659116dd59f55018e242b432fbc23d186ca4e171f97db001ac22c5f86158049b817713b2ead712158eb419
data/CHANGELOG.md CHANGED
@@ -3,6 +3,14 @@
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.8] - 2023-12-24
7
+ - [#702](https://github.com/rubyonjets/jets/pull/702) prettier event helpers IE: s3_events vs s3_event_payloads
8
+
9
+ ## [5.0.7] - 2023-12-24
10
+ - [#699](https://github.com/rubyonjets/jets/pull/699) cache Stack.lookup output in class memory
11
+ - [#700](https://github.com/rubyonjets/jets/pull/700) update s3 sns and sqs event helpers to return all events
12
+ - [#701](https://github.com/rubyonjets/jets/pull/701) fix s3_event and change method to s3_event_payloads
13
+
6
14
  ## [5.0.6] - 2023-12-21
7
15
  - [#698](https://github.com/rubyonjets/jets/pull/698) make iam_policy additive to default_iam_policy for event
8
16
  - jets new environments/production.rb dont include assets.compile for api mode
@@ -130,7 +130,7 @@ module Jets::Builders
130
130
 
131
131
  def internal_shims
132
132
  jets_base_path if Jets.custom_domain?
133
- s3_bucket_config if Jets.s3_event?
133
+ s3_bucket_config if Jets.s3_events?
134
134
  end
135
135
 
136
136
  def jets_base_path
@@ -35,7 +35,7 @@ module Jets::Command
35
35
 
36
36
  private
37
37
  def create_s3_event_buckets
38
- buckets = Jets::Job::Base.s3_events.keys
38
+ buckets = Jets::Job::Base._s3_events.keys
39
39
  buckets.each do |bucket|
40
40
  Jets::AwsServices::S3Bucket.ensure_exists(bucket)
41
41
  end
data/lib/jets/core.rb CHANGED
@@ -158,8 +158,8 @@ module Jets::Core
158
158
  Jets.config.domain.hosted_zone_name
159
159
  end
160
160
 
161
- def s3_event?
162
- !Jets::Job::Base.s3_events.empty?
161
+ def s3_events?
162
+ !Jets::Job::Base._s3_events.empty?
163
163
  end
164
164
 
165
165
  def process(event, context, handler)
@@ -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 -%>
@@ -4,6 +4,8 @@ class <%= class_name %>Job < ApplicationJob
4
4
  sns_event "hello-topic"
5
5
  def <%= options[:name] %>
6
6
  puts "event #{JSON.dump(event)}"
7
+ puts "sns_events #{JSON.dump(sns_events)}"
8
+ puts "sns_events? #{JSON.dump(sns_events?)}"
7
9
  end
8
10
  end
9
11
  <% end -%>
@@ -4,6 +4,8 @@ class <%= class_name %>Job < ApplicationJob
4
4
  sqs_event "hello-queue"
5
5
  def <%= options[:name] %>
6
6
  puts "event #{JSON.dump(event)}"
7
+ puts "sqs_events #{JSON.dump(sqs_events)}"
8
+ puts "sqs_events? #{JSON.dump(sqs_events?)}"
7
9
  end
8
10
  end
9
11
  <% end -%>
data/lib/jets/job/base.rb CHANGED
@@ -10,17 +10,17 @@ module Jets::Job
10
10
  include Dsl
11
11
 
12
12
  # non-DSL methods
13
- include Helpers::KinesisEventHelper
14
- include Helpers::LogEventHelper
15
- include Helpers::S3EventHelper
16
- include Helpers::SnsEventHelper
17
- include Helpers::SqsEventHelper
13
+ include Helpers::KinesisEvent
14
+ include Helpers::LogEvent
15
+ include Helpers::S3Event
16
+ include Helpers::SnsEvent
17
+ include Helpers::SqsEvent
18
18
  prepend Jets::ExceptionReporting::Process
19
19
 
20
20
  # Tracks bucket each time an s3_event is declared
21
21
  # Map of bucket_name => stack_name (nested part)
22
- cattr_accessor :s3_events # dont want this to be inheritable intentionally
23
- self.s3_events = {}
22
+ cattr_accessor :_s3_events # dont want this to be inheritable intentionally
23
+ self._s3_events = {}
24
24
 
25
25
  class << self
26
26
  def process(event, context, meth)
@@ -11,7 +11,7 @@ module Jets::Job::Dsl
11
11
  # We will not generate them again. However, we still need to always
12
12
  # add the depends_on declaration to ensure that the shared stack parameters
13
13
  # are properly passed to the nested child stack.
14
- stack_name = s3_events[bucket_name] # already registered
14
+ stack_name = _s3_events[bucket_name] # already registered
15
15
  if stack_name
16
16
  depends_on stack_name.underscore.to_sym, class_prefix: true # always add this
17
17
  return stack_name
@@ -20,7 +20,7 @@ module Jets::Job::Dsl
20
20
  # Create shared resources - one time
21
21
  stack_name = declare_shared_s3_event_resources(bucket_name)
22
22
  depends_on stack_name.underscore.to_sym, class_prefix: true # always add this
23
- self.s3_events[bucket_name] = stack_name # tracks buckets already set up
23
+ self._s3_events[bucket_name] = stack_name # tracks buckets already set up
24
24
  end
25
25
 
26
26
  def declare_shared_s3_event_resources(bucket_name)
@@ -29,8 +29,8 @@ module Jets::Job::Dsl
29
29
  s3_stack.stack_name
30
30
  end
31
31
 
32
- def s3_events
33
- Jets::Job::Base.s3_events
32
+ def _s3_events
33
+ Jets::Job::Base._s3_events
34
34
  end
35
35
  end
36
36
  end
@@ -1,7 +1,7 @@
1
1
  require 'base64'
2
2
 
3
3
  module Jets::Job::Helpers
4
- module KinesisEventHelper
4
+ module KinesisEvent
5
5
  def kinesis_data
6
6
  records = event["Records"]
7
7
  records.map do |record|
@@ -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
@@ -4,7 +4,7 @@ require 'stringio'
4
4
  require 'zlib'
5
5
 
6
6
  module Jets::Job::Helpers
7
- module LogEventHelper
7
+ module LogEvent
8
8
  def log_event
9
9
  encoded = event["awslogs"]["data"]
10
10
  compressed_string = Base64.decode64(encoded)
@@ -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
@@ -0,0 +1,50 @@
1
+ module Jets::Job::Helpers
2
+ module S3Event
3
+ def s3_events
4
+ encoded_messages = event["Records"].map do |record|
5
+ record["Sns"]["Message"] # SNS message is JSON
6
+ end
7
+ # Decode the JSON messages
8
+ messages = encoded_messages.map do |message|
9
+ JSON.load(message)
10
+ end
11
+ # Extract the S3 event records
12
+ messages.map do |message|
13
+ message["Records"].map do |record|
14
+ ActiveSupport::HashWithIndifferentAccess.new(record)
15
+ end
16
+ end.flatten
17
+ end
18
+ alias s3_event_payloads s3_events
19
+
20
+ def s3_events?
21
+ event["Records"]&.any? { |r| r.dig("Sns", "Message") }
22
+ end
23
+ alias s3_event_payloads? s3_events?
24
+
25
+ def s3_objects
26
+ s3_events.map do |record|
27
+ record["s3"]["object"]
28
+ end
29
+ end
30
+
31
+ def s3_objects?
32
+ s3_events.any? { |r| r.dig("s3", "object") }
33
+ end
34
+
35
+ # Deprecated methods below
36
+ def s3_event
37
+ puts "WARN: s3_event is deprecated".color(:yellow)
38
+ puts "It can possibly drop events when they come in extremely fast."
39
+ puts "Use s3_events instead"
40
+ s3_events.first
41
+ end
42
+
43
+ def s3_object
44
+ puts "WARN: s3_object is deprecated".color(:yellow)
45
+ puts "It can possibly drop events when they come in extremely fast."
46
+ puts "Use s3_objects instead"
47
+ s3_objects.first
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,26 @@
1
+ module Jets::Job::Helpers
2
+ module SnsEvent
3
+ def sns_events
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))
9
+ end
10
+ end
11
+ alias sns_event_payloads sns_events
12
+
13
+ def sns_events?
14
+ event["Records"]&.any? { |r| r.dig("Sns", "Message") }
15
+ end
16
+ alias sns_event_payloads? sns_events?
17
+
18
+ # Deprecated methods below
19
+ def sns_event_payload
20
+ puts "WARN: sns_event_payload is deprecated".color(:yellow)
21
+ puts "It can possibly drop events when they come in extremely fast."
22
+ puts "Use sns_events instead"
23
+ sns_events.first
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,26 @@
1
+ module Jets::Job::Helpers
2
+ module SqsEvent
3
+ def sqs_events
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
10
+ end
11
+ alias sqs_event_payloads sqs_events
12
+
13
+ def sqs_events?
14
+ event["Records"]&.any? { |r| r.dig("body") }
15
+ end
16
+ alias sqs_event_payloads? sqs_events?
17
+
18
+ # Deprecated methods below
19
+ def sqs_event_payload
20
+ puts "WARN: sqs_event_payload is deprecated".color(:yellow)
21
+ puts "It can possibly drop events when they come in extremely fast."
22
+ puts "Use sqs_events instead"
23
+ sqs_events.first
24
+ end
25
+ end
26
+ end
@@ -56,6 +56,8 @@ class Jets::Stack
56
56
 
57
57
  # Internal flag is mainly used to disable WARN messages
58
58
  def internal?
59
+ return true if internal_search_expression.include?("jets/base_path")
60
+ return true if internal_search_expression.include?("jets/s3_bucket_config")
59
61
  !!Dir.glob(internal_search_expression).first
60
62
  end
61
63
 
@@ -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.6"
2
+ VERSION = "5.0.8"
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.6
4
+ version: 5.0.8
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-21 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
@@ -1039,11 +1039,11 @@ files:
1039
1039
  - lib/jets/job/dsl/s3_event.rb
1040
1040
  - lib/jets/job/dsl/sns_event.rb
1041
1041
  - lib/jets/job/dsl/sqs_event.rb
1042
- - lib/jets/job/helpers/kinesis_event_helper.rb
1043
- - lib/jets/job/helpers/log_event_helper.rb
1044
- - lib/jets/job/helpers/s3_event_helper.rb
1045
- - lib/jets/job/helpers/sns_event_helper.rb
1046
- - lib/jets/job/helpers/sqs_event_helper.rb
1042
+ - lib/jets/job/helpers/kinesis_event.rb
1043
+ - lib/jets/job/helpers/log_event.rb
1044
+ - lib/jets/job/helpers/s3_event.rb
1045
+ - lib/jets/job/helpers/sns_event.rb
1046
+ - lib/jets/job/helpers/sqs_event.rb
1047
1047
  - lib/jets/klass.rb
1048
1048
  - lib/jets/lambda/definition.rb
1049
1049
  - lib/jets/lambda/dsl.rb
@@ -1,13 +0,0 @@
1
- module Jets::Job::Helpers
2
- module S3EventHelper
3
- def s3_event
4
- message = event["Records"][0]["Sns"]["Message"]
5
- h = JSON.load(message)
6
- ActiveSupport::HashWithIndifferentAccess.new(h)
7
- end
8
-
9
- def s3_object
10
- s3_event["Records"][0]["s3"]["object"]
11
- end
12
- end
13
- end
@@ -1,8 +0,0 @@
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))
6
- end
7
- end
8
- end
@@ -1,8 +0,0 @@
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
7
- end
8
- end