postmark 1.21.7 → 1.21.8
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/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/CHANGELOG.rdoc +4 -0
- data/RELEASE.md +1 -0
- data/VERSION +1 -1
- data/lib/postmark/api_client.rb +7 -7
- data/lib/postmark/client.rb +6 -3
- data/lib/postmark/helpers/hash_helper.rb +36 -11
- data/lib/postmark/version.rb +1 -1
- data/spec/unit/postmark/api_client_spec.rb +32 -8
- data/spec/unit/postmark/helpers/hash_helper_spec.rb +101 -14
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bd56ea1117c73ce9a8f60d4dc81dd29f3b409efe1f362a534cb6a9b16a67dc60
|
4
|
+
data.tar.gz: 245374f9fb1752254c9c32aeff3ee0139b4b5bce4d252ce40c4f9d2627db42f7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 17ad62b39034c58dfa35b9aeb296d609b35d786ae1c752abe07df6be4bf7743ecac1a9d83675e1ed860f7e01354bdc9761ccf742fbfe60c5bdd4016fbb831d9b
|
7
|
+
data.tar.gz: a3a0792f2525acc786627d7f16b0faa453b9608397a88d270a2bdcf61da3a00549a6bfb0eb92096f1015825fe4813fa5d62c1ba5b591bc675761c65fa2f38fac
|
data/.ruby-gemset
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
postmark-gem
|
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
ruby-2.6
|
data/CHANGELOG.rdoc
CHANGED
data/RELEASE.md
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
New versions of the gem are cut by the Postmark team, this is a quick guide to ensuring a smooth release.
|
2
2
|
|
3
|
+
1. Determine the next version of the gem by following the [SemVer](https://semver.org/) guidelines.
|
3
4
|
1. Verify all builds are passing on CircleCI for your branch.
|
4
5
|
1. Merge in your branch to master.
|
5
6
|
1. Update VERSION and lib/postmark/version.rb with the new version.
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.21.
|
1
|
+
1.21.8
|
data/lib/postmark/api_client.rb
CHANGED
@@ -38,7 +38,7 @@ module Postmark
|
|
38
38
|
response, error = take_response_of { http_client.post("email", data) }
|
39
39
|
update_message(message, response)
|
40
40
|
raise error if error
|
41
|
-
format_response(response, true)
|
41
|
+
format_response(response, :compatible => true)
|
42
42
|
end
|
43
43
|
end
|
44
44
|
|
@@ -51,7 +51,7 @@ module Postmark
|
|
51
51
|
response, error = take_response_of { http_client.post("email/withTemplate", data) }
|
52
52
|
update_message(message, response)
|
53
53
|
raise error if error
|
54
|
-
format_response(response, true)
|
54
|
+
format_response(response, :compatible => true)
|
55
55
|
end
|
56
56
|
end
|
57
57
|
|
@@ -95,7 +95,7 @@ module Postmark
|
|
95
95
|
end
|
96
96
|
|
97
97
|
def delivery_stats
|
98
|
-
response = format_response(http_client.get("deliverystats"), true)
|
98
|
+
response = format_response(http_client.get("deliverystats"), :compatible => true)
|
99
99
|
|
100
100
|
if response[:bounces]
|
101
101
|
response[:bounces] = format_response(response[:bounces])
|
@@ -343,13 +343,13 @@ module Postmark
|
|
343
343
|
end
|
344
344
|
|
345
345
|
def create_message_stream(attributes = {})
|
346
|
-
data = serialize(HashHelper.to_postmark(attributes))
|
347
|
-
format_response(http_client.post('message-streams', data))
|
346
|
+
data = serialize(HashHelper.to_postmark(attributes, :deep => true))
|
347
|
+
format_response(http_client.post('message-streams', data), :deep => true)
|
348
348
|
end
|
349
349
|
|
350
350
|
def update_message_stream(id, attributes)
|
351
|
-
data = serialize(HashHelper.to_postmark(attributes))
|
352
|
-
format_response(http_client.patch("message-streams/#{id}", data))
|
351
|
+
data = serialize(HashHelper.to_postmark(attributes, :deep => true))
|
352
|
+
format_response(http_client.patch("message-streams/#{id}", data), :deep => true)
|
353
353
|
end
|
354
354
|
|
355
355
|
def archive_message_stream(id)
|
data/lib/postmark/client.rb
CHANGED
@@ -60,13 +60,16 @@ module Postmark
|
|
60
60
|
[e.full_response || {}, e]
|
61
61
|
end
|
62
62
|
|
63
|
-
def format_response(response,
|
63
|
+
def format_response(response, options = {})
|
64
64
|
return {} unless response
|
65
65
|
|
66
|
+
compatible = options.fetch(:compatible, false)
|
67
|
+
deep = options.fetch(:deep, false)
|
68
|
+
|
66
69
|
if response.kind_of? Array
|
67
|
-
response.map { |entry| Postmark::HashHelper.to_ruby(entry, compatible) }
|
70
|
+
response.map { |entry| Postmark::HashHelper.to_ruby(entry, :compatible => compatible, :deep => deep) }
|
68
71
|
else
|
69
|
-
Postmark::HashHelper.to_ruby(response, compatible)
|
72
|
+
Postmark::HashHelper.to_ruby(response, :compatible => compatible, :deep => deep)
|
70
73
|
end
|
71
74
|
end
|
72
75
|
|
@@ -3,22 +3,47 @@ module Postmark
|
|
3
3
|
|
4
4
|
extend self
|
5
5
|
|
6
|
-
def to_postmark(
|
7
|
-
|
6
|
+
def to_postmark(object, options = {})
|
7
|
+
deep = options.fetch(:deep, false)
|
8
|
+
|
9
|
+
case object
|
10
|
+
when Hash
|
11
|
+
object.reduce({}) do |m, (k, v)|
|
12
|
+
m.tap do |h|
|
13
|
+
h[Inflector.to_postmark(k)] = deep ? to_postmark(v, options) : v
|
14
|
+
end
|
15
|
+
end
|
16
|
+
when Array
|
17
|
+
deep ? object.map { |v| to_postmark(v, options) } : object
|
18
|
+
else
|
19
|
+
object
|
20
|
+
end
|
8
21
|
end
|
9
22
|
|
10
|
-
def to_ruby(
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
23
|
+
def to_ruby(object, options = {})
|
24
|
+
compatible = options.fetch(:compatible, false)
|
25
|
+
deep = options.fetch(:deep, false)
|
26
|
+
|
27
|
+
case object
|
28
|
+
when Hash
|
29
|
+
object.reduce({}) do |m, (k, v)|
|
30
|
+
m.tap do |h|
|
31
|
+
h[Inflector.to_ruby(k)] = deep ? to_ruby(v, options) : v
|
32
|
+
end
|
33
|
+
end.tap do |result|
|
34
|
+
if compatible
|
35
|
+
result.merge!(object)
|
36
|
+
enhance_with_compatibility_warning(result)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
when Array
|
40
|
+
deep ? object.map { |v| to_ruby(v, options) } : object
|
41
|
+
else
|
42
|
+
object
|
16
43
|
end
|
17
|
-
|
18
|
-
formatted
|
19
44
|
end
|
20
45
|
|
21
|
-
|
46
|
+
private
|
22
47
|
|
23
48
|
def enhance_with_compatibility_warning(hash)
|
24
49
|
def hash.[](key)
|
data/lib/postmark/version.rb
CHANGED
@@ -1073,7 +1073,10 @@ describe Postmark::ApiClient do
|
|
1073
1073
|
{
|
1074
1074
|
:name => 'My Stream',
|
1075
1075
|
:id => 'my-stream',
|
1076
|
-
:message_stream_type => 'Broadcasts'
|
1076
|
+
:message_stream_type => 'Broadcasts',
|
1077
|
+
:subscription_management_configuration => {
|
1078
|
+
:unsubscribe_handling_type => 'Custom'
|
1079
|
+
}
|
1077
1080
|
}
|
1078
1081
|
end
|
1079
1082
|
|
@@ -1083,7 +1086,10 @@ describe Postmark::ApiClient do
|
|
1083
1086
|
'Id' => 'my-stream',
|
1084
1087
|
'MessageStreamType' => 'Broadcasts',
|
1085
1088
|
'ServerId' => 222,
|
1086
|
-
'CreatedAt' => '2020-04-01T03:33:33.333-03:00'
|
1089
|
+
'CreatedAt' => '2020-04-01T03:33:33.333-03:00',
|
1090
|
+
'SubscriptionManagementConfiguration' => {
|
1091
|
+
'UnsubscribeHandlingType' => 'Custom'
|
1092
|
+
}
|
1087
1093
|
}
|
1088
1094
|
end
|
1089
1095
|
|
@@ -1097,7 +1103,10 @@ describe Postmark::ApiClient do
|
|
1097
1103
|
json_representation_of({
|
1098
1104
|
'Name' => 'My Stream',
|
1099
1105
|
'Id' => 'my-stream',
|
1100
|
-
'MessageStreamType' => 'Broadcasts'
|
1106
|
+
'MessageStreamType' => 'Broadcasts',
|
1107
|
+
'SubscriptionManagementConfiguration' => {
|
1108
|
+
'UnsubscribeHandlingType' => 'Custom'
|
1109
|
+
}
|
1101
1110
|
}))
|
1102
1111
|
subject
|
1103
1112
|
end
|
@@ -1108,7 +1117,10 @@ describe Postmark::ApiClient do
|
|
1108
1117
|
:name => 'My Stream',
|
1109
1118
|
:server_id => 222,
|
1110
1119
|
:message_stream_type => 'Broadcasts',
|
1111
|
-
:created_at => '2020-04-01T03:33:33.333-03:00'
|
1120
|
+
:created_at => '2020-04-01T03:33:33.333-03:00',
|
1121
|
+
:subscription_management_configuration => {
|
1122
|
+
:unsubscribe_handling_type => 'Custom'
|
1123
|
+
}
|
1112
1124
|
)
|
1113
1125
|
}
|
1114
1126
|
end
|
@@ -1118,7 +1130,10 @@ describe Postmark::ApiClient do
|
|
1118
1130
|
|
1119
1131
|
let(:attrs) do
|
1120
1132
|
{
|
1121
|
-
:name => 'My Stream XXX'
|
1133
|
+
:name => 'My Stream XXX',
|
1134
|
+
:subscription_management_configuration => {
|
1135
|
+
:unsubscribe_handling_type => 'Custom'
|
1136
|
+
}
|
1122
1137
|
}
|
1123
1138
|
end
|
1124
1139
|
|
@@ -1128,7 +1143,10 @@ describe Postmark::ApiClient do
|
|
1128
1143
|
'Id' => 'xxx',
|
1129
1144
|
'MessageStreamType' => 'Broadcasts',
|
1130
1145
|
'ServerId' => 222,
|
1131
|
-
'CreatedAt' => '2020-04-01T03:33:33.333-03:00'
|
1146
|
+
'CreatedAt' => '2020-04-01T03:33:33.333-03:00',
|
1147
|
+
'SubscriptionManagementConfiguration' => {
|
1148
|
+
'UnsubscribeHandlingType' => 'Custom'
|
1149
|
+
}
|
1132
1150
|
}
|
1133
1151
|
end
|
1134
1152
|
|
@@ -1140,7 +1158,10 @@ describe Postmark::ApiClient do
|
|
1140
1158
|
expect(http_client).to receive(:patch).
|
1141
1159
|
with('message-streams/xxx',
|
1142
1160
|
match_json({
|
1143
|
-
|
1161
|
+
'Name' => 'My Stream XXX',
|
1162
|
+
'SubscriptionManagementConfiguration' => {
|
1163
|
+
'UnsubscribeHandlingType' => 'Custom'
|
1164
|
+
}
|
1144
1165
|
}))
|
1145
1166
|
subject
|
1146
1167
|
end
|
@@ -1151,7 +1172,10 @@ describe Postmark::ApiClient do
|
|
1151
1172
|
:name => 'My Stream XXX',
|
1152
1173
|
:server_id => 222,
|
1153
1174
|
:message_stream_type => 'Broadcasts',
|
1154
|
-
:created_at => '2020-04-01T03:33:33.333-03:00'
|
1175
|
+
:created_at => '2020-04-01T03:33:33.333-03:00',
|
1176
|
+
:subscription_management_configuration => {
|
1177
|
+
:unsubscribe_handling_type => 'Custom'
|
1178
|
+
}
|
1155
1179
|
)
|
1156
1180
|
}
|
1157
1181
|
end
|
@@ -2,32 +2,119 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe Postmark::HashHelper do
|
4
4
|
describe ".to_postmark" do
|
5
|
-
let(:source)
|
6
|
-
|
5
|
+
let(:source) do
|
6
|
+
{
|
7
|
+
:level_one => {
|
8
|
+
:level_two => {
|
9
|
+
:level_three => [{ :array_item => 1 }]
|
10
|
+
}
|
11
|
+
}
|
12
|
+
}
|
13
|
+
end
|
14
|
+
|
15
|
+
describe 'default behaviour' do
|
16
|
+
let(:target) do
|
17
|
+
{
|
18
|
+
'LevelOne' => {
|
19
|
+
:level_two => {
|
20
|
+
:level_three => [{ :array_item => 1 }]
|
21
|
+
}
|
22
|
+
}
|
23
|
+
}
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'does not convert nested elements' do
|
27
|
+
expect(subject.to_postmark(source)).to eq(target)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
describe 'deep conversion' do
|
32
|
+
let(:target) do
|
33
|
+
{
|
34
|
+
'LevelOne' => {
|
35
|
+
'LevelTwo' => {
|
36
|
+
'LevelThree' => [{ 'ArrayItem' => 1 }]
|
37
|
+
}
|
38
|
+
}
|
39
|
+
}
|
40
|
+
end
|
7
41
|
|
8
|
-
|
9
|
-
|
42
|
+
it 'converts nested elements when requested' do
|
43
|
+
expect(subject.to_postmark(source, :deep => true)).to eq(target)
|
44
|
+
end
|
10
45
|
end
|
11
46
|
|
12
|
-
it '
|
13
|
-
expect(subject.to_postmark(
|
47
|
+
it 'leaves CamelCase keys untouched' do
|
48
|
+
expect(subject.to_postmark('ReplyTo' => 'alice@example.com')).to eq('ReplyTo' => 'alice@example.com')
|
14
49
|
end
|
15
50
|
end
|
16
51
|
|
17
52
|
describe ".to_ruby" do
|
18
|
-
let(:source)
|
19
|
-
|
53
|
+
let(:source) do
|
54
|
+
{
|
55
|
+
'LevelOne' => {
|
56
|
+
'LevelTwo' => {
|
57
|
+
'LevelThree' => [{ 'ArrayItem' => 1 }]
|
58
|
+
}
|
59
|
+
}
|
60
|
+
}
|
61
|
+
end
|
20
62
|
|
21
|
-
|
22
|
-
|
63
|
+
describe 'default behaviour' do
|
64
|
+
let(:target) do
|
65
|
+
{
|
66
|
+
:level_one => {
|
67
|
+
'LevelTwo' => {
|
68
|
+
'LevelThree' => [{ 'ArrayItem' => 1 }]
|
69
|
+
}
|
70
|
+
}
|
71
|
+
}
|
72
|
+
end
|
73
|
+
|
74
|
+
it 'does not convert nested elements' do
|
75
|
+
expect(subject.to_ruby(source)).to eq(target)
|
76
|
+
end
|
23
77
|
end
|
24
78
|
|
25
|
-
|
26
|
-
|
79
|
+
describe 'deep conversion' do
|
80
|
+
let(:target) do
|
81
|
+
{
|
82
|
+
:level_one => {
|
83
|
+
:level_two => {
|
84
|
+
:level_three => [{ :array_item => 1 }]
|
85
|
+
}
|
86
|
+
}
|
87
|
+
}
|
88
|
+
end
|
89
|
+
|
90
|
+
it 'converts nested elements when requested' do
|
91
|
+
expect(subject.to_ruby(source, :deep => true)).to eq(target)
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
describe 'compatibility mode' do
|
96
|
+
let(:target) do
|
97
|
+
{
|
98
|
+
:level_one => {
|
99
|
+
'LevelTwo' => {
|
100
|
+
'LevelThree' => [{ 'ArrayItem' => 1 }]
|
101
|
+
}
|
102
|
+
},
|
103
|
+
'LevelOne' => {
|
104
|
+
'LevelTwo' => {
|
105
|
+
'LevelThree' => [{ 'ArrayItem' => 1 }]
|
106
|
+
}
|
107
|
+
}
|
108
|
+
}
|
109
|
+
end
|
110
|
+
|
111
|
+
it 'preserves the original structure' do
|
112
|
+
expect(subject.to_ruby(source, :compatible => true)).to eq target
|
113
|
+
end
|
27
114
|
end
|
28
115
|
|
29
|
-
it '
|
30
|
-
expect(subject.to_ruby(
|
116
|
+
it 'leaves symbol keys untouched' do
|
117
|
+
expect(subject.to_ruby(:reply_to => 'alice@example.com')).to eq(:reply_to => 'alice@example.com')
|
31
118
|
end
|
32
119
|
end
|
33
120
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: postmark
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.21.
|
4
|
+
version: 1.21.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tomek Maszkowski
|
@@ -13,7 +13,7 @@ authors:
|
|
13
13
|
autorequire:
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
|
-
date: 2021-07-
|
16
|
+
date: 2021-07-29 00:00:00.000000000 Z
|
17
17
|
dependencies:
|
18
18
|
- !ruby/object:Gem::Dependency
|
19
19
|
name: json
|
@@ -71,6 +71,8 @@ files:
|
|
71
71
|
- ".gitignore"
|
72
72
|
- ".rake_tasks"
|
73
73
|
- ".rspec"
|
74
|
+
- ".ruby-gemset"
|
75
|
+
- ".ruby-version"
|
74
76
|
- CHANGELOG.rdoc
|
75
77
|
- CONTRIBUTING.md
|
76
78
|
- Gemfile
|
@@ -150,7 +152,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
150
152
|
- !ruby/object:Gem::Version
|
151
153
|
version: 1.3.7
|
152
154
|
requirements: []
|
153
|
-
rubygems_version: 3.
|
155
|
+
rubygems_version: 3.0.8
|
154
156
|
signing_key:
|
155
157
|
specification_version: 4
|
156
158
|
summary: Official Postmark API wrapper.
|