maitredee 0.8.4 → 0.8.5

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: d1707193034f7c326212f91d003ce1fab80587ede4f5cc0c19bffbe3cf856d19
4
- data.tar.gz: 226103487e3a17348f9e89d2a82b195e55cd07d5f3a404a8598da71dbcb15417
3
+ metadata.gz: 147139f7cd9cb60d783797c8ae02590599fbeaff495324c44efe79d653fdcca4
4
+ data.tar.gz: a344ed87f9dfd5a1cfc39384ba507f1c9c8b3f990c727619439c6cb8d09c22f1
5
5
  SHA512:
6
- metadata.gz: f07e5f444fb7bd2869a20793fc5e06afd7d43a378a17ece9a0a5940ac8f88927e75b839992d3a13d1094b7b62c8022fedae4c70ef3260382a69095cfe5bb938a
7
- data.tar.gz: 16e90e3d7fa22cd31f12ecd84212bb365efd397f793a1b5ed4b254448f67df5fc7fed8e89d7e784292b068ecc59e842d0dd6a7fd403e877e054ca5dd64efcb32
6
+ metadata.gz: 8b79f0f12203e87479b5326aa88537a82c8fcba7ac50a2ad8925e71da4d1bcbd2fb33192cc1cbe2ac772c9b4ad0ca3a478a753efcab4ffb69cf23cede48aa99d
7
+ data.tar.gz: a9ce3f27175e860b8bb3f3840c736f05c55c10f1da62a6a4158fb743ead1aac97bd2c0d9bd97b58ecb120dcb7cb34d4e84f59d14f293abadd8bcd2a78ad01e43
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- maitredee (0.8.4)
4
+ maitredee (0.8.5)
5
5
  activesupport
6
6
  aws-sdk-sns
7
7
  aws-sdk-sqs
@@ -3,8 +3,7 @@ require "json_schemer"
3
3
  require "set"
4
4
  require "active_support/concern"
5
5
  require "active_support/core_ext/string/inflections"
6
- require "active_support/core_ext/object/json"
7
- require "active_support/json"
6
+ require "active_support/core_ext/object/blank"
8
7
  require "pathname"
9
8
  require "maitredee/publisher"
10
9
  require "maitredee/subscriber"
@@ -45,7 +44,6 @@ module Maitredee
45
44
  primary_key: nil
46
45
  )
47
46
  raise ArgumentError, "topic_name, body or schema_name is nil" if topic_name.nil? || body.nil? || schema_name.nil?
48
- body = body.as_json
49
47
  validate!(body, schema_name)
50
48
 
51
49
  message = PublisherMessage.new(
@@ -118,7 +116,7 @@ module Maitredee
118
116
  # @raise [ValidationError] if validation fails
119
117
  # @return [nil]
120
118
  def validate!(body, schema)
121
- errors = schemas[schema].validate(body.as_json)
119
+ errors = schemas[schema].validate(deep_stringify_keys(body))
122
120
  properties = errors.map do |error|
123
121
  error["data_pointer"]
124
122
  end.join(", ")
@@ -193,6 +191,21 @@ module Maitredee
193
191
  def subscriber_registry
194
192
  @subscriber_registry ||= Set.new
195
193
  end
194
+
195
+ private
196
+
197
+ def deep_stringify_keys(object)
198
+ case object
199
+ when Hash
200
+ object.each_with_object({}) do |(key, value), result|
201
+ result[key.to_s] = deep_stringify_keys(value)
202
+ end
203
+ when Array
204
+ object.map { |e| deep_stringify_keys(e) }
205
+ else
206
+ object
207
+ end
208
+ end
196
209
  end
197
210
 
198
211
  Error = Class.new(StandardError)
@@ -35,7 +35,7 @@ module Maitredee
35
35
 
36
36
  sns_client.publish(
37
37
  topic_arn: topics[message.topic_resource_name].arn,
38
- message: message.body.to_json,
38
+ message: JSON.dump(message.body),
39
39
  message_attributes: sns_message_attributes(message_attributes)
40
40
  )
41
41
  end
@@ -1,8 +1,15 @@
1
+ require "bigdecimal"
2
+
1
3
  module Maitredee
2
4
  module Adapters
3
5
  class TestAdapter < BaseAdapter
6
+ # @private
7
+ PERMITTED_TYPES = [NilClass, String, Integer, Float, BigDecimal, TrueClass, FalseClass].freeze
8
+
4
9
  # logs message published
5
10
  def publish(message)
11
+ message = message.dup
12
+ message.body = self.class.serialize_argument(message.body)
6
13
  messages << message
7
14
  end
8
15
 
@@ -19,31 +26,54 @@ module Maitredee
19
26
  def reset
20
27
  messages.clear
21
28
  end
22
- end
23
- end
24
29
 
25
- class Subscriber
26
- def self.test(
27
- body:,
28
- event_name: nil,
29
- message_id: SecureRandom.uuid,
30
- sent_at: Time.now,
31
- primary_key: nil
32
- )
33
- message = SubscriberMessage.new(
34
- topic_name: topic_name,
35
- body: body,
36
- event_name: event_name,
37
- message_id: message_id,
38
- sent_at: sent_at.to_i,
39
- primary_key: primary_key,
40
- schema_name: nil,
41
- broker_message_id: message_id,
42
- maitredee_version: Maitredee::VERSION,
43
- raw_message: nil,
44
- adapter_message: nil
45
- )
46
- process(message)
30
+ # @api private
31
+ def self.serialize_argument(argument)
32
+ case argument
33
+ when *PERMITTED_TYPES
34
+ argument
35
+ when Array
36
+ argument.each { |arg| serialize_argument(arg) }
37
+ when Hash
38
+ result = argument.each_with_object({}) do |(key, value), hash|
39
+ hash[key.to_s] = serialize_argument(value)
40
+ end
41
+ result
42
+ else
43
+ raise ArgumentError, "#{argument} is an invalid json type"
44
+ end
45
+ end
46
+
47
+ module SubscriberTesting
48
+ # simple api to test subscribers
49
+ # ```
50
+ # RecipeSubscriber.test(body: { id: 1 })
51
+ # ```
52
+ def test(
53
+ body:,
54
+ event_name: nil,
55
+ message_id: SecureRandom.uuid,
56
+ sent_at: Time.now,
57
+ primary_key: nil
58
+ )
59
+ message = SubscriberMessage.new(
60
+ topic_name: topic_name,
61
+ body: TestAdapter.serialize_argument(body),
62
+ event_name: event_name,
63
+ message_id: message_id,
64
+ sent_at: sent_at.to_i,
65
+ primary_key: primary_key,
66
+ schema_name: nil,
67
+ broker_message_id: message_id,
68
+ maitredee_version: Maitredee::VERSION,
69
+ raw_message: nil,
70
+ adapter_message: nil
71
+ )
72
+ process(message)
73
+ end
74
+
75
+ ::Maitredee::Subscriber.extend(SubscriberTesting)
76
+ end
47
77
  end
48
78
  end
49
79
  end
@@ -1,3 +1,3 @@
1
1
  module Maitredee
2
- VERSION = "0.8.4"
2
+ VERSION = "0.8.5"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: maitredee
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.4
4
+ version: 0.8.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Plated Devs