postmark 1.24.0 → 1.25.0

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: 36d183adb014f24f30c12f04f65d01d9a4565e46bac544fcf499f1834d98b15f
4
- data.tar.gz: 23d80a64a061b7bce98a7040a0b64b7e56611aea995894764d201e5ee71fdf69
3
+ metadata.gz: b36e7eff4dabb977637da4527446a61f1f5b1907b0d327fefee9b9068f9ee874
4
+ data.tar.gz: c65b4c7bb6b1e7529f3b202d93e0898fdb51a067ae8496a8c8ae04b0eca9eb48
5
5
  SHA512:
6
- metadata.gz: a132d891995e587fc6324cbed9626799a7919f0314b4402910593e47afb02281b25fd6b8971a20197774dd37d48c7221389047699b9cbf98a2cdfecce3e247b6
7
- data.tar.gz: 26b78de0eefb4c6055e2edee3f787ddab17c49f49fbbd4e8bf02100f85202cc46d57ff4c140617f0c1cd7c325875e602fc952c8b9a528a9ad9feed25ee9d76b1
6
+ metadata.gz: 122e2d925a0dcff98d93fbd60d11db94c5e8f443b73cf67a20eea839a07fd4955fcf0e782a1e49bc3ee9abf0593f8d513a957e6541bc6774ecfb1b1268d152d9
7
+ data.tar.gz: 7db9801b4d8cbdb47c6d8b277d03871ea40ccacb62df06e10169f61cf3368c416e41699a65cfd0f667e0889df7c88e796b0ae4fbac30832a84644644ff63bfdf
data/.circleci/config.yml CHANGED
@@ -9,11 +9,25 @@ workflows:
9
9
  - unit-tests:
10
10
  matrix:
11
11
  parameters:
12
- version: ["2", "2.1", "2.2", "2.3", "2.4", "2.5", "2.6", "2.7"]
12
+ version: [
13
+ "circleci/ruby:2",
14
+ "circleci/ruby:2.1",
15
+ "circleci/ruby:2.2",
16
+ "circleci/ruby:2.3",
17
+ "circleci/ruby:2.4",
18
+ "circleci/ruby:2.5",
19
+ "circleci/ruby:2.6",
20
+ "circleci/ruby:2.7",
21
+ "cimg/ruby:3.2"
22
+ ]
13
23
  - unit-tests-legacy:
14
24
  matrix:
15
25
  parameters:
16
- version: ["kneip/ree-1.8.7-2012.02","ruby:1.9.3","circleci/jruby:9"]
26
+ version: [
27
+ "kneip/ree-1.8.7-2012.02",
28
+ "ruby:1.9.3",
29
+ "circleci/jruby:9"
30
+ ]
17
31
 
18
32
  orbs:
19
33
  ruby: circleci/ruby@0.1.2
@@ -25,21 +39,16 @@ jobs:
25
39
  version:
26
40
  type: string
27
41
  docker:
28
- - image: circleci/ruby:<< parameters.version >>
42
+ - image: << parameters.version >>
29
43
  steps:
30
44
  - checkout
31
- - run:
32
- name: Versions
33
- command: |
34
- echo "ruby: $(ruby --version)"
45
+ - check_version
35
46
 
36
47
  - run:
37
48
  name: Install dependencies
38
49
  command: bundle install
39
50
 
40
- - run:
41
- name: Run tests
42
- command: bundle exec rake spec
51
+ - run_tests
43
52
 
44
53
  unit-tests-legacy:
45
54
  parallelism: 1
@@ -52,10 +61,7 @@ jobs:
52
61
  - image: << parameters.version >>
53
62
  steps:
54
63
  - checkout
55
- - run:
56
- name: Versions
57
- command: |
58
- echo "ruby: $(ruby --version)"
64
+ - check_version
59
65
 
60
66
  - run:
61
67
  name: Install dependencies
@@ -63,6 +69,19 @@ jobs:
63
69
  gem install bundler --version 1.17.3
64
70
  bundle install
65
71
 
72
+ - run_tests
73
+
74
+ commands:
75
+ check_version:
76
+ steps:
77
+ - run:
78
+ name: Check Ruby version
79
+ command: |
80
+ echo "ruby: $(ruby --version)"
81
+ run_tests:
82
+ steps:
66
83
  - run:
67
84
  name: Run tests
68
85
  command: bundle exec rake spec
86
+ - store_test_results:
87
+ path: test-results
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- ruby-2.7.5
1
+ ruby-3.2.2
data/CHANGELOG.rdoc CHANGED
@@ -1,5 +1,12 @@
1
1
  = Changelog
2
2
 
3
+ == 1.25.0
4
+ * Add support for https://postmarkapp.com/developer/api/data-removals-api
5
+
6
+ == 1.24.1
7
+ * Fixed support for text/calendar attachments by using content_type instead of mime_type.
8
+ * Added missing fields to Bounce
9
+
3
10
  == 1.24.0
4
11
  * Added configurable warnings when referencing deprecated classes.
5
12
 
data/Gemfile CHANGED
@@ -4,7 +4,7 @@ source "http://rubygems.org"
4
4
  gemspec
5
5
 
6
6
  group :test do
7
- gem 'rspec', '~> 3.7'
7
+ gem 'rspec', '~> 3.7', "< 3.10" # until https://github.com/rspec/rspec-support/pull/537 gets merged
8
8
  gem 'rspec-its', '~> 1.2'
9
9
  gem 'fakeweb', :git => 'https://github.com/chrisk/fakeweb.git'
10
10
  gem 'fakeweb-matcher'
data/README.md CHANGED
@@ -73,8 +73,8 @@ Refer to the [LICENSE](https://github.com/ActiveCampaign/postmark-gem/blob/main/
73
73
 
74
74
  ## Tests
75
75
 
76
- The [integration tests](https://github.com/ActiveCampaign/postmark-gem/tree/main/spec/integration) currently use a real test email address, configured via `POSTMARK_CI_RECIPIENT`. The credentials for it can be found in the internal 1password vault under `Postmark - Ruby - Client Library - Account`.
76
+ The [integration tests](https://github.com/ActiveCampaign/postmark-gem/tree/main/spec/integration) currently use a real test email address, configured via `POSTMARK_CI_RECIPIENT`.
77
77
 
78
78
  ## Copyright
79
79
 
80
- Copyright © 2022 ActiveCampaign LLC.
80
+ Copyright © 2023 ActiveCampaign LLC.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.24.0
1
+ 1.25.0
@@ -10,7 +10,9 @@ group :test do
10
10
  gem 'rspec-its', '~> 1.2'
11
11
  gem 'fakeweb', :git => 'https://github.com/chrisk/fakeweb.git'
12
12
  gem 'fakeweb-matcher'
13
+ gem 'mail', '~> 2.7.0'
13
14
  gem 'mime-types', '~> 1.25.1'
15
+ gem 'mini_mime', '< 1.1.4'
14
16
  gem 'activesupport', '~> 3.2.0'
15
17
  gem 'i18n', '~> 0.6.0'
16
18
  gem 'yajl-ruby', '~> 1.0', '< 1.4.0', :platforms => [:mingw, :mswin, :ruby]
@@ -145,6 +145,13 @@ module Postmark
145
145
  batch
146
146
  end
147
147
 
148
- end
148
+ def get_data_removal_status(id)
149
+ format_response(http_client.get("data-removals/#{id}"))
150
+ end
149
151
 
152
+ def request_data_removal(attributes = {})
153
+ data = serialize(HashHelper.to_postmark(attributes))
154
+ format_response(http_client.post('data-removals', data))
155
+ end
156
+ end
150
157
  end
@@ -3,7 +3,8 @@ require 'time'
3
3
  module Postmark
4
4
  class Bounce
5
5
 
6
- attr_reader :email, :bounced_at, :type, :description, :details, :name, :id, :server_id, :tag, :message_id, :subject
6
+ attr_reader :email, :bounced_at, :type, :description, :details, :name, :id, :server_id, :tag, :message_id, :subject,
7
+ :message_stream, :content
7
8
 
8
9
  def initialize(values = {})
9
10
  values = Postmark::HashHelper.to_ruby(values)
@@ -20,6 +21,9 @@ module Postmark
20
21
  @can_activate = values[:can_activate]
21
22
  @message_id = values[:message_id]
22
23
  @subject = values[:subject]
24
+ @server_id = values[:server_id]
25
+ @message_stream = values[:message_stream]
26
+ @content = values[:content]
23
27
  end
24
28
 
25
29
  def inactive?
@@ -171,12 +171,12 @@ module Mail
171
171
 
172
172
  def export_native_attachments
173
173
  attachments.map do |attachment|
174
- basics = {"Name" => attachment.filename,
175
- "Content" => pack_attachment_data(attachment.body.decoded),
176
- "ContentType" => attachment.mime_type}
177
- specials = attachment.inline? ? {'ContentID' => attachment.url} : {}
178
-
179
- basics.update(specials)
174
+ {
175
+ "Name" => attachment.filename,
176
+ "Content" => pack_attachment_data(attachment.body.decoded),
177
+ "ContentType" => attachment.content_type,
178
+ "ContentID" => attachment.inline? ? attachment.url : nil
179
+ }.delete_if { |_k, v| v.nil? }
180
180
  end
181
181
  end
182
182
 
@@ -1,3 +1,3 @@
1
1
  module Postmark
2
- VERSION = '1.24.0'
2
+ VERSION = '1.25.0'
3
3
  end
data/postmark.gemspec CHANGED
@@ -34,6 +34,6 @@ Gem::Specification.new do |s|
34
34
 
35
35
  s.add_dependency "json"
36
36
 
37
- s.add_development_dependency "mail", "~> 2.7.0" # https://github.com/mikel/mail/pull/1539
37
+ s.add_development_dependency "mail"
38
38
  s.add_development_dependency "rake"
39
39
  end
@@ -105,4 +105,20 @@ describe 'Account API client usage' do
105
105
  # delete
106
106
  expect { subject.delete_server(new_server[:id]) }.not_to raise_error
107
107
  end
108
+
109
+ it 'manages data removals' do
110
+ # create
111
+ data_removal_status = subject.request_data_removal(
112
+ 'requested_by' => 'sender@postmarkapp.com',
113
+ 'requested_for' => 'test@example.com',
114
+ 'notify_when_completed' => false
115
+ )
116
+
117
+ expect(data_removal_status[:status]).to eq('Pending')
118
+
119
+ # get
120
+ fetched_data_removal_status = subject.get_data_removal_status(data_removal_status[:id])
121
+
122
+ expect(fetched_data_removal_status[:id]).to eq(data_removal_status[:id])
123
+ end
108
124
  end
@@ -728,5 +728,46 @@ describe Postmark::AccountApiClient do
728
728
  end
729
729
  end
730
730
 
731
+ describe '#get_data_removal_status' do
732
+ let(:response) {
733
+ {
734
+ "ID" => 42,
735
+ "Status" => "Done"
736
+ }
737
+ }
738
+
739
+ it 'performs a GET request to /data-removals/:id endpoint' do
740
+ allow(subject.http_client).to receive(:get).
741
+ with('data-removals/42').and_return(response)
742
+ subject.get_data_removal_status(42)
743
+ end
744
+
745
+ it 'formats the keys of returned response' do
746
+ allow(subject.http_client).to receive(:get).and_return(response)
747
+ keys = subject.get_data_removal_status(42).keys
748
+ expect(keys.all? { |k| k.is_a?(Symbol) }).to be true
749
+ end
750
+ end
751
+
752
+ describe '#request_data_removal' do
753
+ let(:response) {
754
+ {
755
+ "ID" => 42,
756
+ "Status" => "Done"
757
+ }
758
+ }
759
+
760
+ it 'performs a POST request to /data-removals endpoint' do
761
+ allow(subject.http_client).to receive(:post).
762
+ with('data-removals', an_instance_of(String)).and_return(response)
763
+ subject.request_data_removal(:foo => 'bar')
764
+ end
765
+
766
+ it 'formats the keys of returned response' do
767
+ allow(subject.http_client).to receive(:post).and_return(response)
768
+ keys = subject.request_data_removal(:foo => 'bar').keys
769
+ expect(keys.all? { |k| k.is_a?(Symbol) }).to be true
770
+ end
771
+ end
731
772
  end
732
773
  end
@@ -12,6 +12,10 @@ describe Postmark::Bounce do
12
12
  :inactive => false,
13
13
  :can_activate => true,
14
14
  :id => 42,
15
+ :server_id => 12345,
16
+ :tag => "TEST_TAG",
17
+ :message_stream => "my-message-stream",
18
+ :content => "THE CONTENT",
15
19
  :subject => "Hello from our app!"} }
16
20
  let(:bounce_data_postmark) { Postmark::HashHelper.to_postmark(bounce_data) }
17
21
  let(:bounces_data) { [bounce_data, bounce_data, bounce_data] }
@@ -31,6 +35,8 @@ describe Postmark::Bounce do
31
35
  it { expect(subject).to respond_to(:tag) }
32
36
  it { expect(subject).to respond_to(:message_id) }
33
37
  it { expect(subject).to respond_to(:subject) }
38
+ it { expect(subject).to respond_to(:message_stream) }
39
+ it { expect(subject).to respond_to(:content) }
34
40
  end
35
41
 
36
42
  context "given a bounce created from bounce_data" do
@@ -55,6 +61,10 @@ describe Postmark::Bounce do
55
61
  its(:bounced_at) { is_expected.to eq Time.parse(bounce_data[:bounced_at]) }
56
62
  its(:id) { is_expected.to eq bounce_data[:id] }
57
63
  its(:subject) { is_expected.to eq bounce_data[:subject] }
64
+ its(:message_stream) { is_expected.to eq bounce_data[:message_stream] }
65
+ its(:server_id) { is_expected.to eq bounce_data[:server_id] }
66
+ its(:tag) { is_expected.to eq bounce_data[:tag] }
67
+ its(:content) { is_expected.to eq bounce_data[:content] }
58
68
 
59
69
  end
60
70
 
@@ -118,8 +118,8 @@ describe Postmark::MailMessageConverter do
118
118
  from "sheldon@bigbangtheory.com"
119
119
  to "lenard@bigbangtheory.com"
120
120
  subject "Hello!"
121
- body "Hello Sheldon!"
122
121
  add_file empty_gif_path
122
+ body "Hello Sheldon!"
123
123
  end
124
124
  end
125
125
 
@@ -219,7 +219,7 @@ describe Postmark::MailMessageConverter do
219
219
  "Subject" => "Hello!",
220
220
  "Attachments" => [{"Name" => "empty.gif",
221
221
  "Content" => encoded_empty_gif_data,
222
- "ContentType" => "image/gif"}],
222
+ "ContentType" => "image/gif; filename=empty.gif"}],
223
223
  "TextBody" => "Hello Sheldon!",
224
224
  "To" => "lenard@bigbangtheory.com"})
225
225
  end
@@ -183,7 +183,7 @@ describe Mail::Message do
183
183
  let(:exported_data) {
184
184
  {'Name' => 'face.jpeg',
185
185
  'Content' => "YmluYXJ5ZGF0YWhlcmU=\n",
186
- 'ContentType' => 'image/jpeg'}
186
+ 'ContentType' => 'image/jpeg; filename=face.jpeg'}
187
187
  }
188
188
 
189
189
  context 'given a regular attachment' do
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.24.0
4
+ version: 1.25.0
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: 2023-04-07 00:00:00.000000000 Z
16
+ date: 2023-10-11 00:00:00.000000000 Z
17
17
  dependencies:
18
18
  - !ruby/object:Gem::Dependency
19
19
  name: json
@@ -33,16 +33,16 @@ dependencies:
33
33
  name: mail
34
34
  requirement: !ruby/object:Gem::Requirement
35
35
  requirements:
36
- - - "~>"
36
+ - - ">="
37
37
  - !ruby/object:Gem::Version
38
- version: 2.7.0
38
+ version: '0'
39
39
  type: :development
40
40
  prerelease: false
41
41
  version_requirements: !ruby/object:Gem::Requirement
42
42
  requirements:
43
- - - "~>"
43
+ - - ">="
44
44
  - !ruby/object:Gem::Version
45
- version: 2.7.0
45
+ version: '0'
46
46
  - !ruby/object:Gem::Dependency
47
47
  name: rake
48
48
  requirement: !ruby/object:Gem::Requirement
@@ -153,7 +153,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
153
153
  - !ruby/object:Gem::Version
154
154
  version: 1.3.7
155
155
  requirements: []
156
- rubygems_version: 3.1.6
156
+ rubygems_version: 3.4.10
157
157
  signing_key:
158
158
  specification_version: 4
159
159
  summary: Official Postmark API wrapper.