dnsimple-ruby 1.4.1 → 1.5.1

Sign up to get free protection for your applications and to get access to all the features.
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}}