yake 1.0.0 → 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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d0272be54a9cf2f3b94764ac4c87db1f6047b9fd2e8b13286a8be939adde1387
4
- data.tar.gz: 9c82744536dd4147039bdf6d3ef8d3e6b395c28ce1d2f64e8999d4a0c80a0a79
3
+ metadata.gz: fc13e0e5293f2878eedbe89a7e9aa132d72d478751a5d5f159b28ee579d97d59
4
+ data.tar.gz: 29fe7d819734aec8b28b27b30eca18340e37ba59bb24b705efcf3e036ba46479
5
5
  SHA512:
6
- metadata.gz: 835f4171028f915170c3a548b175e6e5ee3a1d57162b4b9d6bbb7a33537fc599e9fd535a925a7b7e3b871d507707757d508f8dadcbe4b1368b47b3000a2cfc8f
7
- data.tar.gz: 8ecc31882ad76a1d999f7e5ad1ab3f1ecbe141041f091a12f5dcfefb728416391dfa14d0632345e9da8e3de6bf66b3372b704ea73c3fbb40365181ec1bb8c808
6
+ metadata.gz: 8608775e85da8d706e49a066f2df7df9b133f672cedbb3bb226d7854c48fedec84e45887c92b173fb7be71de5b274a6aa1737cebd7f69dfb87f29f85f9c547e6
7
+ data.tar.gz: 0b746f99b54c0428ff20feb7083aca5addb6479ce395c6fe0d26e20d20fd2973a650a5acc2ad38ab38dc2735b116f144f1e755700222335ed7cc80b7392a4b3b
data/README.md CHANGED
@@ -342,7 +342,7 @@ UTC.now
342
342
 
343
343
  ## Datadog Integration
344
344
 
345
- As of `~> 0.4`, `yake` comes with a helper for writing Lambdas that integrate with Datadog's `datadog-ruby` gem.
345
+ As of `v1.0`, `yake` comes with a helper for writing Lambdas that integrate with Datadog's `datadog-lambda` gem.
346
346
 
347
347
  As of `~> 0.8`, `yake` uses the v2 Datadog Lambda gem.
348
348
 
@@ -374,7 +374,7 @@ After checking out the repo, run `bundle` to install dependencies. Then, run `ra
374
374
 
375
375
  ## Contributing
376
376
 
377
- Bug reports and pull requests are welcome on GitHub at https://github.com/amancevice/yake.
377
+ Bug reports and pull requests are welcome on GitHub at [amancevice/yake](https://github.com/amancevice/yake).
378
378
 
379
379
  ## License
380
380
 
data/lib/yake/api.rb CHANGED
@@ -1,6 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'base64'
4
3
  require 'json'
5
4
 
6
5
  require 'yake'
@@ -21,7 +20,7 @@ module Yake
21
20
 
22
21
  # Decode body if Base64-encoded
23
22
  if event['isBase64Encoded']
24
- body = Base64.strict_decode64(event['body'])
23
+ body = event['body'].unpack1('m0')
25
24
  event.update('body' => body, 'isBase64Encoded' => false)
26
25
  end
27
26
 
data/lib/yake/datadog.rb CHANGED
@@ -1,4 +1,62 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'logger'
4
+
3
5
  require 'datadog/lambda'
4
- require_relative "datadog/v#{Datadog::Lambda::VERSION::MAJOR}"
6
+ require 'yake'
7
+
8
+ module Yake
9
+ module Datadog
10
+ class Formatter < ::Logger::Formatter
11
+ Format = "[%s] %s %s %s %s\n"
12
+
13
+ def call(severity, time, progname, msg)
14
+ Format % [
15
+ severity,
16
+ time.utc.strftime('%Y-%m-%dT%H:%M:%S.%LZ'),
17
+ progname.nil? ? '-' : progname.split.last,
18
+ ::Datadog::Tracing.log_correlation,
19
+ msg2str(msg).strip,
20
+ ]
21
+ end
22
+ end
23
+
24
+ class MockContext < Struct.new(
25
+ :clock_diff,
26
+ :deadline_ms,
27
+ :aws_request_id,
28
+ :invoked_function_arn,
29
+ :log_group_name,
30
+ :log_stream_name,
31
+ :function_name,
32
+ :memory_limit_in_mb,
33
+ :function_version)
34
+
35
+ def invoked_function_arn
36
+ @invoked_function_arn ||= begin
37
+ region = ENV['AWS_REGION'] || ENV['AWS_DEFAULT_REGION'] || 'us-east-1'
38
+ "arn:aws:lambda:#{region}:123456789012:function-name"
39
+ end
40
+ end
41
+ end
42
+
43
+ module DSL
44
+ include Yake::DSL
45
+
46
+ ##
47
+ # Datadog handler wrapper
48
+ def datadog(name, &block)
49
+ define_method(name) do |event:nil, context:nil|
50
+ context ||= MockContext.new
51
+ ::Datadog::Lambda.wrap(event, context) do
52
+ Yake.wrap(event, context, &block)
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
58
+
59
+ logger.formatter = Datadog::Formatter.new
60
+ end
61
+
62
+ extend Yake::Datadog::DSL
data/lib/yake/support.rb CHANGED
@@ -1,27 +1,28 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'base64'
4
3
  require 'digest'
5
4
  require 'json'
6
5
  require 'time'
7
6
 
8
7
  class Array
9
- def to_dynamodb() { L: map(&:to_dynamodb) } end
8
+ def to_dynamodb = { L: map(&:to_dynamodb) }
10
9
  end
11
10
 
12
11
  class Hash
13
- def deep_keys() map { |k,v| v.respond_to?(:deep_keys) ? [k] + v.deep_keys : k }.flatten end
14
- def deep_sort() sort.map { |k,v| [ k, v.try(:deep_sort) { |x| x } ] }.to_h end
15
- def encode64() to_json.encode64 end
16
- def except(*keys) reject { |key,_| keys.include? key } end
17
- def strict_encode64() to_json.strict_encode64 end
18
- def stringify_names() deep_transform_keys(&:to_s) end
19
- def stringify_names!() deep_transform_keys!(&:to_s) end
20
- def symbolize_names() deep_transform_keys(&:to_sym) end
21
- def symbolize_names!() deep_transform_keys!(&:to_sym) end
22
- def to_form() URI.encode_www_form(self) end
23
- def to_json_sorted() deep_sort.to_json end
24
- def to_struct() OpenStruct.new(self) end
12
+ def deep_keys = map { |k,v| v.respond_to?(:deep_keys) ? [k] + v.deep_keys : k }.flatten
13
+ def deep_sort = sort.map { |k,v| [ k, v.try(:deep_sort) { |x| x } ] }.to_h
14
+ def deep_transform_keys(&block) = deep_transform(:transform_keys, &block)
15
+ def deep_transform_keys!(&block) = deep_transform(:transform_keys!, &block)
16
+ def encode64 = to_json.encode64
17
+ def except(*keys) = reject { |key,_| keys.include? key }
18
+ def strict_encode64 = to_json.strict_encode64
19
+ def stringify_names = deep_transform_keys(&:to_s)
20
+ def stringify_names! = deep_transform_keys!(&:to_s)
21
+ def symbolize_names = deep_transform_keys(&:to_sym)
22
+ def symbolize_names! = deep_transform_keys!(&:to_sym)
23
+ def to_form = URI.encode_www_form(self)
24
+ def to_json_sorted = deep_sort.to_json
25
+ def to_struct = OpenStruct.new(self)
25
26
 
26
27
  ##
27
28
  # Adapted from ActiveSupport Hash#deep_merge
@@ -40,14 +41,6 @@ class Hash
40
41
  end
41
42
  end
42
43
 
43
- def deep_transform_keys(&block)
44
- deep_transform(:transform_keys, &block)
45
- end
46
-
47
- def deep_transform_keys!(&block)
48
- deep_transform(:transform_keys!, &block)
49
- end
50
-
51
44
  def to_deep_struct
52
45
  to_struct.tap do |struct|
53
46
  struct.to_h.each do |key, val|
@@ -85,7 +78,9 @@ class Hash
85
78
  end.reduce(&:merge)
86
79
  end
87
80
 
88
- private def deep_transform(method, &block)
81
+ private
82
+
83
+ def deep_transform(method, &block)
89
84
  f = -> (x) { x.respond_to?(:"deep_#{method}") ? x.send(:"deep_#{method}", &block) : x }
90
85
  block_given? ? send(method, &block).map do |key, val|
91
86
  [key, val.is_a?(Array) ? val.map(&f) : val.then(&f)]
@@ -94,16 +89,16 @@ class Hash
94
89
  end
95
90
 
96
91
  class Numeric
97
- def to_dynamodb() { N: to_s } end
92
+ def to_dynamodb = { N: to_s }
98
93
  end
99
94
 
100
95
  class Integer
101
- def weeks() days * 7 end
102
- def days() hours * 24 end
103
- def hours() minutes * 60 end
104
- def minutes() seconds * 60 end
105
- def seconds() self end
106
- def utc() UTC.at(self) end
96
+ def weeks = days * 7
97
+ def days = hours * 24
98
+ def hours = minutes * 60
99
+ def minutes = seconds * 60
100
+ def seconds = self
101
+ def utc = UTC.at(self)
107
102
 
108
103
  alias :second :seconds
109
104
  alias :minute :minutes
@@ -121,29 +116,29 @@ class Object
121
116
  end
122
117
 
123
118
  class String
124
- def /(path) File.join(self, path.to_s) end
125
- def camel_case() split(/_/).map(&:capitalize).join end
126
- def decode64() Base64.decode64(self) end
127
- def encode64() Base64.encode64(self) end
128
- def md5sum() Digest::MD5.hexdigest(self) end
129
- def sha1sum() Digest::SHA1.hexdigest(self) end
130
- def snake_case() gsub(/([a-z])([A-Z])/, '\1_\2').downcase end
131
- def strict_decode64() Base64.strict_decode64(self) end
132
- def strict_encode64() Base64.strict_encode64(self) end
133
- def to_dynamodb() { S: self } end
134
- def to_h_from_json(**params) JSON.parse(self, **params) end
135
- def to_h_from_form() URI.decode_www_form(self).to_h end
136
- def utc() UTC.parse(self) end
119
+ def /(path) = File.join(self, path.to_s)
120
+ def camel_case = split(/_/).map(&:capitalize).join
121
+ def decode64 = self.unpack1('m')
122
+ def encode64 = [self].pack('m')
123
+ def md5sum = Digest::MD5.hexdigest(self)
124
+ def sha1sum = Digest::SHA1.hexdigest(self)
125
+ def snake_case = gsub(/([a-z])([A-Z])/, '\1_\2').downcase
126
+ def strict_decode64 = self.unpack1('m0')
127
+ def strict_encode64 = [self].pack('m0')
128
+ def to_dynamodb = { S: self }
129
+ def to_h_from_json(...) = JSON.parse(self, ...)
130
+ def to_h_from_form = URI.decode_www_form(self).to_h
131
+ def utc = UTC.parse(self)
137
132
  end
138
133
 
139
134
  class Symbol
140
- def camel_case() to_s.camel_case.to_sym end
141
- def snake_case() to_s.snake_case.to_sym end
142
- def to_dynamodb() { S: to_s } end
135
+ def camel_case = to_s.camel_case.to_sym
136
+ def snake_case = to_s.snake_case.to_sym
137
+ def to_dynamodb = { S: to_s }
143
138
  end
144
139
 
145
140
  class UTC < Time
146
- def initialize(...) super.utc end
147
- def self.at(...) super.utc end
148
- def self.now() super.utc end
141
+ def initialize(...) = super.utc
142
+ def self.at(...) = super.utc
143
+ def self.now = super.utc
149
144
  end
data/lib/yake/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Yake
4
- VERSION = '1.0.0'
4
+ VERSION = '1.1.0'
5
5
  end
data/lib/yake.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative "yake/version"
4
- require_relative "yake/logger"
5
- require_relative "yake/errors"
6
- require_relative "yake/dsl"
3
+ require_relative 'yake/version'
4
+ require_relative 'yake/logger'
5
+ require_relative 'yake/errors'
6
+ require_relative 'yake/dsl'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: yake
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexander Mancevice
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-05-25 00:00:00.000000000 Z
11
+ date: 2024-01-23 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description:
14
14
  email:
@@ -22,8 +22,6 @@ files:
22
22
  - lib/yake.rb
23
23
  - lib/yake/api.rb
24
24
  - lib/yake/datadog.rb
25
- - lib/yake/datadog/v1.rb
26
- - lib/yake/datadog/v2.rb
27
25
  - lib/yake/dsl.rb
28
26
  - lib/yake/errors.rb
29
27
  - lib/yake/logger.rb
@@ -41,14 +39,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
41
39
  requirements:
42
40
  - - ">="
43
41
  - !ruby/object:Gem::Version
44
- version: 2.7.5
42
+ version: 3.2.0
45
43
  required_rubygems_version: !ruby/object:Gem::Requirement
46
44
  requirements:
47
45
  - - ">="
48
46
  - !ruby/object:Gem::Version
49
47
  version: '0'
50
48
  requirements: []
51
- rubygems_version: 3.4.10
49
+ rubygems_version: 3.5.3
52
50
  signing_key:
53
51
  specification_version: 4
54
52
  summary: Rake-like DSL for declaring AWS Lambda function handlers
@@ -1,62 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'logger'
4
-
5
- require 'datadog/lambda'
6
- require 'yake'
7
-
8
- module Yake
9
- module Datadog
10
- class Formatter < ::Logger::Formatter
11
- Format = "[%s] %s %s %s %s\n"
12
-
13
- def call(severity, time, progname, msg)
14
- Format % [
15
- severity,
16
- time.utc.strftime('%Y-%m-%dT%H:%M:%S.%LZ'),
17
- progname.nil? ? '-' : progname.split.last,
18
- ::Datadog.tracer.active_correlation,
19
- msg2str(msg).strip,
20
- ]
21
- end
22
- end
23
-
24
- class MockContext < Struct.new(
25
- :clock_diff,
26
- :deadline_ms,
27
- :aws_request_id,
28
- :invoked_function_arn,
29
- :log_group_name,
30
- :log_stream_name,
31
- :function_name,
32
- :memory_limit_in_mb,
33
- :function_version)
34
-
35
- def invoked_function_arn
36
- @invoked_function_arn ||= begin
37
- region = ENV['AWS_REGION'] || ENV['AWS_DEFAULT_REGION'] || 'us-east-1'
38
- "arn:aws:lambda:#{region}:123456789012:function-name"
39
- end
40
- end
41
- end
42
-
43
- module DSL
44
- include Yake::DSL
45
-
46
- ##
47
- # Datadog handler wrapper
48
- def datadog(name, &block)
49
- define_method(name) do |event:nil, context:nil|
50
- context ||= MockContext.new
51
- ::Datadog::Lambda.wrap(event, context) do
52
- Yake.wrap(event, context, &block)
53
- end
54
- end
55
- end
56
- end
57
- end
58
-
59
- logger.formatter = Datadog::Formatter.new
60
- end
61
-
62
- extend Yake::Datadog::DSL
@@ -1,62 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'logger'
4
-
5
- require 'datadog/lambda'
6
- require 'yake'
7
-
8
- module Yake
9
- module Datadog
10
- class Formatter < ::Logger::Formatter
11
- Format = "[%s] %s %s %s %s\n"
12
-
13
- def call(severity, time, progname, msg)
14
- Format % [
15
- severity,
16
- time.utc.strftime('%Y-%m-%dT%H:%M:%S.%LZ'),
17
- progname.nil? ? '-' : progname.split.last,
18
- ::Datadog::Tracing.log_correlation,
19
- msg2str(msg).strip,
20
- ]
21
- end
22
- end
23
-
24
- class MockContext < Struct.new(
25
- :clock_diff,
26
- :deadline_ms,
27
- :aws_request_id,
28
- :invoked_function_arn,
29
- :log_group_name,
30
- :log_stream_name,
31
- :function_name,
32
- :memory_limit_in_mb,
33
- :function_version)
34
-
35
- def invoked_function_arn
36
- @invoked_function_arn ||= begin
37
- region = ENV['AWS_REGION'] || ENV['AWS_DEFAULT_REGION'] || 'us-east-1'
38
- "arn:aws:lambda:#{region}:123456789012:function-name"
39
- end
40
- end
41
- end
42
-
43
- module DSL
44
- include Yake::DSL
45
-
46
- ##
47
- # Datadog handler wrapper
48
- def datadog(name, &block)
49
- define_method(name) do |event:nil, context:nil|
50
- context ||= MockContext.new
51
- ::Datadog::Lambda.wrap(event, context) do
52
- Yake.wrap(event, context, &block)
53
- end
54
- end
55
- end
56
- end
57
- end
58
-
59
- logger.formatter = Datadog::Formatter.new
60
- end
61
-
62
- extend Yake::Datadog::DSL