yake 0.8.0 → 1.0.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 +15 -2
- data/lib/yake/datadog/v1.rb +1 -0
- data/lib/yake/datadog/v2.rb +1 -0
- data/lib/yake/datadog.rb +1 -0
- data/lib/yake/dsl.rb +13 -0
- data/lib/yake/logger.rb +0 -12
- data/lib/yake/support.rb +50 -0
- data/lib/yake/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: d0272be54a9cf2f3b94764ac4c87db1f6047b9fd2e8b13286a8be939adde1387
|
|
4
|
+
data.tar.gz: 9c82744536dd4147039bdf6d3ef8d3e6b395c28ce1d2f64e8999d4a0c80a0a79
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 835f4171028f915170c3a548b175e6e5ee3a1d57162b4b9d6bbb7a33537fc599e9fd535a925a7b7e3b871d507707757d508f8dadcbe4b1368b47b3000a2cfc8f
|
|
7
|
+
data.tar.gz: 8ecc31882ad76a1d999f7e5ad1ab3f1ecbe141041f091a12f5dcfefb728416391dfa14d0632345e9da8e3de6bf66b3372b704ea73c3fbb40365181ec1bb8c808
|
data/README.md
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
# λake
|
|
2
2
|
|
|
3
3
|
[](https://rubygems.org/gems/yake)
|
|
4
|
-
[](https://github.com/amancevice/yake/actions/workflows/rspec.yml)
|
|
5
5
|
[](https://codeclimate.com/github/amancevice/yake/test_coverage)
|
|
6
6
|
[](https://codeclimate.com/github/amancevice/yake/maintainability)
|
|
7
7
|
|
|
8
|
+
[](https://ko-fi.com/smallweirdnumber)
|
|
9
|
+
|
|
8
10
|
Write your AWS Lambda function handlers using a Rake-like declarative syntax:
|
|
9
11
|
|
|
10
12
|
```ruby
|
|
@@ -77,7 +79,7 @@ INFO RequestId: 149c500f-028a-4b57-8977-0ef568cf8caf EVENT { … }
|
|
|
77
79
|
…
|
|
78
80
|
INFO RequestId: 149c500f-028a-4b57-8977-0ef568cf8caf RETURN { … }
|
|
79
81
|
END RequestId: 149c500f-028a-4b57-8977-0ef568cf8caf
|
|
80
|
-
REPORT RequestId: 149c500f-028a-4b57-8977-0ef568cf8caf
|
|
82
|
+
REPORT RequestId: 149c500f-028a-4b57-8977-0ef568cf8caf Duration: 43.97 ms Billed Duration: 44 ms Memory Size: 128 MB Max Memory Used: 77 MB
|
|
81
83
|
```
|
|
82
84
|
|
|
83
85
|
Logging the request ID in this way makes gathering logs lines for a particular execution in CloudWatch much easier.
|
|
@@ -208,6 +210,11 @@ MyObject.new.try(:some_method)
|
|
|
208
210
|
{ a: { b: 'c', d: 'e' }, f: 'g' }.deep_keys
|
|
209
211
|
# => [:a, :b, :d, :f]
|
|
210
212
|
|
|
213
|
+
left = { a: 'b', c: { d: %w[e] } }
|
|
214
|
+
right = { a: 'a', c: { d: %w[d] } }
|
|
215
|
+
left.deep_merge(right)
|
|
216
|
+
# => { :a => "a", :c => { :d => ["e", "d"] } }
|
|
217
|
+
|
|
211
218
|
{ a: { b: 'c', d: 'e' }, f: 'g' }.deep_transform_keys(&:to_s)
|
|
212
219
|
# => { "a" => { "b" => "c", "d" => "e" }, "f" => "g" }
|
|
213
220
|
|
|
@@ -244,6 +251,12 @@ hash.deep_transform_keys!(&:to_s)
|
|
|
244
251
|
|
|
245
252
|
{ f: 'g', a: { d: 'e', b: 'c' } }.to_deep_struct
|
|
246
253
|
# => #<OpenStruct f="g", a=#<OpenStruct d="e", b="c">>
|
|
254
|
+
|
|
255
|
+
{ a: { b: 'c', d: 'e' }, f: 'g' }.to_dynamodb
|
|
256
|
+
# => { :a => { :M => { :b => { :S => "c" }, :d => { :S => "e" } } }, :f => { :S => "g" } }
|
|
257
|
+
|
|
258
|
+
{ a: { M: { b: { S: 'c' }, d: { S: 'e' } } }, f: { S: 'g' } }.to_h_from_dynamodb
|
|
259
|
+
# => { :a => { :b => "c", :d => "e" }, :f => "g" }
|
|
247
260
|
```
|
|
248
261
|
|
|
249
262
|
`Integer` helpers:
|
data/lib/yake/datadog/v1.rb
CHANGED
data/lib/yake/datadog/v2.rb
CHANGED
data/lib/yake/datadog.rb
CHANGED
data/lib/yake/dsl.rb
CHANGED
|
@@ -33,6 +33,19 @@ module Yake
|
|
|
33
33
|
end
|
|
34
34
|
end
|
|
35
35
|
end
|
|
36
|
+
|
|
37
|
+
class << self
|
|
38
|
+
def wrap(event = nil, context = nil, &block)
|
|
39
|
+
original_progname = logger.progname
|
|
40
|
+
logger.progname = context&.aws_request_id
|
|
41
|
+
jsonify = -> (obj) { pretty? ? JSON.pretty_generate(obj) : obj.to_json }
|
|
42
|
+
log_return = -> (res) { logger.info("RETURN #{ jsonify === res }") }
|
|
43
|
+
logger.info("EVENT #{ jsonify === event }")
|
|
44
|
+
(yield(event, context) if block_given?).tap(&log_return)
|
|
45
|
+
ensure
|
|
46
|
+
logger.progname = original_progname
|
|
47
|
+
end
|
|
48
|
+
end
|
|
36
49
|
end
|
|
37
50
|
|
|
38
51
|
extend Yake::DSL
|
data/lib/yake/logger.rb
CHANGED
|
@@ -36,17 +36,5 @@ module Yake
|
|
|
36
36
|
def pretty?
|
|
37
37
|
@pretty == true
|
|
38
38
|
end
|
|
39
|
-
|
|
40
|
-
def wrap(event = nil, context = nil, &block)
|
|
41
|
-
original_progname = logger.progname
|
|
42
|
-
logger.progname = context&.aws_request_id
|
|
43
|
-
jsonify = -> (obj) { pretty? ? JSON.pretty_generate(obj) : obj.to_json }
|
|
44
|
-
logger.info("EVENT #{ jsonify === event }")
|
|
45
|
-
yield(event, context).tap do |res|
|
|
46
|
-
logger.info("RETURN #{ jsonify === res }")
|
|
47
|
-
end
|
|
48
|
-
ensure
|
|
49
|
-
logger.progname = original_progname
|
|
50
|
-
end
|
|
51
39
|
end
|
|
52
40
|
end
|
data/lib/yake/support.rb
CHANGED
|
@@ -1,8 +1,14 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'base64'
|
|
2
4
|
require 'digest'
|
|
3
5
|
require 'json'
|
|
4
6
|
require 'time'
|
|
5
7
|
|
|
8
|
+
class Array
|
|
9
|
+
def to_dynamodb() { L: map(&:to_dynamodb) } end
|
|
10
|
+
end
|
|
11
|
+
|
|
6
12
|
class Hash
|
|
7
13
|
def deep_keys() map { |k,v| v.respond_to?(:deep_keys) ? [k] + v.deep_keys : k }.flatten end
|
|
8
14
|
def deep_sort() sort.map { |k,v| [ k, v.try(:deep_sort) { |x| x } ] }.to_h end
|
|
@@ -17,6 +23,23 @@ class Hash
|
|
|
17
23
|
def to_json_sorted() deep_sort.to_json end
|
|
18
24
|
def to_struct() OpenStruct.new(self) end
|
|
19
25
|
|
|
26
|
+
##
|
|
27
|
+
# Adapted from ActiveSupport Hash#deep_merge
|
|
28
|
+
# https://github.com/rails/rails/blob/f95c0b7e96eb36bc3efc0c5beffbb9e84ea664e4/activesupport/lib/active_support/core_ext/hash/deep_merge.rb
|
|
29
|
+
def deep_merge(other, &block)
|
|
30
|
+
merge(other) do |key, a, b|
|
|
31
|
+
if a.is_a?(Hash) && b.is_a?(Hash)
|
|
32
|
+
a.deep_merge(b, &block)
|
|
33
|
+
elsif a.is_a?(Array) && b.is_a?(Array)
|
|
34
|
+
a + b
|
|
35
|
+
elsif block_given?
|
|
36
|
+
yield key, a, b
|
|
37
|
+
else
|
|
38
|
+
b
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
20
43
|
def deep_transform_keys(&block)
|
|
21
44
|
deep_transform(:transform_keys, &block)
|
|
22
45
|
end
|
|
@@ -41,6 +64,27 @@ class Hash
|
|
|
41
64
|
end
|
|
42
65
|
end
|
|
43
66
|
|
|
67
|
+
def to_dynamodb
|
|
68
|
+
map do |key, val|
|
|
69
|
+
{ key => val.is_a?(Hash) ? { M: val.to_dynamodb } : val.to_dynamodb }
|
|
70
|
+
end.reduce(&:merge)
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def to_h_from_dynamodb
|
|
74
|
+
decode = -> (i) do
|
|
75
|
+
type, val = i.first
|
|
76
|
+
case type.to_sym
|
|
77
|
+
when :S then val
|
|
78
|
+
when :N then val =~ /^[0-9]+$/ ? val.to_i : val.to_f
|
|
79
|
+
when :L then val.map(&decode)
|
|
80
|
+
when :M then val.transform_values(&decode)
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
map do |key, val|
|
|
84
|
+
{ key => decode === val }
|
|
85
|
+
end.reduce(&:merge)
|
|
86
|
+
end
|
|
87
|
+
|
|
44
88
|
private def deep_transform(method, &block)
|
|
45
89
|
f = -> (x) { x.respond_to?(:"deep_#{method}") ? x.send(:"deep_#{method}", &block) : x }
|
|
46
90
|
block_given? ? send(method, &block).map do |key, val|
|
|
@@ -49,6 +93,10 @@ class Hash
|
|
|
49
93
|
end
|
|
50
94
|
end
|
|
51
95
|
|
|
96
|
+
class Numeric
|
|
97
|
+
def to_dynamodb() { N: to_s } end
|
|
98
|
+
end
|
|
99
|
+
|
|
52
100
|
class Integer
|
|
53
101
|
def weeks() days * 7 end
|
|
54
102
|
def days() hours * 24 end
|
|
@@ -82,6 +130,7 @@ class String
|
|
|
82
130
|
def snake_case() gsub(/([a-z])([A-Z])/, '\1_\2').downcase end
|
|
83
131
|
def strict_decode64() Base64.strict_decode64(self) end
|
|
84
132
|
def strict_encode64() Base64.strict_encode64(self) end
|
|
133
|
+
def to_dynamodb() { S: self } end
|
|
85
134
|
def to_h_from_json(**params) JSON.parse(self, **params) end
|
|
86
135
|
def to_h_from_form() URI.decode_www_form(self).to_h end
|
|
87
136
|
def utc() UTC.parse(self) end
|
|
@@ -90,6 +139,7 @@ end
|
|
|
90
139
|
class Symbol
|
|
91
140
|
def camel_case() to_s.camel_case.to_sym end
|
|
92
141
|
def snake_case() to_s.snake_case.to_sym end
|
|
142
|
+
def to_dynamodb() { S: to_s } end
|
|
93
143
|
end
|
|
94
144
|
|
|
95
145
|
class UTC < Time
|
data/lib/yake/version.rb
CHANGED
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: 0.
|
|
4
|
+
version: 1.0.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: 2023-05-25 00:00:00.000000000 Z
|
|
12
12
|
dependencies: []
|
|
13
13
|
description:
|
|
14
14
|
email:
|
|
@@ -48,7 +48,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
48
48
|
- !ruby/object:Gem::Version
|
|
49
49
|
version: '0'
|
|
50
50
|
requirements: []
|
|
51
|
-
rubygems_version: 3.
|
|
51
|
+
rubygems_version: 3.4.10
|
|
52
52
|
signing_key:
|
|
53
53
|
specification_version: 4
|
|
54
54
|
summary: Rake-like DSL for declaring AWS Lambda function handlers
|