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 +4 -4
- data/README.md +2 -2
- data/lib/yake/api.rb +1 -2
- data/lib/yake/datadog.rb +59 -1
- data/lib/yake/support.rb +44 -49
- data/lib/yake/version.rb +1 -1
- data/lib/yake.rb +4 -4
- metadata +4 -6
- data/lib/yake/datadog/v1.rb +0 -62
- data/lib/yake/datadog/v2.rb +0 -62
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fc13e0e5293f2878eedbe89a7e9aa132d72d478751a5d5f159b28ee579d97d59
|
4
|
+
data.tar.gz: 29fe7d819734aec8b28b27b30eca18340e37ba59bb24b705efcf3e036ba46479
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
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 =
|
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
|
-
|
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
|
8
|
+
def to_dynamodb = { L: map(&:to_dynamodb) }
|
10
9
|
end
|
11
10
|
|
12
11
|
class Hash
|
13
|
-
def deep_keys
|
14
|
-
def deep_sort
|
15
|
-
def
|
16
|
-
def
|
17
|
-
def
|
18
|
-
def
|
19
|
-
def
|
20
|
-
def
|
21
|
-
def
|
22
|
-
def
|
23
|
-
def
|
24
|
-
def
|
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
|
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
|
92
|
+
def to_dynamodb = { N: to_s }
|
98
93
|
end
|
99
94
|
|
100
95
|
class Integer
|
101
|
-
def weeks
|
102
|
-
def days
|
103
|
-
def hours
|
104
|
-
def minutes
|
105
|
-
def seconds
|
106
|
-
def utc
|
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)
|
125
|
-
def camel_case
|
126
|
-
def decode64
|
127
|
-
def encode64
|
128
|
-
def md5sum
|
129
|
-
def sha1sum
|
130
|
-
def snake_case
|
131
|
-
def strict_decode64
|
132
|
-
def strict_encode64
|
133
|
-
def to_dynamodb
|
134
|
-
def to_h_from_json(
|
135
|
-
def to_h_from_form
|
136
|
-
def utc
|
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
|
141
|
-
def snake_case
|
142
|
-
def to_dynamodb
|
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
|
147
|
-
def self.at(...) super.utc
|
148
|
-
def self.now
|
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
data/lib/yake.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative
|
4
|
-
require_relative
|
5
|
-
require_relative
|
6
|
-
require_relative
|
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.
|
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:
|
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.
|
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.
|
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
|
data/lib/yake/datadog/v1.rb
DELETED
@@ -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
|
data/lib/yake/datadog/v2.rb
DELETED
@@ -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
|