maitredee 0.8.4 → 0.8.5

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