postmark 1.8.1 → 1.9.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 +4 -4
- data/.gitignore +1 -0
- data/.travis.yml +1 -0
- data/CHANGELOG.rdoc +4 -0
- data/VERSION +1 -1
- data/lib/postmark/account_api_client.rb +41 -1
- data/lib/postmark/version.rb +1 -1
- data/spec/integration/account_api_client_spec.rb +40 -1
- data/spec/unit/postmark/account_api_client_spec.rb +216 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0db315ab0a2f924dca2620b8fc4d18f8c07445e5
|
4
|
+
data.tar.gz: 9a322908b988cd2e61126a16359ec95ad02cd391
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1ae0e033687041435061769f2d9e39cbe3de8cf1d46e5939c808aeaa69f88ad844eb9578d1d3cf8babbeae355d64223b4355edfb17c58fee4778d933c5537c4b
|
7
|
+
data.tar.gz: 7adbede1755f986942d4260cc44c4d96e2ac03aeea90804162a352184d17f75a4dbfca7348950ada41df6f468092e004cb82c8980086ad5d626dc6423ed3c4c4
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
data/CHANGELOG.rdoc
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.
|
1
|
+
1.9.0
|
@@ -61,6 +61,46 @@ module Postmark
|
|
61
61
|
end
|
62
62
|
alias_method :delete_signature, :delete_sender
|
63
63
|
|
64
|
+
def domains(options = {})
|
65
|
+
find_each('domains', 'Domains', options)
|
66
|
+
end
|
67
|
+
|
68
|
+
def get_domains(options = {})
|
69
|
+
load_batch('domains', 'Domains', options).last
|
70
|
+
end
|
71
|
+
|
72
|
+
def get_domains_count(options = {})
|
73
|
+
get_resource_count('domains', options)
|
74
|
+
end
|
75
|
+
|
76
|
+
def get_domain(id)
|
77
|
+
format_response http_client.get("domains/#{id.to_i}")
|
78
|
+
end
|
79
|
+
|
80
|
+
def create_domain(attributes = {})
|
81
|
+
data = serialize(HashHelper.to_postmark(attributes))
|
82
|
+
|
83
|
+
format_response http_client.post('domains', data)
|
84
|
+
end
|
85
|
+
|
86
|
+
def update_domain(id, attributes = {})
|
87
|
+
data = serialize(HashHelper.to_postmark(attributes))
|
88
|
+
|
89
|
+
format_response http_client.put("domains/#{id.to_i}", data)
|
90
|
+
end
|
91
|
+
|
92
|
+
def verified_domain_spf?(id)
|
93
|
+
!!http_client.post("domains/#{id.to_i}/verifyspf")['SPFVerified']
|
94
|
+
end
|
95
|
+
|
96
|
+
def rotate_domain_dkim(id)
|
97
|
+
format_response http_client.post("domains/#{id.to_i}/rotatedkim")
|
98
|
+
end
|
99
|
+
|
100
|
+
def delete_domain(id)
|
101
|
+
format_response http_client.delete("domains/#{id.to_i}")
|
102
|
+
end
|
103
|
+
|
64
104
|
def servers(options = {})
|
65
105
|
find_each('servers', 'Servers', options)
|
66
106
|
end
|
@@ -93,4 +133,4 @@ module Postmark
|
|
93
133
|
|
94
134
|
end
|
95
135
|
|
96
|
-
end
|
136
|
+
end
|
data/lib/postmark/version.rb
CHANGED
@@ -31,6 +31,7 @@ describe 'Account API client usage' do
|
|
31
31
|
expect(updated_sender[:name]).to eq('New Name')
|
32
32
|
expect(updated_sender[:id]).to eq(new_sender[:id])
|
33
33
|
|
34
|
+
|
34
35
|
# spf
|
35
36
|
expect(subject.verified_sender_spf?(new_sender[:id])).to be_true
|
36
37
|
|
@@ -46,6 +47,44 @@ describe 'Account API client usage' do
|
|
46
47
|
expect { subject.delete_sender(new_sender[:id]) }.not_to raise_error
|
47
48
|
end
|
48
49
|
|
50
|
+
it 'can be used to manage domains' do
|
51
|
+
new_domain = nil
|
52
|
+
domain_name = "#{unique_token}-gem-integration.test"
|
53
|
+
return_path = "return.#{domain_name}"
|
54
|
+
updated_return_path = "updated-return.#{domain_name}"
|
55
|
+
|
56
|
+
# create & count
|
57
|
+
new_domain = subject.create_domain(:name => domain_name,
|
58
|
+
:return_path_domain => return_path)
|
59
|
+
expect(subject.get_domains_count).to be > 0
|
60
|
+
|
61
|
+
# get
|
62
|
+
expect(subject.get_domain(new_domain[:id])[:id]).to eq(new_domain[:id])
|
63
|
+
|
64
|
+
# list
|
65
|
+
domains = subject.get_domains(:count => 50)
|
66
|
+
expect(domains.map { |d| d[:id] }).to include(new_domain[:id])
|
67
|
+
|
68
|
+
# collection
|
69
|
+
expect(subject.domains.map { |d| d[:id] }).to include(new_domain[:id])
|
70
|
+
|
71
|
+
# update
|
72
|
+
updated_domain = subject.update_domain(new_domain[:id], :return_path_domain => updated_return_path)
|
73
|
+
expect(updated_domain[:return_path_domain]).to eq(updated_return_path)
|
74
|
+
expect(updated_domain[:id]).to eq(new_domain[:id])
|
75
|
+
|
76
|
+
# spf
|
77
|
+
expect(subject.verified_domain_spf?(new_domain[:id])).to be_false
|
78
|
+
|
79
|
+
# dkim
|
80
|
+
expect { subject.rotate_domain_dkim(new_domain[:id]) }.
|
81
|
+
to raise_error(Postmark::InvalidMessageError,
|
82
|
+
'This DKIM is already being renewed.')
|
83
|
+
|
84
|
+
# delete
|
85
|
+
expect { subject.delete_domain(new_domain[:id]) }.not_to raise_error
|
86
|
+
end
|
87
|
+
|
49
88
|
it 'can be used to manage servers' do
|
50
89
|
new_server = nil
|
51
90
|
|
@@ -73,4 +112,4 @@ describe 'Account API client usage' do
|
|
73
112
|
expect { subject.delete_server(new_server[:id]) }.not_to raise_error
|
74
113
|
end
|
75
114
|
|
76
|
-
end
|
115
|
+
end
|
@@ -323,6 +323,221 @@ describe Postmark::AccountApiClient do
|
|
323
323
|
end
|
324
324
|
|
325
325
|
end
|
326
|
+
|
327
|
+
describe '#domains' do
|
328
|
+
|
329
|
+
let(:response) {
|
330
|
+
{
|
331
|
+
'TotalCount' => 10, 'Domains' => [{}, {}]
|
332
|
+
}
|
333
|
+
}
|
334
|
+
|
335
|
+
it 'returns an enumerator' do
|
336
|
+
expect(subject.domains).to be_kind_of(Enumerable)
|
337
|
+
end
|
338
|
+
|
339
|
+
it 'lazily loads domains' do
|
340
|
+
allow(subject.http_client).to receive(:get).
|
341
|
+
with('domains', an_instance_of(Hash)).and_return(response)
|
342
|
+
subject.domains.take(1000)
|
343
|
+
end
|
344
|
+
|
345
|
+
end
|
346
|
+
|
347
|
+
describe '#get_domains' do
|
348
|
+
|
349
|
+
let(:response) {
|
350
|
+
{
|
351
|
+
"TotalCount" => 1,
|
352
|
+
"Domains" => [{
|
353
|
+
"Name" => "example.com",
|
354
|
+
"ID" => 8139
|
355
|
+
}]
|
356
|
+
}
|
357
|
+
}
|
358
|
+
|
359
|
+
it 'performs a GET request to /domains endpoint' do
|
360
|
+
allow(subject.http_client).to receive(:get).
|
361
|
+
with('domains', :offset => 0, :count => 30).
|
362
|
+
and_return(response)
|
363
|
+
subject.get_domains
|
364
|
+
end
|
365
|
+
|
366
|
+
it 'formats the keys of returned list of domains' do
|
367
|
+
allow(subject.http_client).to receive(:get).and_return(response)
|
368
|
+
keys = subject.get_domains.map { |s| s.keys }.flatten
|
369
|
+
expect(keys.all? { |k| k.is_a?(Symbol) }).to be_true
|
370
|
+
end
|
371
|
+
|
372
|
+
it 'accepts offset and count options' do
|
373
|
+
allow(subject.http_client).to receive(:get).
|
374
|
+
with('domains', :offset => 10, :count => 42).
|
375
|
+
and_return(response)
|
376
|
+
subject.get_domains(:offset => 10, :count => 42)
|
377
|
+
end
|
378
|
+
|
379
|
+
end
|
380
|
+
|
381
|
+
describe '#get_domains_count' do
|
382
|
+
|
383
|
+
let(:response) { {'TotalCount' => 42} }
|
384
|
+
|
385
|
+
it 'returns a total number of domains' do
|
386
|
+
allow(subject.http_client).to receive(:get).
|
387
|
+
with('domains', an_instance_of(Hash)).and_return(response)
|
388
|
+
expect(subject.get_domains_count).to eq(42)
|
389
|
+
end
|
390
|
+
|
391
|
+
end
|
392
|
+
|
393
|
+
describe '#get_domain' do
|
394
|
+
|
395
|
+
let(:response) {
|
396
|
+
{
|
397
|
+
"Name" => "example.com",
|
398
|
+
"ID" => 8139
|
399
|
+
}
|
400
|
+
}
|
401
|
+
|
402
|
+
it 'performs a GET request to /domains/:id endpoint' do
|
403
|
+
allow(subject.http_client).to receive(:get).with("domains/42").
|
404
|
+
and_return(response)
|
405
|
+
subject.get_domain(42)
|
406
|
+
end
|
407
|
+
|
408
|
+
it 'formats the keys of returned response' do
|
409
|
+
allow(subject.http_client).to receive(:get).and_return(response)
|
410
|
+
keys = subject.get_domain(42).keys
|
411
|
+
expect(keys.all? { |k| k.is_a?(Symbol) }).to be_true
|
412
|
+
end
|
413
|
+
end
|
414
|
+
|
415
|
+
describe '#create_domain' do
|
416
|
+
|
417
|
+
let(:response) {
|
418
|
+
{
|
419
|
+
"Name" => "example.com",
|
420
|
+
"ID" => 8139
|
421
|
+
}
|
422
|
+
}
|
423
|
+
|
424
|
+
it 'performs a POST request to /domains endpoint' do
|
425
|
+
allow(subject.http_client).to receive(:post).
|
426
|
+
with("domains", an_instance_of(String)).and_return(response)
|
427
|
+
subject.create_domain(:name => 'example.com')
|
428
|
+
end
|
429
|
+
|
430
|
+
it 'converts the domain attributes names to camel case' do
|
431
|
+
allow(subject.http_client).to receive(:post).
|
432
|
+
with("domains", {'FooBar' => 'bar'}.to_json).and_return(response)
|
433
|
+
subject.create_domain(:foo_bar => 'bar')
|
434
|
+
end
|
435
|
+
|
436
|
+
it 'formats the keys of returned response' do
|
437
|
+
allow(subject.http_client).to receive(:post).and_return(response)
|
438
|
+
keys = subject.create_domain(:foo => 'bar').keys
|
439
|
+
expect(keys.all? { |k| k.is_a?(Symbol) }).to be_true
|
440
|
+
end
|
441
|
+
end
|
442
|
+
|
443
|
+
describe '#update_domain' do
|
444
|
+
|
445
|
+
let(:response) {
|
446
|
+
{
|
447
|
+
"Name" => "example.com",
|
448
|
+
"ReturnPathDomain" => "return.example.com",
|
449
|
+
"ID" => 8139
|
450
|
+
}
|
451
|
+
}
|
452
|
+
|
453
|
+
it 'performs a PUT request to /domains/:id endpoint' do
|
454
|
+
allow(subject.http_client).to receive(:put).
|
455
|
+
with('domains/42', an_instance_of(String)).and_return(response)
|
456
|
+
subject.update_domain(42, :return_path_domain => 'updated-return.example.com')
|
457
|
+
end
|
458
|
+
|
459
|
+
it 'converts the domain attributes names to camel case' do
|
460
|
+
allow(subject.http_client).to receive(:put).
|
461
|
+
with('domains/42', {'FooBar' => 'bar'}.to_json).and_return(response)
|
462
|
+
subject.update_domain(42, :foo_bar => 'bar')
|
463
|
+
end
|
464
|
+
|
465
|
+
it 'formats the keys of returned response' do
|
466
|
+
allow(subject.http_client).to receive(:put).and_return(response)
|
467
|
+
keys = subject.update_domain(42, :foo => 'bar').keys
|
468
|
+
expect(keys.all? { |k| k.is_a?(Symbol) }).to be_true
|
469
|
+
end
|
470
|
+
|
471
|
+
end
|
472
|
+
|
473
|
+
describe '#verified_domain_spf?' do
|
474
|
+
|
475
|
+
let(:response) { {"SPFVerified" => true} }
|
476
|
+
let(:false_response) { {"SPFVerified" => false} }
|
477
|
+
|
478
|
+
it 'performs a POST request to /domains/:id/verifyspf endpoint' do
|
479
|
+
allow(subject.http_client).to receive(:post).
|
480
|
+
with('domains/42/verifyspf').and_return(response)
|
481
|
+
subject.verified_domain_spf?(42)
|
482
|
+
end
|
483
|
+
|
484
|
+
it 'returns false when SPFVerified field of the response is false' do
|
485
|
+
allow(subject.http_client).to receive(:post).and_return(false_response)
|
486
|
+
expect(subject.verified_domain_spf?(42)).to be_false
|
487
|
+
end
|
488
|
+
|
489
|
+
it 'returns true when SPFVerified field of the response is true' do
|
490
|
+
allow(subject.http_client).to receive(:post).and_return(response)
|
491
|
+
expect(subject.verified_domain_spf?(42)).to be_true
|
492
|
+
end
|
493
|
+
|
494
|
+
end
|
495
|
+
|
496
|
+
describe '#rotate_domain_dkim' do
|
497
|
+
|
498
|
+
let(:response) {
|
499
|
+
{
|
500
|
+
"Name" => "example.com",
|
501
|
+
"ID" => 8139
|
502
|
+
}
|
503
|
+
}
|
504
|
+
|
505
|
+
it 'performs a POST request to /domains/:id/rotatedkim endpoint' do
|
506
|
+
allow(subject.http_client).to receive(:post).
|
507
|
+
with('domains/42/rotatedkim').and_return(response)
|
508
|
+
subject.rotate_domain_dkim(42)
|
509
|
+
end
|
510
|
+
|
511
|
+
it 'formats the keys of returned response' do
|
512
|
+
allow(subject.http_client).to receive(:post).and_return(response)
|
513
|
+
keys = subject.rotate_domain_dkim(42).keys
|
514
|
+
expect(keys.all? { |k| k.is_a?(Symbol) }).to be_true
|
515
|
+
end
|
516
|
+
|
517
|
+
end
|
518
|
+
|
519
|
+
describe '#delete_domain' do
|
520
|
+
|
521
|
+
let(:response) {
|
522
|
+
{
|
523
|
+
"ErrorCode" => 0,
|
524
|
+
"Message" => "Domain example.com removed."
|
525
|
+
}
|
526
|
+
}
|
527
|
+
|
528
|
+
it 'performs a DELETE request to /domains/:id endpoint' do
|
529
|
+
allow(subject.http_client).to receive(:delete).
|
530
|
+
with('domains/42').and_return(response)
|
531
|
+
subject.delete_domain(42)
|
532
|
+
end
|
533
|
+
|
534
|
+
it 'formats the keys of returned response' do
|
535
|
+
allow(subject.http_client).to receive(:delete).and_return(response)
|
536
|
+
keys = subject.delete_sender(42).keys
|
537
|
+
expect(keys.all? { |k| k.is_a?(Symbol) }).to be_true
|
538
|
+
end
|
539
|
+
|
540
|
+
end
|
326
541
|
|
327
542
|
describe '#servers' do
|
328
543
|
|
@@ -535,4 +750,4 @@ describe Postmark::AccountApiClient do
|
|
535
750
|
|
536
751
|
end
|
537
752
|
|
538
|
-
end
|
753
|
+
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.
|
4
|
+
version: 1.9.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Petyo Ivanov
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2016-
|
13
|
+
date: 2016-10-21 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rake
|