dnsimple-ruby 1.4.1 → 1.5.1
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 +7 -0
- data/.gitignore +0 -3
- data/.ruby-version +1 -1
- data/.travis.yml +1 -0
- data/CHANGELOG.md +8 -0
- data/README.md +2 -4
- data/dnsimple-ruby.gemspec +3 -6
- data/features/README.md +9 -0
- data/lib/dnsimple/certificate.rb +37 -36
- data/lib/dnsimple/client.rb +7 -4
- data/lib/dnsimple/contact.rb +49 -48
- data/lib/dnsimple/domain.rb +79 -79
- data/lib/dnsimple/extended_attribute.rb +1 -1
- data/lib/dnsimple/record.rb +7 -12
- data/lib/dnsimple/service.rb +2 -2
- data/lib/dnsimple/template.rb +11 -17
- data/lib/dnsimple/template_record.rb +4 -4
- data/lib/dnsimple/transfer_order.rb +1 -1
- data/lib/dnsimple/user.rb +6 -14
- data/lib/dnsimple/version.rb +1 -1
- data/spec/ci/.dnsimple.test +1 -1
- data/spec/dnsimple/certificate_spec.rb +40 -30
- data/spec/dnsimple/client_spec.rb +9 -9
- data/spec/dnsimple/contact_spec.rb +34 -26
- data/spec/dnsimple/domain_spec.rb +21 -74
- data/spec/dnsimple/extended_attributes_spec.rb +42 -9
- data/spec/dnsimple/record_spec.rb +35 -43
- data/spec/dnsimple/template_spec.rb +27 -5
- data/spec/dnsimple/user_spec.rb +22 -14
- data/spec/files/certificates/index/success.http +19 -0
- data/spec/files/certificates/show/notfound.http +17 -0
- data/spec/files/certificates/show/success.http +19 -0
- data/spec/files/contacts/show/notfound.http +17 -0
- data/spec/files/contacts/show/success.http +19 -0
- data/spec/files/domains/show/notfound.http +17 -0
- data/spec/files/domains/show/success.http +19 -0
- data/spec/files/extended_attributes/ca.http +19 -0
- data/spec/files/extended_attributes/com.http +19 -0
- data/spec/files/extended_attributes/success.http +19 -0
- data/spec/files/records/index/success.http +19 -0
- data/spec/files/records/show/notfound.http +17 -0
- data/spec/files/records/show/success.http +19 -0
- data/spec/files/templates/show/notfound.http +17 -0
- data/spec/files/templates/show/success.http +19 -0
- data/spec/files/users/me/success.http +19 -0
- data/spec/spec_helper.rb +14 -17
- data/spec/support/helpers.rb +15 -0
- data/spec/support/webmock.rb +11 -0
- metadata +65 -84
- data/features/README +0 -12
- data/fixtures/vcr_cassettes/DNSimple_Certificate/_all.yml +0 -57
- data/fixtures/vcr_cassettes/DNSimple_Certificate/_purchase.yml +0 -57
- data/fixtures/vcr_cassettes/DNSimple_Certificate/_submit.yml +0 -57
- data/fixtures/vcr_cassettes/DNSimple_Contact/a_new_contact.yml +0 -50
- data/fixtures/vcr_cassettes/DNSimple_Contact/an_existing_contact.yml +0 -50
- data/fixtures/vcr_cassettes/DNSimple_Domain/_all.yml +0 -149
- data/fixtures/vcr_cassettes/DNSimple_Domain/applying_templates.yml +0 -246
- data/fixtures/vcr_cassettes/DNSimple_Domain/creating_a_new_domain.yml +0 -51
- data/fixtures/vcr_cassettes/DNSimple_Domain/finding_an_existing_domain/by_id.yml +0 -51
- data/fixtures/vcr_cassettes/DNSimple_Domain/finding_an_existing_domain/by_name.yml +0 -51
- data/fixtures/vcr_cassettes/DNSimple_Domain/registration/with_a_new_registrant_contact.yml +0 -52
- data/fixtures/vcr_cassettes/DNSimple_Domain/registration/with_an_existing_contact.yml +0 -52
- data/fixtures/vcr_cassettes/DNSimple_ExtendedAttribute/list_extended_attributes/for_ca.yml +0 -273
- data/fixtures/vcr_cassettes/DNSimple_ExtendedAttribute/list_extended_attributes/for_com.yml +0 -46
- data/fixtures/vcr_cassettes/DNSimple_Record/_all.yml +0 -195
- data/fixtures/vcr_cassettes/DNSimple_Record/creating_a_new_record.yml +0 -51
- data/fixtures/vcr_cassettes/DNSimple_Record/find_a_record.yml +0 -51
- data/fixtures/vcr_cassettes/DNSimple_Template/a_template.yml +0 -53
- data/fixtures/vcr_cassettes/DNSimple_User/_me.yml +0 -49
- data/spec/README +0 -10
@@ -38,7 +38,7 @@ module DNSimple
|
|
38
38
|
|
39
39
|
# Find the extended attributes for the given TLD
|
40
40
|
def self.find(tld, options={})
|
41
|
-
response = DNSimple::Client.get("extended_attributes/#{tld}", options)
|
41
|
+
response = DNSimple::Client.get("/v1/extended_attributes/#{tld}", options)
|
42
42
|
|
43
43
|
case response.code
|
44
44
|
when 200
|
data/lib/dnsimple/record.rb
CHANGED
@@ -7,18 +7,13 @@ module DNSimple
|
|
7
7
|
}
|
8
8
|
|
9
9
|
attr_accessor :id
|
10
|
-
|
11
10
|
attr_accessor :domain
|
12
|
-
|
13
11
|
attr_accessor :name
|
14
|
-
|
15
12
|
attr_accessor :content
|
16
|
-
|
17
|
-
attr_accessor :record_type
|
18
|
-
|
19
13
|
attr_accessor :ttl
|
20
|
-
|
21
14
|
attr_accessor :prio
|
15
|
+
attr_accessor :record_type
|
16
|
+
|
22
17
|
|
23
18
|
def fqdn
|
24
19
|
[name, domain.name].delete_if { |v| v !~ DNSimple::BLANK_REGEX }.join(".")
|
@@ -32,7 +27,7 @@ module DNSimple
|
|
32
27
|
|
33
28
|
options.merge!(:body => {:record => record_hash})
|
34
29
|
|
35
|
-
response = DNSimple::Client.put("domains/#{domain.id}/records/#{id}", options)
|
30
|
+
response = DNSimple::Client.put("/v1/domains/#{domain.id}/records/#{id}", options)
|
36
31
|
|
37
32
|
case response.code
|
38
33
|
when 200
|
@@ -43,7 +38,7 @@ module DNSimple
|
|
43
38
|
end
|
44
39
|
|
45
40
|
def delete(options={})
|
46
|
-
DNSimple::Client.delete("domains/#{domain.id}/records/#{id}", options)
|
41
|
+
DNSimple::Client.delete("/v1/domains/#{domain.id}/records/#{id}", options)
|
47
42
|
end
|
48
43
|
alias :destroy :delete
|
49
44
|
|
@@ -59,7 +54,7 @@ module DNSimple
|
|
59
54
|
|
60
55
|
options.merge!({:body => {:record => record_hash}})
|
61
56
|
|
62
|
-
response = DNSimple::Client.post("domains/#{domain.name}/records", options)
|
57
|
+
response = DNSimple::Client.post("/v1/domains/#{domain.name}/records", options)
|
63
58
|
|
64
59
|
case response.code
|
65
60
|
when 201
|
@@ -72,7 +67,7 @@ module DNSimple
|
|
72
67
|
end
|
73
68
|
|
74
69
|
def self.find(domain, id, options={})
|
75
|
-
response = DNSimple::Client.get("domains/#{domain.name}/records/#{id}", options)
|
70
|
+
response = DNSimple::Client.get("/v1/domains/#{domain.name}/records/#{id}", options)
|
76
71
|
|
77
72
|
case response.code
|
78
73
|
when 200
|
@@ -85,7 +80,7 @@ module DNSimple
|
|
85
80
|
end
|
86
81
|
|
87
82
|
def self.all(domain, options={})
|
88
|
-
response = DNSimple::Client.get("domains/#{domain.name}/records", options)
|
83
|
+
response = DNSimple::Client.get("/v1/domains/#{domain.name}/records", options)
|
89
84
|
|
90
85
|
case response.code
|
91
86
|
when 200
|
data/lib/dnsimple/service.rb
CHANGED
@@ -14,7 +14,7 @@ module DNSimple
|
|
14
14
|
# Find a service by its ID or short name
|
15
15
|
def self.find(id_or_short_name, options={})
|
16
16
|
id = id_or_short_name
|
17
|
-
response = DNSimple::Client.get("services/#{id}", options)
|
17
|
+
response = DNSimple::Client.get("/v1/services/#{id}", options)
|
18
18
|
|
19
19
|
case response.code
|
20
20
|
when 200
|
@@ -28,7 +28,7 @@ module DNSimple
|
|
28
28
|
|
29
29
|
# Get all of the services that can be applied to a domain
|
30
30
|
def self.all(options={})
|
31
|
-
response = DNSimple::Client.get("services", options)
|
31
|
+
response = DNSimple::Client.get("/v1/services", options)
|
32
32
|
|
33
33
|
case response.code
|
34
34
|
when 200
|
data/lib/dnsimple/template.rb
CHANGED
@@ -1,25 +1,11 @@
|
|
1
1
|
module DNSimple
|
2
|
-
|
3
2
|
class Template < Base
|
4
3
|
|
5
|
-
# The template ID in DNSimple
|
6
4
|
attr_accessor :id
|
7
|
-
|
8
|
-
# The template name
|
9
5
|
attr_accessor :name
|
10
|
-
|
11
|
-
# The template short name
|
12
6
|
attr_accessor :short_name
|
13
|
-
|
14
|
-
# The template description
|
15
7
|
attr_accessor :description
|
16
8
|
|
17
|
-
# Delete the template from DNSimple. WARNING: this cannot
|
18
|
-
# be undone.
|
19
|
-
def delete(options={})
|
20
|
-
DNSimple::Client.delete("templates/#{id}", options)
|
21
|
-
end
|
22
|
-
alias :destroy :delete
|
23
9
|
|
24
10
|
def self.create(name, short_name, description=nil, options={})
|
25
11
|
template_hash = {
|
@@ -30,7 +16,7 @@ module DNSimple
|
|
30
16
|
|
31
17
|
options.merge!(:body => {:dns_template => template_hash})
|
32
18
|
|
33
|
-
response = DNSimple::Client.post("templates", options)
|
19
|
+
response = DNSimple::Client.post("/v1/templates", options)
|
34
20
|
|
35
21
|
case response.code
|
36
22
|
when 201
|
@@ -42,7 +28,7 @@ module DNSimple
|
|
42
28
|
|
43
29
|
def self.find(id_or_short_name, options={})
|
44
30
|
id = id_or_short_name
|
45
|
-
response = DNSimple::Client.get("templates/#{id}", options)
|
31
|
+
response = DNSimple::Client.get("/v1/templates/#{id}", options)
|
46
32
|
|
47
33
|
case response.code
|
48
34
|
when 200
|
@@ -55,7 +41,7 @@ module DNSimple
|
|
55
41
|
end
|
56
42
|
|
57
43
|
def self.all(options={})
|
58
|
-
response = DNSimple::Client.get("templates", options)
|
44
|
+
response = DNSimple::Client.get("/v1/templates", options)
|
59
45
|
|
60
46
|
case response.code
|
61
47
|
when 200
|
@@ -65,5 +51,13 @@ module DNSimple
|
|
65
51
|
end
|
66
52
|
end
|
67
53
|
|
54
|
+
|
55
|
+
# Delete the template from DNSimple.
|
56
|
+
# WARNING: this cannot be undone.
|
57
|
+
def delete(options={})
|
58
|
+
DNSimple::Client.delete("/v1/templates/#{id}", options)
|
59
|
+
end
|
60
|
+
alias :destroy :delete
|
61
|
+
|
68
62
|
end
|
69
63
|
end
|
@@ -25,7 +25,7 @@ module DNSimple
|
|
25
25
|
attr_accessor :prio
|
26
26
|
|
27
27
|
def delete(options={})
|
28
|
-
DNSimple::Client.delete("templates/#{template.id}/template_records/#{id}", options)
|
28
|
+
DNSimple::Client.delete("/v1/templates/#{template.id}/template_records/#{id}", options)
|
29
29
|
end
|
30
30
|
alias :destroy :delete
|
31
31
|
|
@@ -38,7 +38,7 @@ module DNSimple
|
|
38
38
|
|
39
39
|
options.merge!({:query => {:dns_template_record => record_hash}})
|
40
40
|
|
41
|
-
response = DNSimple::Client.post("templates/#{template.id}/template_records", options)
|
41
|
+
response = DNSimple::Client.post("/v1/templates/#{template.id}/template_records", options)
|
42
42
|
|
43
43
|
case response.code
|
44
44
|
when 201
|
@@ -50,7 +50,7 @@ module DNSimple
|
|
50
50
|
|
51
51
|
def self.find(short_name, id, options={})
|
52
52
|
template = DNSimple::Template.find(short_name)
|
53
|
-
response = DNSimple::Client.get("templates/#{template.id}/template_records/#{id}", options)
|
53
|
+
response = DNSimple::Client.get("/v1/templates/#{template.id}/template_records/#{id}", options)
|
54
54
|
|
55
55
|
case response.code
|
56
56
|
when 200
|
@@ -66,7 +66,7 @@ module DNSimple
|
|
66
66
|
# given short name.
|
67
67
|
def self.all(short_name, options={})
|
68
68
|
template = DNSimple::Template.find(short_name)
|
69
|
-
response = DNSimple::Client.get("templates/#{template.id}/template_records", options)
|
69
|
+
response = DNSimple::Client.get("/v1/templates/#{template.id}/template_records", options)
|
70
70
|
|
71
71
|
case response.code
|
72
72
|
when 200
|
data/lib/dnsimple/user.rb
CHANGED
@@ -2,29 +2,21 @@ module DNSimple
|
|
2
2
|
class User < Base
|
3
3
|
|
4
4
|
attr_accessor :id
|
5
|
-
|
6
|
-
attr_accessor :created_at
|
7
|
-
|
8
|
-
attr_accessor :updated_at
|
9
|
-
|
10
5
|
attr_accessor :email
|
11
|
-
|
6
|
+
attr_accessor :domain_count
|
7
|
+
attr_accessor :domain_limit
|
12
8
|
attr_accessor :login_count
|
13
|
-
|
14
9
|
attr_accessor :failed_login_count
|
10
|
+
attr_accessor :created_at
|
11
|
+
attr_accessor :updated_at
|
15
12
|
|
16
|
-
attr_accessor :domain_count
|
17
|
-
|
18
|
-
attr_accessor :domain_limit
|
19
13
|
|
20
|
-
def self.me
|
21
|
-
response = DNSimple::Client.get("users/me"
|
14
|
+
def self.me
|
15
|
+
response = DNSimple::Client.get("/v1/users/me")
|
22
16
|
|
23
17
|
case response.code
|
24
18
|
when 200
|
25
19
|
new(response["user"])
|
26
|
-
when 404
|
27
|
-
raise RecordNotFound, "Could not find account with current credentials"
|
28
20
|
else
|
29
21
|
raise RequestError.new("Error finding account", response)
|
30
22
|
end
|
data/lib/dnsimple/version.rb
CHANGED
data/spec/ci/.dnsimple.test
CHANGED
@@ -1,45 +1,55 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe DNSimple::Certificate do
|
4
|
-
let(:domain_name) { 'example.com' }
|
5
|
-
let(:domain) { DNSimple::Domain.new(:name => domain_name) }
|
6
4
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
5
|
+
let(:domain) { DNSimple::Domain.new(:name => "example.com") }
|
6
|
+
|
7
|
+
|
8
|
+
describe ".find" do
|
9
|
+
before do
|
10
|
+
stub_request(:get, %r[/v1/domains/example.com/certificates/2]).
|
11
|
+
to_return(read_fixture("certificates/show/success.http"))
|
12
12
|
end
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
13
|
+
|
14
|
+
it "builds the correct request" do
|
15
|
+
described_class.find(domain, "2")
|
16
|
+
|
17
|
+
WebMock.should have_requested(:get, "https://#{CONFIG['username']}:#{CONFIG['password']}@#{CONFIG['host']}/v1/domains/example.com/certificates/2").
|
18
|
+
with(:headers => { 'Accept' => 'application/json' })
|
17
19
|
end
|
18
|
-
end
|
19
20
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
21
|
+
context "when the certificate exists" do
|
22
|
+
it "returns the certificate" do
|
23
|
+
result = described_class.find(domain, "2")
|
24
|
+
|
25
|
+
expect(result.id).to eq(4576)
|
26
|
+
expect(result.domain).to eq(domain)
|
27
|
+
expect(result.name).to eq("www")
|
28
|
+
expect(result.csr).to eq("-----BEGIN NEW CERTIFICATE REQUEST-----\nRHr2akB4KMba6FMAsvlStnO/2ika16hNx+d3smPNsER+HA==\n-----END NEW CERTIFICATE REQUEST-----\n")
|
29
|
+
expect(result.ssl_certificate).to eq("-----BEGIN CERTIFICATE-----\nXwTkw5UCPpaVyUYcwHlvaprOe9ZbwIyEHm2AT1rW+70=\n-----END CERTIFICATE-----\n")
|
30
|
+
expect(result.private_key).to eq("-----BEGIN RSA PRIVATE KEY-----\nUeXbFi7o+nuPfRhpBFQEKwacKFc3Hnc1hH6UsnC0KY25cUif7yz38A==\n-----END RSA PRIVATE KEY-----\n")
|
31
|
+
expect(result.approver_email).to eq("example@example.net")
|
32
|
+
expect(result.created_at).to eq("2013-09-17T21:54:42Z")
|
33
|
+
expect(result.updated_at).to eq("2013-09-17T22:25:36Z")
|
34
|
+
|
35
|
+
expect(result.available_approver_emails).to be_nil
|
36
|
+
expect(result.certificate_status).to be_nil
|
37
|
+
end
|
26
38
|
end
|
27
39
|
end
|
28
40
|
|
29
|
-
|
30
|
-
|
31
|
-
it "
|
32
|
-
|
33
|
-
|
34
|
-
|
41
|
+
|
42
|
+
describe "#fqdn" do
|
43
|
+
it "joins the name and domain name" do
|
44
|
+
certificate = described_class.new(:name => 'www')
|
45
|
+
certificate.domain = domain
|
46
|
+
expect(certificate.fqdn).to eq("www.#{domain.name}")
|
35
47
|
end
|
36
|
-
end
|
37
48
|
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
certificate.submit("admin@example.com")
|
49
|
+
it "strips blank parts from name" do
|
50
|
+
certificate = described_class.new(:name => '')
|
51
|
+
certificate.domain = domain
|
52
|
+
expect(certificate.fqdn).to eq(domain.name)
|
43
53
|
end
|
44
54
|
end
|
45
55
|
|
@@ -26,40 +26,40 @@ describe DNSimple::Client do
|
|
26
26
|
DNSimple::Client.username = 'user'
|
27
27
|
DNSimple::Client.password = 'pass'
|
28
28
|
DNSimple::Client.api_token = nil
|
29
|
-
DNSimple::Client.base_uri = 'https://
|
29
|
+
DNSimple::Client.base_uri = 'https://api.example.com/'
|
30
30
|
|
31
31
|
HTTParty.expects(method).
|
32
|
-
with('https://
|
32
|
+
with('https://api.example.com/domains',
|
33
33
|
:format => :json, :headers => {'Accept' => 'application/json'},
|
34
|
-
:basic_auth => {:username => 'user', :password => 'pass'}).
|
34
|
+
:basic_auth => { :username => 'user', :password => 'pass'}).
|
35
35
|
returns(response)
|
36
36
|
|
37
|
-
DNSimple::Client.send(method, 'domains')
|
37
|
+
DNSimple::Client.send(method, '/domains')
|
38
38
|
end
|
39
39
|
|
40
40
|
it "uses header authentication if there's an api token provided" do
|
41
41
|
DNSimple::Client.username = 'user'
|
42
42
|
DNSimple::Client.password = nil
|
43
43
|
DNSimple::Client.api_token = 'token'
|
44
|
-
DNSimple::Client.base_uri = 'https://
|
44
|
+
DNSimple::Client.base_uri = 'https://api.example.com/'
|
45
45
|
|
46
46
|
HTTParty.expects(method).
|
47
|
-
with('https://
|
47
|
+
with('https://api.example.com/domains',
|
48
48
|
:format => :json, :headers => {'Accept' => 'application/json',
|
49
49
|
'X-DNSimple-Token' => 'user:token'}).
|
50
50
|
returns(response)
|
51
51
|
|
52
|
-
DNSimple::Client.send(method, 'domains')
|
52
|
+
DNSimple::Client.send(method, '/domains')
|
53
53
|
end
|
54
54
|
|
55
55
|
it "raises an error if there's no password or api token provided" do
|
56
56
|
DNSimple::Client.username = 'user'
|
57
57
|
DNSimple::Client.password = nil
|
58
58
|
DNSimple::Client.api_token = nil
|
59
|
-
DNSimple::Client.base_uri = 'https://
|
59
|
+
DNSimple::Client.base_uri = 'https://api.example.com/'
|
60
60
|
|
61
61
|
lambda {
|
62
|
-
DNSimple::Client.send(method, 'domains')
|
62
|
+
DNSimple::Client.send(method, '/domains')
|
63
63
|
}.should raise_error(DNSimple::Error, 'A password or API token is required for all API requests.')
|
64
64
|
end
|
65
65
|
end
|
@@ -2,35 +2,43 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe DNSimple::Contact do
|
4
4
|
|
5
|
-
describe "
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
{
|
10
|
-
:first_name => 'John',
|
11
|
-
:last_name => 'Doe',
|
12
|
-
:address1 => '1 SW 1st Street',
|
13
|
-
:city => 'Miami',
|
14
|
-
:state_province => 'FL',
|
15
|
-
:postal_code => '33143',
|
16
|
-
:country => 'US',
|
17
|
-
:email_address => 'john.doe@example.com',
|
18
|
-
:phone => '305 111 2222'
|
19
|
-
}
|
20
|
-
}
|
21
|
-
it "has specific attributes" do
|
22
|
-
contact = DNSimple::Contact.create(contact_attributes)
|
23
|
-
contact.first_name.should eql(contact_attributes[:first_name])
|
24
|
-
contact.id.should_not be_nil
|
5
|
+
describe ".find" do
|
6
|
+
before do
|
7
|
+
stub_request(:get, %r[/v1/contacts/2]).
|
8
|
+
to_return(read_fixture("contacts/show/success.http"))
|
25
9
|
end
|
26
|
-
end
|
27
10
|
|
28
|
-
|
29
|
-
|
11
|
+
it "builds the correct request" do
|
12
|
+
described_class.find("2")
|
13
|
+
|
14
|
+
WebMock.should have_requested(:get, "https://#{CONFIG['username']}:#{CONFIG['password']}@#{CONFIG['host']}/v1/contacts/2").
|
15
|
+
with(:headers => { 'Accept' => 'application/json' })
|
16
|
+
end
|
17
|
+
|
18
|
+
context "when the contact exists" do
|
19
|
+
it "returns the contact" do
|
20
|
+
result = described_class.find("2")
|
21
|
+
|
22
|
+
expect(result).to be_a(described_class)
|
23
|
+
expect(result.id).to eq(2)
|
24
|
+
expect(result.first_name).to eq("Simone")
|
25
|
+
expect(result.last_name).to eq("Carletti")
|
26
|
+
expect(result.job_title).to eq("Underwater Programmer")
|
27
|
+
expect(result.organization_name).to eq("DNSimple")
|
28
|
+
expect(result.email_address).to eq("example@example.com")
|
29
|
+
expect(result.phone).to eq("+1 111 000000")
|
30
|
+
expect(result.fax).to eq("+1 222 000000")
|
31
|
+
expect(result.address1).to eq("Awesome Street")
|
32
|
+
expect(result.address2).to eq("c/o Someone")
|
33
|
+
expect(result.city).to eq("Rome")
|
34
|
+
expect(result.state_province).to eq("RM")
|
35
|
+
expect(result.postal_code).to eq("00171")
|
36
|
+
expect(result.country).to eq("IT")
|
37
|
+
expect(result.created_at).to eq("2013-11-08T17:23:15Z")
|
38
|
+
expect(result.updated_at).to eq("2013-11-08T17:23:15Z")
|
30
39
|
|
31
|
-
|
32
|
-
|
33
|
-
contact.should_not be_nil
|
40
|
+
expect(result.phone_ext).to be_nil
|
41
|
+
end
|
34
42
|
end
|
35
43
|
end
|
36
44
|
|