dnsimple-ruby 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/README ADDED
@@ -0,0 +1,10 @@
1
+ A Ruby wrapper for the DNSimple API.
2
+
3
+ == Credentials ==
4
+
5
+ Create a file in your home directory called .dnsimple
6
+
7
+ In this file add the following:
8
+
9
+ username: YOUR_USERNAME
10
+ password: YOUR_PASSWORD
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1.0
data/bin/dnsimple ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require File.dirname(__FILE__) + '/dnsimple'
data/bin/dnsimple.rb ADDED
@@ -0,0 +1,50 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $:.unshift(File.dirname(__FILE__) + '/../lib')
4
+ require 'dnsimple'
5
+ require 'dnsimple/cli'
6
+
7
+ cli = DNSimple::CLI.new
8
+
9
+ require 'optparse'
10
+
11
+ options = {}
12
+
13
+ global = OptionParser.new do |opts|
14
+ opts.on("-s", "--site [ARG]") do |site|
15
+ DNSimple::Client.base_uri site
16
+ end
17
+ opts.on("-u", "--username [ARG]") do |username|
18
+ DNSimple::Client.username = username
19
+ end
20
+ opts.on("-p", "--password [ARG]") do |password|
21
+ DNSimple::Client.password = password
22
+ end
23
+ end
24
+
25
+ subcommands = {
26
+ 'create' => OptionParser.new do |opts|
27
+ opts.on("--template [ARG]") do |opt|
28
+ options[:template] = opt
29
+ end
30
+ end,
31
+ 'record:create' => OptionParser.new do |opts|
32
+ opts.on("--prio [ARG]") do |prio|
33
+ options[:prio] = prio
34
+ end
35
+ end,
36
+ }
37
+
38
+ global.order!
39
+ command = ARGV.shift
40
+ if command.nil?
41
+ puts "You must specify a command"
42
+ else
43
+ options_parser = subcommands[command]
44
+ options_parser.order! if options_parser
45
+ begin
46
+ cli.execute(command, ARGV, options)
47
+ rescue DNSimple::CommandNotFound => e
48
+ puts e.message
49
+ end
50
+ end
data/lib/dnsimple.rb ADDED
@@ -0,0 +1,9 @@
1
+ require 'rubygems'
2
+ require 'pp'
3
+ require 'httparty'
4
+
5
+ require 'dnsimple/client'
6
+ require 'dnsimple/error'
7
+ require 'dnsimple/domain'
8
+ require 'dnsimple/record'
9
+ require 'dnsimple/template'
@@ -0,0 +1,60 @@
1
+ require 'yaml'
2
+
3
+ module DNSimple
4
+
5
+ class CommandNotFound < RuntimeError
6
+ end
7
+
8
+ class CLI
9
+ def initialize
10
+ credentials = load_credentials
11
+ Client.credentials(credentials['username'], credentials['password'])
12
+ end
13
+
14
+ def execute(command_name, args, options={})
15
+ command = commands[command_name]
16
+ if command
17
+ begin
18
+ command.new.execute(args, options)
19
+ rescue DNSimple::Error => e
20
+ puts "An error occurred: #{e.message}"
21
+ rescue RuntimeError => e
22
+ puts "An error occurred: #{e.message}"
23
+ end
24
+ else
25
+ raise CommandNotFound, "Unknown command: #{command_name}"
26
+ end
27
+ end
28
+
29
+ def commands
30
+ {
31
+ 'create' => DNSimple::Commands::CreateDomain,
32
+ 'describe' => DNSimple::Commands::DescribeDomain,
33
+ 'list' => DNSimple::Commands::ListDomains,
34
+ 'delete' => DNSimple::Commands::DeleteDomain,
35
+ 'clear' => DNSimple::Commands::ClearDomain,
36
+ 'apply' => DNSimple::Commands::ApplyTemplate,
37
+
38
+ 'record:create' => DNSimple::Commands::CreateRecord,
39
+ 'record:list' => DNSimple::Commands::ListRecords,
40
+ 'record:delete' => DNSimple::Commands::DeleteRecord,
41
+ }
42
+ end
43
+
44
+ private
45
+ def load_credentials
46
+ YAML.load(File.new(File.expand_path('~/.dnsimple')))
47
+ end
48
+ end
49
+ end
50
+
51
+ require 'dnsimple/commands/create_domain'
52
+ require 'dnsimple/commands/describe_domain'
53
+ require 'dnsimple/commands/list_domains'
54
+ require 'dnsimple/commands/delete_domain'
55
+ require 'dnsimple/commands/clear_domain'
56
+ require 'dnsimple/commands/apply_template'
57
+
58
+ require 'dnsimple/commands/create_record'
59
+ require 'dnsimple/commands/list_records'
60
+ require 'dnsimple/commands/delete_record'
@@ -0,0 +1,34 @@
1
+ module DNSimple
2
+ class Client
3
+ def self.debug?
4
+ @debug
5
+ end
6
+ def self.debug=(debug)
7
+ @debug = debug
8
+ end
9
+
10
+ def self.username=(username)
11
+ self.credentials[:username] = username
12
+ end
13
+
14
+ def self.password=(password)
15
+ self.credentials[:password] = password
16
+ end
17
+
18
+ def self.credentials(username=nil, password=nil)
19
+ @credentials ||= {}
20
+ @credentials = {:username => username, :password => password} if username && password
21
+ @credentials
22
+ end
23
+
24
+ def self.base_uri(site=nil)
25
+ self.base_uri = site if site
26
+ @@base_uri ||= "http://localhost:3000"
27
+ end
28
+
29
+ def self.base_uri=(base_uri)
30
+ @@base_uri = base_uri.gsub(/\/$/, '')
31
+ puts "Using #{@@base_uri}"
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,15 @@
1
+ module DNSimple
2
+ module Commands
3
+ class ApplyTemplate
4
+ def execute(args, options={})
5
+ domain_name = args.shift
6
+ template_name = args.shift
7
+
8
+ domain = Domain.find(domain_name)
9
+ domain.apply(template_name)
10
+
11
+ puts "Applied template #{template_name} to #{domain.name}"
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,16 @@
1
+ module DNSimple
2
+ module Commands
3
+ class ClearDomain
4
+ def execute(args, options={})
5
+ name = args.shift
6
+
7
+ records = Record.all(name)
8
+ records.each do |record|
9
+ record.delete
10
+ end
11
+
12
+ puts "Deleted #{records.length} records from #{name}"
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,16 @@
1
+ module DNSimple
2
+ module Commands
3
+ class CreateDomain
4
+ def execute(args, options={})
5
+ name = args.shift
6
+ domain = Domain.create(name)
7
+ puts "Created #{domain.name}"
8
+
9
+ if template = options.delete(:template)
10
+ domain.apply(template)
11
+ puts "Applied template #{template} to #{domain.name}"
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,18 @@
1
+ module DNSimple
2
+ module Commands
3
+ class CreateRecord
4
+ def execute(args, options={})
5
+ name = args.shift
6
+ record_name = args.shift
7
+ record_type = args.shift
8
+ content = args.shift
9
+ ttl = args.shift
10
+
11
+ domain = Domain.find(name)
12
+ record = Record.create(domain.name, record_name, record_type, content, :ttl => ttl, :prio => options[:prio])
13
+
14
+ puts "Created #{record.record_type} record for #{domain.name}"
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,14 @@
1
+ module DNSimple
2
+ module Commands
3
+ class DeleteDomain
4
+ def execute(args, options={})
5
+ name_or_id = args.shift
6
+
7
+ domain = Domain.find(name_or_id)
8
+ domain.delete
9
+
10
+ puts "Deleted #{domain.name}"
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,16 @@
1
+ module DNSimple
2
+ module Commands
3
+ class DeleteRecord
4
+ def execute(args, options={})
5
+ domain_name = args.shift
6
+ id = args.shift
7
+
8
+ domain = Domain.find(domain_name)
9
+ record = Record.find(domain.name, id)
10
+ record.delete
11
+
12
+ puts "Deleted #{record.id} from #{domain.name}"
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,14 @@
1
+ module DNSimple
2
+ module Commands
3
+ class DescribeDomain
4
+ def execute(args, options={})
5
+ name = args.shift
6
+ domain = Domain.find(name)
7
+ puts "Domain #{domain.name}:"
8
+ puts "\tID: #{domain.id}"
9
+ puts "\tCreated: #{domain.created_at}"
10
+ puts "\tName Server Status: #{domain.name_server_status}"
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ module DNSimple
2
+ module Commands
3
+ class ListDomains
4
+ def execute(args, options={})
5
+ puts "Base URI: #{Domain.base_uri}"
6
+ domains = Domain.all
7
+ puts "Found #{domains.length} domains:"
8
+ domains.each do |domain|
9
+ puts "\t#{domain.name}"
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,17 @@
1
+ module DNSimple
2
+ module Commands
3
+ class ListRecords
4
+ def execute(args, options={})
5
+ domain_name = args.shift
6
+ records = Record.all(domain_name)
7
+ puts "Found #{records.length} records for #{domain_name}"
8
+ records.each do |record|
9
+ extra = ["ttl:#{record.ttl}", "id:#{record.id}"]
10
+ extra << "prio:#{record.prio}" if record.record_type == "MX"
11
+ extra = "(#{extra.join(', ')})"
12
+ puts "\t#{record.name}.#{record.domain.name} (#{record.record_type})-> #{record.content} #{extra}"
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,100 @@
1
+ module DNSimple #:nodoc:
2
+ # Class representing a single domain in DNSimple.
3
+ class Domain
4
+ include HTTParty
5
+
6
+ # The domain ID in DNSimple
7
+ attr_accessor :id
8
+
9
+ # The domain name
10
+ attr_accessor :name
11
+
12
+ # When the domain was created in DNSimple
13
+ attr_accessor :created_at
14
+
15
+ # When the domain was last update in DNSimple
16
+ attr_accessor :updated_at
17
+
18
+ # The current known name server status
19
+ attr_accessor :name_server_status
20
+
21
+ #:nodoc:
22
+ def initialize(attributes)
23
+ attributes.each do |key, value|
24
+ m = "#{key}=".to_sym
25
+ self.send(m, value) if self.respond_to?(m)
26
+ end
27
+ end
28
+
29
+ # Delete the domain from DNSimple. WARNING: this cannot
30
+ # be undone.
31
+ def delete(options={})
32
+ options.merge!({:basic_auth => Client.credentials})
33
+ self.class.delete("#{Client.base_uri}/domains/#{id}.json", options)
34
+ end
35
+ alias :destroy :delete
36
+
37
+ def apply(template_name, options={})
38
+ template = DNSimple::Template.find(template_name)
39
+ options.merge!({:basic_auth => Client.credentials})
40
+ self.class.post("#{Client.base_uri}/domains/#{id}/templates/#{template.id}/apply", options)
41
+ end
42
+
43
+ # Create the domain with the given name in DNSimple. This
44
+ # method returns a Domain instance if the name is created
45
+ # and raises
46
+ def self.create(name, options={})
47
+ domain_hash = {:name => name}
48
+
49
+ options.merge!({:query => {:domain => domain_hash}})
50
+ options.merge!({:basic_auth => Client.credentials})
51
+
52
+ response = self.post("#{Client.base_uri}/domains.json", options)
53
+
54
+ pp response if Client.debug?
55
+
56
+ case response.code
57
+ when 201
58
+ return Domain.new(response["domain"])
59
+ when 401
60
+ raise RuntimeError, "Authentication failed"
61
+ else
62
+ raise DNSimple::Error.new(name, response["errors"])
63
+ end
64
+ end
65
+
66
+ def self.find(id_or_name, options={})
67
+ options.merge!({:basic_auth => Client.credentials})
68
+ response = self.get("#{Client.base_uri}/domains/#{id_or_name}.json", options)
69
+
70
+ pp response if Client.debug?
71
+
72
+ case response.code
73
+ when 200
74
+ return Domain.new(response["domain"])
75
+ when 401
76
+ raise RuntimeError, "Authentication failed"
77
+ when 404
78
+ raise RuntimeError, "Could not find domain #{id_or_name}"
79
+ else
80
+ raise DNSimple::Error.new(id_or_name, response["errors"])
81
+ end
82
+ end
83
+
84
+ def self.all(options={})
85
+ options.merge!({:basic_auth => Client.credentials})
86
+ response = self.get("#{Client.base_uri}/domains.json", options)
87
+
88
+ pp response if Client.debug?
89
+
90
+ case response.code
91
+ when 200
92
+ response.map { |r| Domain.new(r["domain"]) }
93
+ when 401
94
+ raise RuntimeError, "Authentication failed"
95
+ else
96
+ raise RuntimeError, "Error: #{response.code}"
97
+ end
98
+ end
99
+ end
100
+ end
@@ -0,0 +1,9 @@
1
+ module DNSimple
2
+ class Error < StandardError
3
+ def initialize(domain, messages)
4
+ @domain = domain
5
+ @messages = messages
6
+ super "An error occurred: #{messages.join('. ')}"
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,94 @@
1
+ module DNSimple
2
+ class Record
3
+ include HTTParty
4
+
5
+ attr_accessor :id
6
+
7
+ attr_accessor :domain
8
+
9
+ attr_accessor :name
10
+
11
+ attr_accessor :content
12
+
13
+ attr_accessor :record_type
14
+
15
+ attr_accessor :ttl
16
+
17
+ attr_accessor :prio
18
+
19
+ #:nodoc:
20
+ def initialize(attributes)
21
+ attributes.each do |key, value|
22
+ m = "#{key}=".to_sym
23
+ self.send(m, value) if self.respond_to?(m)
24
+ end
25
+ end
26
+
27
+ def delete(options={})
28
+ options.merge!({:basic_auth => Client.credentials})
29
+ self.class.delete("#{Client.base_uri}/domains/#{domain.id}/records/#{id}.json", options)
30
+ end
31
+ alias :destroy :delete
32
+
33
+ def self.create(domain_name, name, record_type, content, options={})
34
+ domain = Domain.find(domain_name)
35
+
36
+ record_hash = {:name => name, :record_type => record_type, :content => content}
37
+ record_hash[:ttl] = options.delete(:ttl) || 3600
38
+ record_hash[:prio] = options.delete(:prio) || ''
39
+
40
+ options.merge!({:query => {:record => record_hash}})
41
+ options.merge!({:basic_auth => Client.credentials})
42
+
43
+ response = self.post("#{Client.base_uri}/domains/#{domain.id}/records.json", options)
44
+
45
+ pp response if Client.debug?
46
+
47
+ case response.code
48
+ when 201
49
+ return Record.new({:domain => domain}.merge(response["record"]))
50
+ when 401
51
+ raise RuntimeError, "Authentication failed"
52
+ else
53
+ raise DNSimple::Error.new("#{name}.#{domain_name}", response["errors"])
54
+ end
55
+ end
56
+
57
+ def self.find(domain_name, id, options={})
58
+ domain = Domain.find(domain_name)
59
+ options.merge!({:basic_auth => Client.credentials})
60
+ response = self.get("#{Client.base_uri}/domains/#{domain.id}/records/#{id}", options)
61
+
62
+ pp response if Client.debug?
63
+
64
+ case response.code
65
+ when 200
66
+ return Record.new({:domain => domain}.merge(response["record"]))
67
+ when 401
68
+ raise RuntimeError, "Authentication failed"
69
+ when 404
70
+ raise RuntimeError, "Could not find record #{id} for domain #{domain_name}"
71
+ else
72
+ raise DNSimple::Error.new("#{domain_name}/#{id}", response["errors"])
73
+ end
74
+ end
75
+
76
+ def self.all(domain_name, options={})
77
+ domain = Domain.find(domain_name)
78
+ options.merge!({:basic_auth => Client.credentials})
79
+ response = self.get("#{Client.base_uri}/domains/#{domain.id}/records.json", options)
80
+
81
+ pp response if Client.debug?
82
+
83
+ case response.code
84
+ when 200
85
+ response.map { |r| Record.new({:domain => domain}.merge(r["record"])) }
86
+ when 401
87
+ raise RuntimeError, "Authentication failed"
88
+ else
89
+ raise RuntimeError, "Error: #{response.code}"
90
+ end
91
+ end
92
+
93
+ end
94
+ end
@@ -0,0 +1,43 @@
1
+ module DNSimple
2
+ class Template
3
+ include HTTParty
4
+
5
+ # The template ID in DNSimple
6
+ attr_accessor :id
7
+
8
+ # The template name
9
+ attr_accessor :name
10
+
11
+ # The template short name
12
+ attr_accessor :short_name
13
+
14
+ # The template description
15
+ attr_accessor :description
16
+
17
+ #:nodoc:
18
+ def initialize(attributes)
19
+ attributes.each do |key, value|
20
+ m = "#{key}=".to_sym
21
+ self.send(m, value) if self.respond_to?(m)
22
+ end
23
+ end
24
+
25
+ def self.find(id_or_short_name, options={})
26
+ options.merge!({:basic_auth => Client.credentials})
27
+ response = self.get("#{Client.base_uri}/templates/#{id_or_short_name}.json", options)
28
+
29
+ pp response if Client.debug?
30
+
31
+ case response.code
32
+ when 200
33
+ return Template.new(response["dns_template"])
34
+ when 401
35
+ raise RuntimeError, "Authentication failed"
36
+ when 404
37
+ raise RuntimeError, "Could not find template #{id_or_short_name}"
38
+ else
39
+ raise DNSimple::Error.new(id_or_short_name, response["errors"])
40
+ end
41
+ end
42
+ end
43
+ end
data/spec/README ADDED
@@ -0,0 +1,6 @@
1
+ Before running the DNSimple Ruby Client specifications, you must create a file in your home directory called .dnsimple.localhost and include the following:
2
+
3
+ username: YOUR_USERNAME
4
+ password: YOUR_PASSWORD
5
+
6
+
@@ -0,0 +1,57 @@
1
+ require File.join(File.dirname(__FILE__), 'spec_helper')
2
+
3
+ describe DNSimple::Domain do
4
+
5
+ describe "a new domain" do
6
+ before do
7
+ @domain = DNSimple::Domain.create("testdomain.com")
8
+ end
9
+ after do
10
+ @domain.delete
11
+ end
12
+ it "has specific attributes" do
13
+ @domain.name.should eql("testdomain.com")
14
+ @domain.id.should_not be_nil
15
+ end
16
+ it "can be found by id" do
17
+ domain = DNSimple::Domain.find(@domain.id)
18
+ domain.name.should eql("testdomain.com")
19
+ domain.id.should_not be_nil
20
+ end
21
+ it "can be found by name" do
22
+ domain = DNSimple::Domain.find(@domain.name)
23
+ domain.name.should eql("testdomain.com")
24
+ domain.id.should_not be_nil
25
+ end
26
+ end
27
+
28
+ describe ".all" do
29
+ before do
30
+ @domains = []
31
+ 3.times do |n|
32
+ @domains << DNSimple::Domain.create("testdomain#{n}.com")
33
+ end
34
+ end
35
+ after do
36
+ @domains.each { |d| d.destroy }
37
+ end
38
+ it "returns a list of domains" do
39
+ domains = DNSimple::Domain.all
40
+ domains.map { |d| d.name }.should include(*@domains.map { |d| d.name })
41
+ end
42
+ end
43
+
44
+ describe "applying templates" do
45
+ before do
46
+ @domain = DNSimple::Domain.create("testdomain.com")
47
+ end
48
+ after do
49
+ @domain.delete
50
+ end
51
+ it "applies a named template" do
52
+ DNSimple::Record.all(@domain.name).should be_empty
53
+ @domain.apply("googleapps")
54
+ DNSimple::Record.all(@domain.name).should_not be_empty
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,50 @@
1
+ require File.join(File.dirname(__FILE__), 'spec_helper')
2
+
3
+ describe DNSimple::Record do
4
+ before do
5
+ @domain = DNSimple::Domain.create("testdomain.com")
6
+ end
7
+
8
+ after do
9
+ @domain.delete
10
+ end
11
+
12
+ describe "a new record" do
13
+ before do
14
+ @record = DNSimple::Record.create(@domain.name, "", "A", "1.2.3.4", :ttl => 600)
15
+ end
16
+
17
+ it "has specific attributes" do
18
+ @record.name.should eql("")
19
+ @record.record_type.should eql("A")
20
+ @record.content.should eql("1.2.3.4")
21
+ @record.ttl.should eql(600)
22
+ @record.id.should_not be_nil
23
+ end
24
+ it "can be found by id" do
25
+ record = DNSimple::Record.find(@domain.name, @record.id)
26
+ record.name.should eql("")
27
+ record.record_type.should eql("A")
28
+ record.content.should eql("1.2.3.4")
29
+ record.ttl.should eql(600)
30
+ record.id.should_not be_nil
31
+ end
32
+ end
33
+
34
+ describe ".all" do
35
+ before do
36
+ @records = []
37
+
38
+ @records << DNSimple::Record.create("testdomain.com", "", "A", "4.5.6.7")
39
+ @records << DNSimple::Record.create("testdomain.com", "www", "CNAME", "testdomain.com")
40
+ @records << DNSimple::Record.create("testdomain.com", "", "MX", "mail.foo.com", :prio => 10)
41
+ end
42
+
43
+ it "returns a list of records" do
44
+ records = DNSimple::Record.all(@domain.name)
45
+ records.should_not be_empty
46
+ records.length.should eql(@records.length)
47
+ end
48
+ end
49
+ end
50
+
@@ -0,0 +1,7 @@
1
+ require 'lib/dnsimple'
2
+
3
+ config = YAML.load(File.new(File.expand_path('~/.dnsimple.localhost')))
4
+
5
+ DNSimple::Client.base_uri = config['site'] || "http://localhost:3000/"
6
+ DNSimple::Client.username = config['username']
7
+ DNSimple::Client.password = config['password']
@@ -0,0 +1,10 @@
1
+ require File.join(File.dirname(__FILE__), 'spec_helper')
2
+
3
+ describe DNSimple::Template do
4
+ describe "a template" do
5
+ it "can be found by name" do
6
+ template = DNSimple::Template.find('googleapps')
7
+ template.id.should_not be_nil
8
+ end
9
+ end
10
+ end
metadata ADDED
@@ -0,0 +1,90 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: dnsimple-ruby
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 1
8
+ - 0
9
+ version: 0.1.0
10
+ platform: ruby
11
+ authors:
12
+ - Anthony Eden
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2010-07-10 00:00:00 -10:00
18
+ default_executable:
19
+ dependencies: []
20
+
21
+ description: A ruby wrapper for the DNSimple API that also includes a command-line client.
22
+ email: anthony.eden@dnsimple.com
23
+ executables:
24
+ - dnsimple
25
+ - dnsimple.rb
26
+ extensions: []
27
+
28
+ extra_rdoc_files:
29
+ - README
30
+ files:
31
+ - README
32
+ - VERSION
33
+ - bin/dnsimple
34
+ - bin/dnsimple.rb
35
+ - lib/dnsimple.rb
36
+ - lib/dnsimple/cli.rb
37
+ - lib/dnsimple/client.rb
38
+ - lib/dnsimple/commands/apply_template.rb
39
+ - lib/dnsimple/commands/clear_domain.rb
40
+ - lib/dnsimple/commands/create_domain.rb
41
+ - lib/dnsimple/commands/create_record.rb
42
+ - lib/dnsimple/commands/delete_domain.rb
43
+ - lib/dnsimple/commands/delete_record.rb
44
+ - lib/dnsimple/commands/describe_domain.rb
45
+ - lib/dnsimple/commands/list_domains.rb
46
+ - lib/dnsimple/commands/list_records.rb
47
+ - lib/dnsimple/domain.rb
48
+ - lib/dnsimple/error.rb
49
+ - lib/dnsimple/record.rb
50
+ - lib/dnsimple/template.rb
51
+ - spec/README
52
+ - spec/domain_spec.rb
53
+ - spec/record_spec.rb
54
+ - spec/spec_helper.rb
55
+ - spec/template_spec.rb
56
+ has_rdoc: true
57
+ homepage: http://github.com/aetrion/dnsimple-ruby
58
+ licenses: []
59
+
60
+ post_install_message:
61
+ rdoc_options:
62
+ - --charset=UTF-8
63
+ require_paths:
64
+ - lib
65
+ required_ruby_version: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ segments:
70
+ - 0
71
+ version: "0"
72
+ required_rubygems_version: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ segments:
77
+ - 0
78
+ version: "0"
79
+ requirements: []
80
+
81
+ rubyforge_project:
82
+ rubygems_version: 1.3.6
83
+ signing_key:
84
+ specification_version: 3
85
+ summary: A ruby wrapper for the DNSimple API
86
+ test_files:
87
+ - spec/domain_spec.rb
88
+ - spec/record_spec.rb
89
+ - spec/spec_helper.rb
90
+ - spec/template_spec.rb