yake 1.0.0 → 1.1.0

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