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.
Files changed (70) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +0 -3
  3. data/.ruby-version +1 -1
  4. data/.travis.yml +1 -0
  5. data/CHANGELOG.md +8 -0
  6. data/README.md +2 -4
  7. data/dnsimple-ruby.gemspec +3 -6
  8. data/features/README.md +9 -0
  9. data/lib/dnsimple/certificate.rb +37 -36
  10. data/lib/dnsimple/client.rb +7 -4
  11. data/lib/dnsimple/contact.rb +49 -48
  12. data/lib/dnsimple/domain.rb +79 -79
  13. data/lib/dnsimple/extended_attribute.rb +1 -1
  14. data/lib/dnsimple/record.rb +7 -12
  15. data/lib/dnsimple/service.rb +2 -2
  16. data/lib/dnsimple/template.rb +11 -17
  17. data/lib/dnsimple/template_record.rb +4 -4
  18. data/lib/dnsimple/transfer_order.rb +1 -1
  19. data/lib/dnsimple/user.rb +6 -14
  20. data/lib/dnsimple/version.rb +1 -1
  21. data/spec/ci/.dnsimple.test +1 -1
  22. data/spec/dnsimple/certificate_spec.rb +40 -30
  23. data/spec/dnsimple/client_spec.rb +9 -9
  24. data/spec/dnsimple/contact_spec.rb +34 -26
  25. data/spec/dnsimple/domain_spec.rb +21 -74
  26. data/spec/dnsimple/extended_attributes_spec.rb +42 -9
  27. data/spec/dnsimple/record_spec.rb +35 -43
  28. data/spec/dnsimple/template_spec.rb +27 -5
  29. data/spec/dnsimple/user_spec.rb +22 -14
  30. data/spec/files/certificates/index/success.http +19 -0
  31. data/spec/files/certificates/show/notfound.http +17 -0
  32. data/spec/files/certificates/show/success.http +19 -0
  33. data/spec/files/contacts/show/notfound.http +17 -0
  34. data/spec/files/contacts/show/success.http +19 -0
  35. data/spec/files/domains/show/notfound.http +17 -0
  36. data/spec/files/domains/show/success.http +19 -0
  37. data/spec/files/extended_attributes/ca.http +19 -0
  38. data/spec/files/extended_attributes/com.http +19 -0
  39. data/spec/files/extended_attributes/success.http +19 -0
  40. data/spec/files/records/index/success.http +19 -0
  41. data/spec/files/records/show/notfound.http +17 -0
  42. data/spec/files/records/show/success.http +19 -0
  43. data/spec/files/templates/show/notfound.http +17 -0
  44. data/spec/files/templates/show/success.http +19 -0
  45. data/spec/files/users/me/success.http +19 -0
  46. data/spec/spec_helper.rb +14 -17
  47. data/spec/support/helpers.rb +15 -0
  48. data/spec/support/webmock.rb +11 -0
  49. metadata +65 -84
  50. data/features/README +0 -12
  51. data/fixtures/vcr_cassettes/DNSimple_Certificate/_all.yml +0 -57
  52. data/fixtures/vcr_cassettes/DNSimple_Certificate/_purchase.yml +0 -57
  53. data/fixtures/vcr_cassettes/DNSimple_Certificate/_submit.yml +0 -57
  54. data/fixtures/vcr_cassettes/DNSimple_Contact/a_new_contact.yml +0 -50
  55. data/fixtures/vcr_cassettes/DNSimple_Contact/an_existing_contact.yml +0 -50
  56. data/fixtures/vcr_cassettes/DNSimple_Domain/_all.yml +0 -149
  57. data/fixtures/vcr_cassettes/DNSimple_Domain/applying_templates.yml +0 -246
  58. data/fixtures/vcr_cassettes/DNSimple_Domain/creating_a_new_domain.yml +0 -51
  59. data/fixtures/vcr_cassettes/DNSimple_Domain/finding_an_existing_domain/by_id.yml +0 -51
  60. data/fixtures/vcr_cassettes/DNSimple_Domain/finding_an_existing_domain/by_name.yml +0 -51
  61. data/fixtures/vcr_cassettes/DNSimple_Domain/registration/with_a_new_registrant_contact.yml +0 -52
  62. data/fixtures/vcr_cassettes/DNSimple_Domain/registration/with_an_existing_contact.yml +0 -52
  63. data/fixtures/vcr_cassettes/DNSimple_ExtendedAttribute/list_extended_attributes/for_ca.yml +0 -273
  64. data/fixtures/vcr_cassettes/DNSimple_ExtendedAttribute/list_extended_attributes/for_com.yml +0 -46
  65. data/fixtures/vcr_cassettes/DNSimple_Record/_all.yml +0 -195
  66. data/fixtures/vcr_cassettes/DNSimple_Record/creating_a_new_record.yml +0 -51
  67. data/fixtures/vcr_cassettes/DNSimple_Record/find_a_record.yml +0 -51
  68. data/fixtures/vcr_cassettes/DNSimple_Template/a_template.yml +0 -53
  69. data/fixtures/vcr_cassettes/DNSimple_User/_me.yml +0 -49
  70. data/spec/README +0 -10
@@ -1,88 +1,35 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe DNSimple::Domain do
4
- let(:domain_name) { "example.com" }
5
- let(:contact_id) { 1 }
6
4
 
7
- describe "creating a new domain" do
8
- use_vcr_cassette
9
- it "has specific attributes" do
10
- @domain = DNSimple::Domain.create(domain_name)
11
- @domain.name.should eql(domain_name)
12
- @domain.id.should_not be_nil
13
- end
14
- end
15
- describe "finding an existing domain" do
16
- context "by id" do
17
- use_vcr_cassette
18
- it "can be found" do
19
- domain = DNSimple::Domain.find(39)
20
- domain.name.should eql(domain_name)
21
- domain.id.should_not be_nil
22
- end
23
- end
24
- context "by name" do
25
- use_vcr_cassette
26
- it "can be found" do
27
- domain = DNSimple::Domain.find(domain_name)
28
- domain.name.should eql(domain_name)
29
- domain.id.should_not be_nil
30
- end
5
+ let(:contact_id) { 1001 }
6
+
7
+ describe ".find" do
8
+ before do
9
+ stub_request(:get, %r[/v1/domains/example.com]).
10
+ to_return(read_fixture("domains/show/success.http"))
31
11
  end
32
- end
33
12
 
34
- context "registration" do
13
+ it "builds the correct request" do
14
+ described_class.find("example.com")
35
15
 
36
- context "with an existing contact" do
37
- let(:domain_name) { "dnsimple-example-1321042237.com" }
38
- use_vcr_cassette
39
- it "can be registered" do
40
- domain = DNSimple::Domain.register(domain_name, {:id => contact_id})
41
- domain.name.should eql(domain_name)
42
- end
16
+ WebMock.should have_requested(:get, "https://#{CONFIG['username']}:#{CONFIG['password']}@#{CONFIG['host']}/v1/domains/example.com").
17
+ with(:headers => { 'Accept' => 'application/json' })
43
18
  end
44
-
45
- context "with a new registrant contact" do
46
- let(:domain_name) { "dnsimple-example-1321042288.com" }
47
- use_vcr_cassette
48
- it "can be registered" do
49
- registrant = {
50
- :first_name => 'John',
51
- :last_name => 'Smith',
52
- :address1 => '123 SW 1st Street',
53
- :city => 'Miami',
54
- :state_or_province => 'FL',
55
- :country => 'US',
56
- :postal_code => '33143',
57
- :phone => '321 555 1212'
58
- }
59
- domain = DNSimple::Domain.register(domain_name, registrant)
60
- domain.name.should eql(domain_name)
61
- end
62
- end
63
- end
64
19
 
65
- describe ".all" do
66
- use_vcr_cassette
67
- before do
68
- @domains = []
69
- 2.times do |n|
70
- @domains << DNSimple::Domain.create("example#{n}.com")
20
+ context "when the domain exists" do
21
+ it "returns the domain" do
22
+ result = described_class.find("example.com")
23
+
24
+ expect(result).to be_a(described_class)
25
+ expect(result.id).to eq(6)
26
+ expect(result.name).to eq("test-1383931357.com")
27
+ expect(result.created_at).to eq("2013-11-08T17:22:48Z")
28
+ expect(result.updated_at).to eq("2014-01-14T18:27:04Z")
29
+
30
+ expect(result.name_server_status).to be_nil
71
31
  end
72
32
  end
73
- it "returns a list of domains" do
74
- domains = DNSimple::Domain.all
75
- domains.map { |d| d.name }.should include(*@domains.map { |d| d.name })
76
- end
77
33
  end
78
34
 
79
- describe "applying templates" do
80
- use_vcr_cassette
81
- let(:domain) { DNSimple::Domain.find("example.com") }
82
- it "applies a named template" do
83
- DNSimple::Record.all(domain).should be_empty
84
- domain.apply("googleapps")
85
- DNSimple::Record.all(domain).should_not be_empty
86
- end
87
- end
88
35
  end
@@ -2,18 +2,51 @@ require 'spec_helper'
2
2
 
3
3
  describe DNSimple::ExtendedAttribute do
4
4
 
5
- describe "list extended attributes" do
6
- context "for com" do
7
- use_vcr_cassette
8
- it "is an empty array" do
9
- DNSimple::ExtendedAttribute.find('com').should be_empty
5
+ describe ".find" do
6
+ before do
7
+ stub_request(:get, %r[/v1/extended_attributes/com]).
8
+ to_return(read_fixture("extended_attributes/success.http"))
9
+ end
10
+
11
+ it "builds the correct request" do
12
+ described_class.find("com")
13
+
14
+ WebMock.should have_requested(:get, "https://#{CONFIG['username']}:#{CONFIG['password']}@#{CONFIG['host']}/v1/extended_attributes/com").
15
+ with(:headers => { 'Accept' => 'application/json' })
16
+ end
17
+
18
+ context "when the TLD has no attributes" do
19
+ before do
20
+ stub_request(:get, %r[/v1/extended_attributes/com]).
21
+ to_return(read_fixture("extended_attributes/com.http"))
22
+ end
23
+
24
+ it "returns an empty list" do
25
+ result = described_class.find("com")
26
+
27
+ expect(result).to eq([])
10
28
  end
11
29
  end
12
30
 
13
- context "for ca" do
14
- use_vcr_cassette
15
- it "is not empty" do
16
- DNSimple::ExtendedAttribute.find('ca').should_not be_empty
31
+ context "when the TLD has attributes" do
32
+ before do
33
+ stub_request(:get, %r[/v1/extended_attributes/ca]).
34
+ to_return(read_fixture("extended_attributes/ca.http"))
35
+ end
36
+
37
+ it "returns the attributes" do
38
+ result = described_class.find("ca")
39
+
40
+ expect(result).to be_a(Array)
41
+ expect(result).to have(5).attributes
42
+
43
+ attribute = result[0]
44
+ expect(attribute).to be_a(described_class)
45
+ expect(attribute.name).to eq("cira_legal_type")
46
+ expect(attribute.description).to eq("Legal type of registrant contact")
47
+ expect(attribute.required).to be_true
48
+ expect(attribute.options).to be_a(Array)
49
+ expect(attribute.options).to have(18).options
17
50
  end
18
51
  end
19
52
  end
@@ -2,58 +2,50 @@ require 'spec_helper'
2
2
 
3
3
  describe DNSimple::Record do
4
4
 
5
- let(:domain_name) { 'example.com' }
6
- let(:domain) { DNSimple::Domain.new(:name => domain_name) }
5
+ let(:domain) { DNSimple::Domain.new(:name => 'example.com') }
7
6
 
8
- describe "#fqdn" do
9
- it "joins the name and domain name" do
10
- record = DNSimple::Record.new(:name => 'www', :domain => domain)
11
- record.fqdn.should eq("www.#{domain_name}")
12
- end
13
- it "strips a blank name" do
14
- record = DNSimple::Record.new(:name => '', :domain => domain)
15
- record.fqdn.should eq(domain_name)
7
+
8
+ describe ".find" do
9
+ before do
10
+ stub_request(:get, %r[/v1/domains/example.com/records/2]).
11
+ to_return(read_fixture("records/show/success.http"))
16
12
  end
17
- end
18
13
 
19
- describe "creating a new record" do
20
- use_vcr_cassette
21
- it "has specific attributes" do
22
- record = DNSimple::Record.create(domain, "", "A", "1.2.3.4", :ttl => 600)
23
- record.name.should eql("")
24
- record.record_type.should eql("A")
25
- record.content.should eql("1.2.3.4")
26
- record.ttl.should eql(600)
27
- record.id.should_not be_nil
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/records/2").
18
+ with(:headers => { 'Accept' => 'application/json' })
28
19
  end
29
- end
30
- describe "find a record" do
31
- use_vcr_cassette
32
- it "can be found by id" do
33
- record = DNSimple::Record.find(domain, 70)
34
- record.name.should eql("")
35
- record.record_type.should eql("A")
36
- record.content.should eql("1.2.3.4")
37
- record.ttl.should eql(600)
38
- record.id.should_not be_nil
20
+
21
+ context "when the record exists" do
22
+ it "returns the record" do
23
+ result = described_class.find(domain, "2")
24
+
25
+ expect(result).to be_a(described_class)
26
+ expect(result.id).to eq(1495)
27
+ expect(result.domain).to be(domain)
28
+ expect(result.name).to eq("www")
29
+ expect(result.content).to eq("1.2.3.4")
30
+ expect(result.ttl).to eq(3600)
31
+ expect(result.prio).to be_nil
32
+ expect(result.record_type).to eq("A")
33
+ end
39
34
  end
40
35
  end
41
36
 
42
- describe ".all" do
43
- use_vcr_cassette
44
- before do
45
- @records = []
46
-
47
- @records << DNSimple::Record.create(domain, "", "A", "4.5.6.7")
48
- @records << DNSimple::Record.create(domain, "www", "CNAME", "testdomain.com")
49
- @records << DNSimple::Record.create(domain, "", "MX", "mail.foo.com", :prio => 10)
37
+
38
+ describe "#fqdn" do
39
+ it "joins the name and domain name" do
40
+ record = described_class.new(:name => 'www', :domain => domain)
41
+ expect(record.fqdn).to eq("www.#{domain.name}")
50
42
  end
51
-
52
- it "returns a list of records" do
53
- records = DNSimple::Record.all(domain)
54
- records.should_not be_empty
55
- records.length.should eql(@records.length)
43
+
44
+ it "strips a blank name" do
45
+ record = described_class.new(:name => '', :domain => domain)
46
+ expect(record.fqdn).to eq(domain.name)
56
47
  end
57
48
  end
49
+
58
50
  end
59
51
 
@@ -1,9 +1,31 @@
1
+ require 'spec_helper'
2
+
1
3
  describe DNSimple::Template do
2
- describe "a template" do
3
- use_vcr_cassette
4
- it "can be found by name" do
5
- template = DNSimple::Template.find('googleapps')
6
- template.id.should_not be_nil
4
+
5
+ describe ".find" do
6
+ before do
7
+ stub_request(:get, %r[/v1/templates/google-apps]).
8
+ to_return(read_fixture("templates/show/success.http"))
9
+ end
10
+
11
+ it "builds the correct request" do
12
+ described_class.find("google-apps")
13
+
14
+ WebMock.should have_requested(:get, "https://#{CONFIG['username']}:#{CONFIG['password']}@#{CONFIG['host']}/v1/templates/google-apps").
15
+ with(:headers => { 'Accept' => 'application/json' })
16
+ end
17
+
18
+ context "when the template exists" do
19
+ it "returns the template" do
20
+ result = described_class.find("google-apps")
21
+
22
+ expect(result).to be_a(described_class)
23
+ expect(result.id).to eq(63)
24
+ expect(result.name).to eq("Google Apps")
25
+ expect(result.short_name).to eq("google-apps")
26
+ expect(result.description).to eq("The Google Mail Servers and Google Apps CNAME records in a single template.")
27
+ end
7
28
  end
8
29
  end
30
+
9
31
  end
@@ -2,22 +2,30 @@ require 'spec_helper'
2
2
 
3
3
  describe DNSimple::User do
4
4
  describe ".me" do
5
- use_vcr_cassette
6
- let(:user) { DNSimple::User.me }
5
+ before do
6
+ stub_request(:get, %r[/v1/users/me]).
7
+ to_return(read_fixture("users/me/success.http"))
8
+ end
9
+
10
+ it "builds the correct request" do
11
+ described_class.me
7
12
 
8
- it "returns the current user" do
9
- user.should_not be_nil
13
+ WebMock.should have_requested(:get, "https://#{CONFIG['username']}:#{CONFIG['password']}@#{CONFIG['host']}/v1/users/me").
14
+ with(:headers => { 'Accept' => 'application/json' })
10
15
  end
11
-
12
- it "has attributes" do
13
- user.id.should_not be_nil
14
- user.created_at.should_not be_nil
15
- user.updated_at.should_not be_nil
16
- user.email.should_not be_nil
17
- user.login_count.should_not be_nil
18
- user.failed_login_count.should_not be_nil
19
- user.domain_count.should_not be_nil
20
- user.domain_limit.should_not be_nil
16
+
17
+ it "returns the user" do
18
+ result = described_class.me
19
+
20
+ expect(result).to be_a(described_class)
21
+ expect(result.id).to eq(2)
22
+ expect(result.email).to eq("example@example.com")
23
+ expect(result.domain_count).to eq(2)
24
+ expect(result.domain_limit).to eq(50)
25
+ expect(result.login_count).to eq(2)
26
+ expect(result.failed_login_count).to eq(0)
27
+ expect(result.created_at).to eq("2013-11-08T17:20:58Z")
28
+ expect(result.updated_at).to eq("2014-01-14T17:45:57Z")
21
29
  end
22
30
  end
23
31
  end
@@ -0,0 +1,19 @@
1
+ HTTP/1.1 200 OK
2
+ Server: nginx/1.5.8
3
+ Date: Tue, 14 Jan 2014 18:37:59 GMT
4
+ Content-Type: application/json; charset=utf-8
5
+ Transfer-Encoding: chunked
6
+ Connection: close
7
+ Status: 200 OK
8
+ X-DNSimple-API-Version: 1.0.0
9
+ Access-Control-Allow-Origin: *
10
+ Access-Control-Allow-Headers: Authorization,Accepts,Content-Type,X-DNSimple-Token,X-DNSimple-Domain-Token,X-CSRF-Token,x-requested-with
11
+ Access-Control-Allow-Methods: GET,POST,PUT,DELETE,OPTIONS
12
+ X-UA-Compatible: IE=Edge,chrome=1
13
+ ETag: "68c94c6eefc81fd3fc85b068a7c65029"
14
+ Cache-Control: max-age=0, private, must-revalidate
15
+ X-Request-Id: f06a7d3fc56223e9db4c14f548c43d7a
16
+ X-Runtime: 0.046608
17
+ Strict-Transport-Security: max-age=315360000
18
+
19
+ [{"certificate":{"id":4576,"domain_id":79569,"contact_id":11549,"name":"www","state":"cancelled","csr":"-----BEGIN NEW CERTIFICATE REQUEST-----\nRHr2akB4KMba6FMAsvlStnO/2ika16hNx+d3smPNsER+HA==\n-----END NEW CERTIFICATE REQUEST-----\n","ssl_certificate":null,"private_key":"-----BEGIN RSA PRIVATE KEY-----\nUeXbFi7o+nuPfRhpBFQEKwacKFc3Hnc1hH6UsnC0KY25cUif7yz38A==\n-----END RSA PRIVATE KEY-----\n","approver_email":"example@example.com","expires_on":"2014-09-17","created_at":"2013-09-17T21:54:42Z","updated_at":"2013-09-17T22:25:36Z","configured_at":"2013-09-17T22:25:01Z","available_approver_emails":null,"certificate_status":null}},{"certificate":{"id":4578,"domain_id":79569,"contact_id":11549,"name":"www","state":"cancelled","csr":"-----BEGIN NEW CERTIFICATE REQUEST-----\n2iT9OvY4afImf2ZcXnYZGrfXCx4GOxeMDpNcQm0RT3gLGw==\n-----END NEW CERTIFICATE REQUEST-----\n","ssl_certificate":null,"private_key":"-----BEGIN RSA PRIVATE KEY-----\nwDj89yRezuhCL5K1MSVohQyhyESr9Vz93p4r31DZxAmgFbCRE+g=\n-----END RSA PRIVATE KEY-----\n","approver_email":"example@example.com","expires_on":"2014-09-17","created_at":"2013-09-17T22:30:03Z","updated_at":"2013-09-17T22:30:41Z","configured_at":"2013-09-17T22:30:08Z","available_approver_emails":null,"certificate_status":null}}]
@@ -0,0 +1,17 @@
1
+ HTTP/1.1 404 Not Found
2
+ Server: nginx/1.5.8
3
+ Date: Tue, 14 Jan 2014 18:40:45 GMT
4
+ Content-Type: application/json; charset=utf-8
5
+ Transfer-Encoding: chunked
6
+ Connection: close
7
+ Status: 404 Not Found
8
+ X-DNSimple-API-Version: 1.0.0
9
+ Access-Control-Allow-Origin: *
10
+ Access-Control-Allow-Headers: Authorization,Accepts,Content-Type,X-DNSimple-Token,X-DNSimple-Domain-Token,X-CSRF-Token,x-requested-with
11
+ Access-Control-Allow-Methods: GET,POST,PUT,DELETE,OPTIONS
12
+ X-UA-Compatible: IE=Edge,chrome=1
13
+ Cache-Control: no-cache
14
+ X-Request-Id: d38b463c18b96625c085e1ca121a7ffd
15
+ X-Runtime: 0.034619
16
+
17
+ {"error":"Couldn't find Certificate with id=12 [WHERE \"certificates\".\"domain_id\" = 79569]"}
@@ -0,0 +1,19 @@
1
+ HTTP/1.1 200 OK
2
+ Server: nginx/1.5.8
3
+ Date: Tue, 14 Jan 2014 18:40:28 GMT
4
+ Content-Type: application/json; charset=utf-8
5
+ Transfer-Encoding: chunked
6
+ Connection: close
7
+ Status: 200 OK
8
+ X-DNSimple-API-Version: 1.0.0
9
+ Access-Control-Allow-Origin: *
10
+ Access-Control-Allow-Headers: Authorization,Accepts,Content-Type,X-DNSimple-Token,X-DNSimple-Domain-Token,X-CSRF-Token,x-requested-with
11
+ Access-Control-Allow-Methods: GET,POST,PUT,DELETE,OPTIONS
12
+ X-UA-Compatible: IE=Edge,chrome=1
13
+ ETag: "2b76f0ea88c7e95384506ac576d23d01"
14
+ Cache-Control: max-age=0, private, must-revalidate
15
+ X-Request-Id: aaf5915a32924165d4f45779689831fa
16
+ X-Runtime: 0.042263
17
+ Strict-Transport-Security: max-age=315360000
18
+
19
+ {"certificate":{"id":4576,"domain_id":79569,"contact_id":11549,"name":"www","state":"cancelled","csr":"-----BEGIN NEW CERTIFICATE REQUEST-----\nRHr2akB4KMba6FMAsvlStnO/2ika16hNx+d3smPNsER+HA==\n-----END NEW CERTIFICATE REQUEST-----\n","ssl_certificate":"-----BEGIN CERTIFICATE-----\nXwTkw5UCPpaVyUYcwHlvaprOe9ZbwIyEHm2AT1rW+70=\n-----END CERTIFICATE-----\n","private_key":"-----BEGIN RSA PRIVATE KEY-----\nUeXbFi7o+nuPfRhpBFQEKwacKFc3Hnc1hH6UsnC0KY25cUif7yz38A==\n-----END RSA PRIVATE KEY-----\n","approver_email":"example@example.net","expires_on":"2014-09-17","created_at":"2013-09-17T21:54:42Z","updated_at":"2013-09-17T22:25:36Z","configured_at":"2013-09-17T22:25:01Z","available_approver_emails":null,"certificate_status":null}}
@@ -0,0 +1,17 @@
1
+ HTTP/1.1 404 Not Found
2
+ Server: nginx/1.4.4
3
+ Date: Tue, 14 Jan 2014 18:03:42 GMT
4
+ Content-Type: application/json; charset=utf-8
5
+ Transfer-Encoding: chunked
6
+ Connection: close
7
+ Status: 404 Not Found
8
+ X-DNSimple-API-Version: 1.0.0
9
+ Access-Control-Allow-Origin: *
10
+ Access-Control-Allow-Headers: Authorization,Accepts,Content-Type,X-DNSimple-Token,X-DNSimple-Domain-Token,X-CSRF-Token,x-requested-with
11
+ Access-Control-Allow-Methods: GET,POST,PUT,DELETE,OPTIONS
12
+ X-UA-Compatible: IE=Edge,chrome=1
13
+ Cache-Control: no-cache
14
+ X-Request-Id: 06b719043c001f90932f8984c0b5d301
15
+ X-Runtime: 0.035035
16
+
17
+ {"error":"Couldn't find Contact with id=20 [WHERE (user_id = 2 or organization_id in (NULL))]"}
@@ -0,0 +1,19 @@
1
+ HTTP/1.1 200 OK
2
+ Server: nginx/1.4.4
3
+ Date: Tue, 14 Jan 2014 18:03:26 GMT
4
+ Content-Type: application/json; charset=utf-8
5
+ Transfer-Encoding: chunked
6
+ Connection: close
7
+ Status: 200 OK
8
+ X-DNSimple-API-Version: 1.0.0
9
+ Access-Control-Allow-Origin: *
10
+ Access-Control-Allow-Headers: Authorization,Accepts,Content-Type,X-DNSimple-Token,X-DNSimple-Domain-Token,X-CSRF-Token,x-requested-with
11
+ Access-Control-Allow-Methods: GET,POST,PUT,DELETE,OPTIONS
12
+ X-UA-Compatible: IE=Edge,chrome=1
13
+ ETag: "c8da059d309b1de77a7b400c6c8febb0"
14
+ Cache-Control: max-age=0, private, must-revalidate
15
+ X-Request-Id: 954fef00cf763b3de6211670a740ebc9
16
+ X-Runtime: 0.040477
17
+ Strict-Transport-Security: max-age=315360000
18
+
19
+ {"contact":{"id":2,"user_id":2,"label":"Default","first_name":"Simone","last_name":"Carletti","job_title":"Underwater Programmer","organization_name":"DNSimple","email_address":"example@example.com","phone":"+1 111 000000","fax":"+1 222 000000","address1":"Awesome Street","address2":"c/o Someone","city":"Rome","state_province":"RM","postal_code":"00171","country":"IT","created_at":"2013-11-08T17:23:15Z","updated_at":"2013-11-08T17:23:15Z","phone_ext":null}}