dnsimple-ruby 0.8.0 → 0.8.2

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -25,6 +25,7 @@ begin
25
25
  gemspec.homepage = "http://github.com/aetrion/dnsimple-ruby"
26
26
  gemspec.authors = ["Anthony Eden"]
27
27
  gemspec.add_dependency "httparty"
28
+ gemspec.executables = 'dnsimple'
28
29
  end
29
30
  rescue LoadError
30
31
  puts "Jeweler not available. Install it with: gem install jeweler"
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.8.0
1
+ 0.8.2
data/bin/dnsimple.rb CHANGED
@@ -41,13 +41,16 @@ create [--template=short_name] domain.com # Add the given doma
41
41
  register [--template=short_name] domain.com registrant_id \ # Register the given domain with DNSimple
42
42
  [[name:value] [name:value]] # name:value pairs can be given for extended attributes
43
43
  transfer domain.com registrant_id [authinfo] \ # Transfer the given domain into DNSimple
44
- [[name:value] [name:value]] # name:value pairs can be given for extended attributes
44
+ [[name:value] [name:value] ...] # name:value pairs can be given for extended attributes
45
45
  delete domain.com # Delete the given domain
46
46
  apply domain.com template_short_name # Apply a template to the domain
47
47
 
48
+ record:describe domain.com record_id # Describe the given record
48
49
  record:create [--prio=priority] domain.com name type \\
49
50
  content [ttl] # Create the DNS record on the domain
50
51
  record:list domain.com # List all records for the domain
52
+ record:update domain.com record_id \ # Update a specific record
53
+ [[name:value] [name:value] ...] # name:value pairs are given for updateable attributes
51
54
  record:delete domain.com record_id # Delete the given domain
52
55
 
53
56
  template:create name short_name [description] # Create a template
@@ -60,59 +63,66 @@ template:add_record [--prio=priority] short_name name \\
60
63
  template:delete_record short_name template_record_id # Delete the given template record
61
64
 
62
65
 
66
+ Please see the DNSimple documentation at https://dnsimple.com/documentation/api for additional
67
+ information on the commands that are available to DNSimple customers.
68
+
63
69
  EOF
64
70
  end
65
71
 
66
- options = {}
72
+ if $0.split("/").last == 'dnsimple'
67
73
 
68
- global = OptionParser.new do |opts|
69
- opts.on("-s", "--site [ARG]") do |site|
70
- DNSimple::Client.base_uri = site
71
- end
72
- opts.on("-u", "--username [ARG]") do |username|
73
- DNSimple::Client.username = username
74
- end
75
- opts.on("-p", "--password [ARG]") do |password|
76
- DNSimple::Client.password = password
77
- end
78
- opts.on("-d") do
79
- DNSimple::Client.debug = true
80
- end
81
- end
74
+ options = {}
82
75
 
83
- subcommands = {
84
- 'create' => OptionParser.new do |opts|
85
- opts.on("--template [ARG]") do |opt|
86
- options[:template] = opt
76
+ global = OptionParser.new do |opts|
77
+ opts.on("-s", "--site [ARG]") do |site|
78
+ DNSimple::Client.base_uri = site
87
79
  end
88
- end,
89
- 'register' => OptionParser.new do |opts|
90
- opts.on("--template [ARG]") do |opt|
91
- options[:template] = opt
80
+ opts.on("-u", "--username [ARG]") do |username|
81
+ DNSimple::Client.username = username
92
82
  end
93
- end,
94
- 'record:create' => OptionParser.new do |opts|
95
- opts.on("--prio [ARG]") do |prio|
96
- options[:prio] = prio
83
+ opts.on("-p", "--password [ARG]") do |password|
84
+ DNSimple::Client.password = password
97
85
  end
98
- end,
99
- 'template:add_record' => OptionParser.new do |opts|
100
- opts.on("--prio [ARG]") do |prio|
101
- options[:prio] = prio
86
+ opts.on("-d") do
87
+ DNSimple::Client.debug = true
102
88
  end
103
- end,
104
- }
105
-
106
- global.order!
107
- command = ARGV.shift
108
- if command.nil? || command == 'help'
109
- usage
110
- else
111
- options_parser = subcommands[command]
112
- options_parser.order! if options_parser
113
- begin
114
- cli.execute(command, ARGV, options)
115
- rescue DNSimple::CommandNotFound => e
116
- puts e.message
117
89
  end
90
+
91
+ subcommands = {
92
+ 'create' => OptionParser.new do |opts|
93
+ opts.on("--template [ARG]") do |opt|
94
+ options[:template] = opt
95
+ end
96
+ end,
97
+ 'register' => OptionParser.new do |opts|
98
+ opts.on("--template [ARG]") do |opt|
99
+ options[:template] = opt
100
+ end
101
+ end,
102
+ 'record:create' => OptionParser.new do |opts|
103
+ opts.on("--prio [ARG]") do |prio|
104
+ options[:prio] = prio
105
+ end
106
+ end,
107
+ 'template:add_record' => OptionParser.new do |opts|
108
+ opts.on("--prio [ARG]") do |prio|
109
+ options[:prio] = prio
110
+ end
111
+ end,
112
+ }
113
+
114
+ global.order!
115
+ command = ARGV.shift
116
+ if command.nil? || command == 'help'
117
+ usage
118
+ else
119
+ options_parser = subcommands[command]
120
+ options_parser.order! if options_parser
121
+ begin
122
+ cli.execute(command, ARGV, options)
123
+ rescue DNSimple::CommandNotFound => e
124
+ puts e.message
125
+ end
126
+ end
127
+
118
128
  end
data/lib/dnsimple/cli.rb CHANGED
@@ -40,9 +40,11 @@ module DNSimple
40
40
  'delete' => DNSimple::Commands::DeleteDomain,
41
41
  'clear' => DNSimple::Commands::ClearDomain,
42
42
  'apply' => DNSimple::Commands::ApplyTemplate,
43
-
43
+
44
+ 'record:describe' => DNSimple::Commands::DescribeRecord,
44
45
  'record:create' => DNSimple::Commands::CreateRecord,
45
46
  'record:list' => DNSimple::Commands::ListRecords,
47
+ 'record:update' => DNSimple::Commands::UpdateRecord,
46
48
  'record:delete' => DNSimple::Commands::DeleteRecord,
47
49
 
48
50
  'template:create' => DNSimple::Commands::CreateTemplate,
@@ -81,8 +83,10 @@ require 'dnsimple/commands/delete_domain'
81
83
  require 'dnsimple/commands/clear_domain'
82
84
  require 'dnsimple/commands/apply_template'
83
85
 
86
+ require 'dnsimple/commands/describe_record'
84
87
  require 'dnsimple/commands/create_record'
85
88
  require 'dnsimple/commands/list_records'
89
+ require 'dnsimple/commands/update_record'
86
90
  require 'dnsimple/commands/delete_record'
87
91
 
88
92
  require 'dnsimple/commands/create_template'
@@ -0,0 +1,16 @@
1
+ module DNSimple
2
+ module Commands
3
+ class DescribeRecord
4
+ def execute(args, options={})
5
+ name = args.shift
6
+ id = args.shift
7
+ record = Record.find(name, id)
8
+ puts "Record #{record.fqdn}:"
9
+ puts "\tID: #{record.id}"
10
+ puts "\tTTL: #{record.ttl}"
11
+ puts "\tPrio: #{record.prio}"
12
+ puts "\tContent: #{record.content}"
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,23 @@
1
+ module DNSimple
2
+ module Commands
3
+ class UpdateRecord
4
+ def execute(args, options={})
5
+ attributes = {}
6
+ domain_name = args.shift
7
+ id = args.shift
8
+ args.each do |arg|
9
+ name, value = arg.split(":")
10
+ attributes[Record.resolve(name)] = value
11
+ end
12
+
13
+ domain = Domain.find(domain_name)
14
+ record = Record.find(domain.name, id)
15
+ attributes.each do |name, value|
16
+ record.send("#{name}=", value)
17
+ end
18
+ record.save
19
+ puts "Updated record #{record.fqdn} (id: #{record.id})"
20
+ end
21
+ end
22
+ end
23
+ end
@@ -96,17 +96,18 @@ module DNSimple #:nodoc:
96
96
  options.merge!({:basic_auth => Client.credentials})
97
97
  self.class.delete("#{Client.base_uri}/contacts/#{id}.json", options)
98
98
  end
99
+ alias :destroy :delete
99
100
 
100
101
  # Map an aliased field name to it's real name. For example, if you
101
102
  # pass "first" it will be resolved to "first_name", "email" is resolved
102
103
  # to "email_address" and so on.
103
104
  def self.resolve(name)
104
105
  aliases = {
105
- 'first' => 'first_name',
106
- 'last' => 'last_name',
107
- 'state' => 'state_province',
108
- 'province' => 'state_province',
109
- 'email' => 'email_address',
106
+ 'first' => 'first_name',
107
+ 'last' => 'last_name',
108
+ 'state' => 'state_province',
109
+ 'province' => 'state_province',
110
+ 'email' => 'email_address',
110
111
  }
111
112
  aliases[name] || name
112
113
  end
@@ -23,6 +23,33 @@ module DNSimple
23
23
  self.send(m, value) if self.respond_to?(m)
24
24
  end
25
25
  end
26
+
27
+ def fqdn
28
+ [name, domain.name].delete_if { |v| v.blank? }.join(".")
29
+ end
30
+
31
+ def save(options={})
32
+ record_hash = {}
33
+ %w(name content ttl prio).each do |attribute|
34
+ record_hash[Record.resolve(attribute)] = self.send(attribute)
35
+ end
36
+
37
+ options.merge!(:basic_auth => Client.credentials)
38
+ options.merge!(:body => {:record => record_hash})
39
+
40
+ response = self.class.put("#{Client.base_uri}/domains/#{domain.id}/records/#{id}.json", options)
41
+
42
+ pp response if Client.debug?
43
+
44
+ case response.code
45
+ when 200
46
+ return self
47
+ when 401
48
+ raise RuntimeError, "Authentication failed"
49
+ else
50
+ raise RuntimeError, "Failed to update record: #{response.inspect}"
51
+ end
52
+ end
26
53
 
27
54
  def delete(options={})
28
55
  options.merge!({:basic_auth => Client.credentials})
@@ -30,6 +57,14 @@ module DNSimple
30
57
  end
31
58
  alias :destroy :delete
32
59
 
60
+ def self.resolve(name)
61
+ aliases = {
62
+ 'priority' => 'prio',
63
+ 'time-to-live' => 'ttl'
64
+ }
65
+ aliases[name] || name
66
+ end
67
+
33
68
  def self.create(domain_name, name, record_type, content, options={})
34
69
  domain = Domain.find(domain_name)
35
70
 
@@ -57,7 +92,7 @@ module DNSimple
57
92
  def self.find(domain_name, id, options={})
58
93
  domain = Domain.find(domain_name)
59
94
  options.merge!({:basic_auth => Client.credentials})
60
- response = self.get("#{Client.base_uri}/domains/#{domain.id}/records/#{id}", options)
95
+ response = self.get("#{Client.base_uri}/domains/#{domain.id}/records/#{id}.json", options)
61
96
 
62
97
  pp response if Client.debug?
63
98
 
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dnsimple-ruby
3
3
  version: !ruby/object:Gem::Version
4
- hash: 63
4
+ hash: 59
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 8
9
- - 0
10
- version: 0.8.0
9
+ - 2
10
+ version: 0.8.2
11
11
  platform: ruby
12
12
  authors:
13
13
  - Anthony Eden
@@ -15,8 +15,8 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-11-21 00:00:00 +01:00
19
- default_executable:
18
+ date: 2010-11-29 00:00:00 +01:00
19
+ default_executable: dnsimple
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
22
  type: :runtime
@@ -107,7 +107,6 @@ dependencies:
107
107
  description: A ruby wrapper for the DNSimple API that also includes a command-line client.
108
108
  email: anthony.eden@dnsimple.com
109
109
  executables:
110
- - dnsimple.rb
111
110
  - dnsimple
112
111
  extensions: []
113
112
 
@@ -146,6 +145,7 @@ files:
146
145
  - lib/dnsimple/commands/delete_template_record.rb
147
146
  - lib/dnsimple/commands/describe_contact.rb
148
147
  - lib/dnsimple/commands/describe_domain.rb
148
+ - lib/dnsimple/commands/describe_record.rb
149
149
  - lib/dnsimple/commands/describe_user.rb
150
150
  - lib/dnsimple/commands/list_contacts.rb
151
151
  - lib/dnsimple/commands/list_domains.rb
@@ -156,6 +156,7 @@ files:
156
156
  - lib/dnsimple/commands/register_domain.rb
157
157
  - lib/dnsimple/commands/transfer_domain.rb
158
158
  - lib/dnsimple/commands/update_contact.rb
159
+ - lib/dnsimple/commands/update_record.rb
159
160
  - lib/dnsimple/contact.rb
160
161
  - lib/dnsimple/domain.rb
161
162
  - lib/dnsimple/error.rb