Class: Fog::DNS::DNSimple::Real

Inherits:
Object
  • Object
show all
Defined in:
lib/fog/dns/dnsimple.rb,
lib/fog/dns/requests/dnsimple/get_domain.rb,
lib/fog/dns/requests/dnsimple/get_record.rb,
lib/fog/dns/requests/dnsimple/list_domains.rb,
lib/fog/dns/requests/dnsimple/list_records.rb,
lib/fog/dns/requests/dnsimple/create_domain.rb,
lib/fog/dns/requests/dnsimple/create_record.rb,
lib/fog/dns/requests/dnsimple/delete_domain.rb,
lib/fog/dns/requests/dnsimple/delete_record.rb,
lib/fog/dns/requests/dnsimple/update_record.rb

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ Real

Returns a new instance of Real.



54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/fog/dns/dnsimple.rb', line 54

def initialize(options={})
  require 'multi_json'

  @dnsimple_email = options[:dnsimple_email]
  @dnsimple_password  = options[:dnsimple_password]
  if options[:dnsimple_url]
    uri = URI.parse(options[:dnsimple_url])
    options[:host]    = uri.host
    options[:port]    = uri.port
    options[:scheme]  = uri.scheme
  end
  @host   = options[:host]    || "dnsimple.com"
  @port   = options[:port]    || 443
  @scheme = options[:scheme]  || 'https'
  @connection = Fog::Connection.new("#{@scheme}://#{@host}:#{@port}", options[:persistent])
end

Instance Method Details

#create_domain(name) ⇒ Object

Create a single domain in DNSimple in your account.

Parameters

  • name<~String> - domain name to host (ie example.com)

Returns

  • response<~Excon::Response>:

    • body<~Hash>:

      • ‘name’<~String>



14
15
16
17
18
19
20
21
22
# File 'lib/fog/dns/requests/dnsimple/create_domain.rb', line 14

def create_domain(name)
  body = { "domain" => { "name" => name } }
  request(
          :body     => MultiJson.encode(body),
          :expects  => 201,
          :method   => 'POST',
          :path     => '/domains'
          )
end

#create_record(domain, name, type, content, options = {}) ⇒ Object

Create a new host in the specified zone

Parameters

  • domain<~String>

  • name<~String>

  • type<~String>

  • content<~String>

  • options<~Hash> - optional

    • priority<~Integer>

    • ttl<~Integer>

Returns

  • response<~Excon::Response>:

    • body<~Hash>

      • name<~String>

      • ttl<~Integer>

      • created_at<~String>

      • special_type<~String>

      • updated_at<~String>

      • domain_id<~Integer>

      • id<~Integer>

      • content<~String>

      • record_type<~String>

      • prio<~Integer>



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/fog/dns/requests/dnsimple/create_record.rb', line 29

def create_record(domain, name, type, content, options = {})

  body = {
    "record" => {
      "name" => name,
      "record_type" => type,
      "content" => content } }

  body["record"].merge!(options)

  request( :body     => MultiJson.encode(body),
           :expects  => 201,
           :method   => 'POST',
           :path     => "/domains/#{domain}/records" )
end

#delete_domain(name) ⇒ Object

Delete the given domain from your account. You may use either the domain ID or the domain name.

Please note that for domains which are registered with DNSimple this will not delete the domain from the registry.

Parameters

  • name<~String> - domain name or numeric ID



15
16
17
18
19
20
21
# File 'lib/fog/dns/requests/dnsimple/delete_domain.rb', line 15

def delete_domain(name)
  request(
          :expects  => 200,
          :method   => 'DELETE',
          :path     => "/domains/#{name}"
          )
end

#delete_record(domain, record_id) ⇒ Object

Delete the record with the given ID for the given domain.

Parameters

  • domain<~String>

  • record_id<~String>



11
12
13
14
15
16
# File 'lib/fog/dns/requests/dnsimple/delete_record.rb', line 11

def delete_record(domain, record_id)

  request( :expects  => 200,
           :method   => "DELETE",
           :path     => "/domains/#{domain}/records/#{record_id}" )
end

#get_domain(id) ⇒ Object

Get the details for a specific domain in your account. You may pass either the domain numeric ID or the domain name itself.

Parameters

  • id<~String> - domain name or numeric ID

Returns

  • response<~Excon::Response>:

    • body<~Hash>:

      • ‘domain’<~Hash>

        • ‘name’<~String>

        • ‘expires_at’<~String>

        • ‘created_at’<~String>

        • ‘registration_status’<~String>

        • ‘updated_at’<~String>

        • ‘registrant_id’<~Integer>

        • ‘id’<~Integer>

        • ‘user_id’<~Integer>

        • ‘name_server_status’<~String>



26
27
28
29
30
31
32
# File 'lib/fog/dns/requests/dnsimple/get_domain.rb', line 26

def get_domain(id)
  request(
          :expects  => 200,
          :method   => "GET",
          :path     => "/domains/#{id}"
          )
end

#get_record(domain, record_id) ⇒ Object

Gets record from given domain.

Parameters

  • domain<~String>

  • record_id<~String>

Returns

  • response<~Excon::Response>:

    • record<~Hash>

      • name<~String>

      • ttl<~Integer>

      • created_at<~String>

      • special_type<~String>

      • updated_at<~String>

      • domain_id<~Integer>

      • id<~Integer>

      • content<~String>

      • record_type<~String>

      • prio<~Integer>



24
25
26
27
28
29
# File 'lib/fog/dns/requests/dnsimple/get_record.rb', line 24

def get_record(domain, record_id)

  request( :expects  => 200,
           :method   => "GET",
           :path     => "/domains/#{domain}/records/#{record_id}" )
end

#list_domainsObject

Get the details for a specific domain in your account. You may pass either the domain numeric ID or the domain name itself.

Parameters

  • id<~String> - domain name or numeric ID

Returns

  • response<~Excon::Response>:

    • body<~Hash>:

      • ‘domains’<~Array>

        • ‘name’<~String>

        • ‘expires_at’<~String>

        • ‘created_at’<~String>

        • ‘registration_status’<~String>

        • ‘updated_at’<~String>

        • ‘registrant_id’<~Integer>

        • ‘id’<~Integer>

        • ‘user_id’<~Integer>

        • ‘name_server_status’<~String>



24
25
26
27
28
29
30
# File 'lib/fog/dns/requests/dnsimple/list_domains.rb', line 24

def list_domains
  request(
          :expects  => 200,
          :method   => 'GET',
          :path     => '/domains'
          )
end

#list_records(domain) ⇒ Object

Get the list of records for the specific domain.

Parameters

  • domain<~String>

Returns

  • response<~Excon::Response>:

    • records<Array~>

      • name<~String>

      • ttl<~Integer>

      • created_at<~String>

      • special_type<~String>

      • updated_at<~String>

      • domain_id<~Integer>

      • id<~Integer>

      • content<~String>

      • record_type<~String>

      • prio<~Integer>



23
24
25
26
27
# File 'lib/fog/dns/requests/dnsimple/list_records.rb', line 23

def list_records(domain)
  request( :expects  => 200,
           :method   => "GET",
           :path     => "/domains/#{domain}/records" )
end

#reloadObject



71
72
73
# File 'lib/fog/dns/dnsimple.rb', line 71

def reload
  @connection.reset
end

#request(params) ⇒ Object



75
76
77
78
79
80
81
82
83
84
85
86
87
88
# File 'lib/fog/dns/dnsimple.rb', line 75

def request(params)
  params[:headers] ||= {}
  key = "#{@dnsimple_email}:#{@dnsimple_password}"
  params[:headers].merge!({ "Authorization" => "Basic " + Base64.encode64(key).chomp,
                            "Accept" => "application/json",
                            "Content-Type" => "application/json" })

  response = @connection.request(params.merge!({:host => @host}))

  unless response.body.empty?
    response.body = MultiJson.decode(response.body)
  end
  response
end

#update_record(domain, record_id, options) ⇒ Object

Update the given record for the given domain.

Parameters

  • domain<~String>

  • record_id<~String>

  • options<~Hash> - optional

    • type<~String>

    • content<~String>

    • priority<~Integer>

    • ttl<~Integer>

Returns

  • response<~Excon::Response>:

    • record<~Hash>

      • name<~String>

      • ttl<~Integer>

      • created_at<~String>

      • special_type<~String>

      • updated_at<~String>

      • domain_id<~Integer>

      • id<~Integer>

      • content<~String>

      • record_type<~String>

      • prio<~Integer>



29
30
31
32
33
34
35
36
37
# File 'lib/fog/dns/requests/dnsimple/update_record.rb', line 29

def update_record(domain, record_id, options)

  body = { "record" => options }

  request( :body     => MultiJson.encode(body),
           :expects  => 200,
           :method   => "PUT",
           :path     => "/domains/#{domain}/records/#{record_id}" )
end