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 +4 -4
- data/Gemfile.lock +1 -1
- data/lib/maitredee.rb +17 -4
- data/lib/maitredee/adapters/sns_sqs_adapter.rb +1 -1
- data/lib/maitredee/adapters/test_adapter.rb +54 -24
- data/lib/maitredee/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 147139f7cd9cb60d783797c8ae02590599fbeaff495324c44efe79d653fdcca4
|
4
|
+
data.tar.gz: a344ed87f9dfd5a1cfc39384ba507f1c9c8b3f990c727619439c6cb8d09c22f1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8b79f0f12203e87479b5326aa88537a82c8fcba7ac50a2ad8925e71da4d1bcbd2fb33192cc1cbe2ac772c9b4ad0ca3a478a753efcab4ffb69cf23cede48aa99d
|
7
|
+
data.tar.gz: a9ce3f27175e860b8bb3f3840c736f05c55c10f1da62a6a4158fb743ead1aac97bd2c0d9bd97b58ecb120dcb7cb34d4e84f59d14f293abadd8bcd2a78ad01e43
|
data/Gemfile.lock
CHANGED
data/lib/maitredee.rb
CHANGED
@@ -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/
|
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
|
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)
|
@@ -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
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
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
|
data/lib/maitredee/version.rb
CHANGED