dnsimple-ruby 0.7.1 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -6,4 +6,5 @@ group :development do
6
6
  gem 'rake'
7
7
  gem 'jeweler'
8
8
  gem 'rspec', '>= 2.0.0'
9
+ gem 'ruby-debug'
9
10
  end
@@ -1,30 +1,31 @@
1
1
  GEM
2
2
  remote: http://rubygems.org/
3
3
  specs:
4
+ columnize (0.3.2)
4
5
  crack (0.1.8)
5
6
  diff-lcs (1.1.2)
6
- gemcutter (0.6.1)
7
7
  git (1.2.5)
8
8
  httparty (0.6.1)
9
9
  crack (= 0.1.8)
10
- jeweler (1.4.0)
11
- gemcutter (>= 0.1.0)
10
+ jeweler (1.5.1)
11
+ bundler (~> 1.0.0)
12
12
  git (>= 1.2.5)
13
- rubyforge (>= 2.0.0)
14
- json_pure (1.4.6)
13
+ rake
14
+ linecache (0.43)
15
15
  rake (0.8.7)
16
- rspec (2.0.0)
17
- rspec-core (= 2.0.0)
18
- rspec-expectations (= 2.0.0)
19
- rspec-mocks (= 2.0.0)
20
- rspec-core (2.0.0)
21
- rspec-expectations (2.0.0)
22
- diff-lcs (>= 1.1.2)
23
- rspec-mocks (2.0.0)
24
- rspec-core (= 2.0.0)
25
- rspec-expectations (= 2.0.0)
26
- rubyforge (2.0.4)
27
- json_pure (>= 1.1.7)
16
+ rspec (2.1.0)
17
+ rspec-core (~> 2.1.0)
18
+ rspec-expectations (~> 2.1.0)
19
+ rspec-mocks (~> 2.1.0)
20
+ rspec-core (2.1.0)
21
+ rspec-expectations (2.1.0)
22
+ diff-lcs (~> 1.1.2)
23
+ rspec-mocks (2.1.0)
24
+ ruby-debug (0.10.4)
25
+ columnize (>= 0.1)
26
+ ruby-debug-base (~> 0.10.4.0)
27
+ ruby-debug-base (0.10.4)
28
+ linecache (>= 0.3)
28
29
 
29
30
  PLATFORMS
30
31
  ruby
@@ -34,3 +35,4 @@ DEPENDENCIES
34
35
  jeweler
35
36
  rake
36
37
  rspec (>= 2.0.0)
38
+ ruby-debug
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.7.1
1
+ 0.8.0
@@ -38,8 +38,10 @@ list # List all domains
38
38
  check domain.com # Check if a domain is available (for registration)
39
39
  describe domain.com # Describe the given domain
40
40
  create [--template=short_name] domain.com # Add the given domain
41
- register [--template=short_name] domain.com registrant_id # Register the given domain with DNSimple
42
- transfer domain.com registrant_id [authinfo] # Transfer the given domain into DNSimple
41
+ register [--template=short_name] domain.com registrant_id \ # Register the given domain with DNSimple
42
+ [[name:value] [name:value]] # name:value pairs can be given for extended attributes
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
43
45
  delete domain.com # Delete the given domain
44
46
  apply domain.com template_short_name # Apply a template to the domain
45
47
 
@@ -11,3 +11,4 @@ require 'dnsimple/record'
11
11
  require 'dnsimple/template'
12
12
  require 'dnsimple/template_record'
13
13
  require 'dnsimple/transfer_order'
14
+ require 'dnsimple/extended_attribute'
@@ -58,6 +58,8 @@ module DNSimple
58
58
  'contact:describe' => DNSimple::Commands::DescribeContact,
59
59
  'contact:update' => DNSimple::Commands::UpdateContact,
60
60
  'contact:delete' => DNSimple::Commands::DeleteContact,
61
+
62
+ 'extended-attributes:list' => DNSimple::Commands::ListExtendedAttributes
61
63
  }
62
64
  end
63
65
 
@@ -95,3 +97,5 @@ require 'dnsimple/commands/list_contacts'
95
97
  require 'dnsimple/commands/describe_contact'
96
98
  require 'dnsimple/commands/update_contact'
97
99
  require 'dnsimple/commands/delete_contact'
100
+
101
+ require 'dnsimple/commands/list_extended_attributes'
@@ -8,6 +8,7 @@ module DNSimple
8
8
  end
9
9
 
10
10
  def self.username
11
+ raise RuntimeError, "You must set your username first: DNSimple::Client.username = 'username'" unless defined?(@@username)
11
12
  @@username
12
13
  end
13
14
 
@@ -16,6 +17,7 @@ module DNSimple
16
17
  end
17
18
 
18
19
  def self.password
20
+ raise RuntimeError, "You must set your password first: DNSimple::Client.password = 'password'" unless defined?(@@password)
19
21
  @@password
20
22
  end
21
23
 
@@ -34,5 +36,12 @@ module DNSimple
34
36
  def self.base_uri=(base_uri)
35
37
  @@base_uri = base_uri.gsub(/\/$/, '')
36
38
  end
39
+
40
+ def self.load_credentials(path='~/.dnsimple')
41
+ credentials = YAML.load(File.new(File.expand_path(path)))
42
+ self.username = credentials['username']
43
+ self.password = credentials['password']
44
+ "Credentials loaded from #{path}"
45
+ end
37
46
  end
38
47
  end
@@ -0,0 +1,25 @@
1
+ module DNSimple
2
+ module Commands
3
+ class ListExtendedAttributes
4
+ def execute(args, options={})
5
+ tld = args.shift
6
+ extended_attributes = ExtendedAttribute.find(tld)
7
+ puts "Extended attributes: "
8
+ extended_attributes.each do |extended_attribute|
9
+ o = " #{extended_attribute.name}"
10
+ o << " (required)" if extended_attribute.required
11
+ o << " : #{extended_attribute.description}\n"
12
+ unless extended_attribute.options.empty?
13
+ o << " Options:\n"
14
+ extended_attribute.options.each do |option|
15
+ o << " #{option.title}: #{option.value}"
16
+ o << " (#{option.description})" if option.description
17
+ o << "\n"
18
+ end
19
+ end
20
+ puts o
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -4,7 +4,14 @@ module DNSimple
4
4
  def execute(args, options={})
5
5
  name = args.shift
6
6
  registrant = {:id => args.shift}
7
- domain = Domain.register(name, registrant)
7
+
8
+ extended_attributes = {}
9
+ args.each do |arg|
10
+ n, v = arg.split(":")
11
+ extended_attributes[n] = v
12
+ end
13
+
14
+ domain = Domain.register(name, registrant, extended_attributes)
8
15
  puts "Registered #{domain.name}"
9
16
 
10
17
  if template = options.delete(:template)
@@ -7,7 +7,13 @@ module DNSimple
7
7
  authinfo = args.shift unless args.empty?
8
8
  authinfo ||= ''
9
9
 
10
- transfer_order = TransferOrder.create(name, authinfo, registrant)
10
+ extended_attributes = {}
11
+ args.each do |arg|
12
+ n, v = arg.split(":")
13
+ extended_attributes[n] = v
14
+ end
15
+
16
+ transfer_order = TransferOrder.create(name, authinfo, registrant, extended_attributes)
11
17
  puts "Transfer order issued for #{name}"
12
18
  end
13
19
  end
@@ -0,0 +1,73 @@
1
+ module DNSimple #:nodoc:
2
+ # Used for domains that require extended attributes.
3
+ class ExtendedAttribute
4
+ # An option for an extended attribute
5
+ class Option
6
+ # The option name
7
+ attr_accessor :title
8
+
9
+ # The option value
10
+ attr_accessor :value
11
+
12
+ # A long description of the option
13
+ attr_accessor :description
14
+
15
+ #:nodoc:
16
+ def initialize(attributes)
17
+ attributes.each do |key, value|
18
+ m = "#{key}=".to_sym
19
+ self.send(m, value) if self.respond_to?(m)
20
+ end
21
+ end
22
+ end
23
+
24
+ include HTTParty
25
+
26
+ # The extended attribute name
27
+ attr_accessor :name
28
+
29
+ # A description of the extended attribute
30
+ attr_accessor :description
31
+
32
+ # Boolean indicating if the extended attribute is required
33
+ attr_accessor :required
34
+
35
+ #:nodoc:
36
+ def initialize(attributes)
37
+ attributes.each do |key, value|
38
+ m = "#{key}=".to_sym
39
+ self.send(m, value) if self.respond_to?(m)
40
+ end
41
+ end
42
+
43
+ # An array of options for the extended attribute
44
+ def options
45
+ @options ||= []
46
+ end
47
+
48
+ def options=(opts)
49
+ @options = []
50
+ opts.each do |opt|
51
+ @options << Option.new(opt)
52
+ end
53
+ end
54
+
55
+ # Find the extended attributes for the given TLD
56
+ def self.find(tld, options={})
57
+ options.merge!({:basic_auth => Client.credentials})
58
+
59
+ response = self.get("#{Client.base_uri}/extended_attributes/#{tld}.json", options)
60
+
61
+ pp response if Client.debug?
62
+
63
+ case response.code
64
+ when 200
65
+ response.map { |r| ExtendedAttribute.new(r) }
66
+ when 401
67
+ raise RuntimeError, "Authentication failed"
68
+ else
69
+ raise RuntimeError, "Error: #{response.code}"
70
+ end
71
+ end
72
+ end
73
+ end
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: 1
4
+ hash: 63
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 7
9
- - 1
10
- version: 0.7.1
8
+ - 8
9
+ - 0
10
+ version: 0.8.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Anthony Eden
@@ -15,13 +15,42 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-11-12 00:00:00 -06:00
18
+ date: 2010-11-21 00:00:00 +01:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
+ type: :runtime
23
+ prerelease: false
22
24
  name: httparty
25
+ version_requirements: &id001 !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - ">="
29
+ - !ruby/object:Gem::Version
30
+ hash: 3
31
+ segments:
32
+ - 0
33
+ version: "0"
34
+ requirement: *id001
35
+ - !ruby/object:Gem::Dependency
36
+ type: :development
37
+ prerelease: false
38
+ name: rake
39
+ version_requirements: &id002 !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ">="
43
+ - !ruby/object:Gem::Version
44
+ hash: 3
45
+ segments:
46
+ - 0
47
+ version: "0"
48
+ requirement: *id002
49
+ - !ruby/object:Gem::Dependency
50
+ type: :development
23
51
  prerelease: false
24
- requirement: &id001 !ruby/object:Gem::Requirement
52
+ name: jeweler
53
+ version_requirements: &id003 !ruby/object:Gem::Requirement
25
54
  none: false
26
55
  requirements:
27
56
  - - ">="
@@ -30,13 +59,56 @@ dependencies:
30
59
  segments:
31
60
  - 0
32
61
  version: "0"
62
+ requirement: *id003
63
+ - !ruby/object:Gem::Dependency
64
+ type: :development
65
+ prerelease: false
66
+ name: rspec
67
+ version_requirements: &id004 !ruby/object:Gem::Requirement
68
+ none: false
69
+ requirements:
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ hash: 15
73
+ segments:
74
+ - 2
75
+ - 0
76
+ - 0
77
+ version: 2.0.0
78
+ requirement: *id004
79
+ - !ruby/object:Gem::Dependency
80
+ type: :development
81
+ prerelease: false
82
+ name: ruby-debug
83
+ version_requirements: &id005 !ruby/object:Gem::Requirement
84
+ none: false
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ hash: 3
89
+ segments:
90
+ - 0
91
+ version: "0"
92
+ requirement: *id005
93
+ - !ruby/object:Gem::Dependency
33
94
  type: :runtime
34
- version_requirements: *id001
95
+ prerelease: false
96
+ name: httparty
97
+ version_requirements: &id006 !ruby/object:Gem::Requirement
98
+ none: false
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ hash: 3
103
+ segments:
104
+ - 0
105
+ version: "0"
106
+ requirement: *id006
35
107
  description: A ruby wrapper for the DNSimple API that also includes a command-line client.
36
108
  email: anthony.eden@dnsimple.com
37
109
  executables:
38
- - dnsimple
39
110
  - dnsimple.rb
111
+ - dnsimple
40
112
  extensions: []
41
113
 
42
114
  extra_rdoc_files:
@@ -46,7 +118,6 @@ extra_rdoc_files:
46
118
  - README.textile
47
119
  files:
48
120
  - .bundle/config
49
- - .gitignore
50
121
  - Gemfile
51
122
  - Gemfile.lock
52
123
  - LICENSE
@@ -78,6 +149,7 @@ files:
78
149
  - lib/dnsimple/commands/describe_user.rb
79
150
  - lib/dnsimple/commands/list_contacts.rb
80
151
  - lib/dnsimple/commands/list_domains.rb
152
+ - lib/dnsimple/commands/list_extended_attributes.rb
81
153
  - lib/dnsimple/commands/list_records.rb
82
154
  - lib/dnsimple/commands/list_template_records.rb
83
155
  - lib/dnsimple/commands/list_templates.rb
@@ -87,6 +159,7 @@ files:
87
159
  - lib/dnsimple/contact.rb
88
160
  - lib/dnsimple/domain.rb
89
161
  - lib/dnsimple/error.rb
162
+ - lib/dnsimple/extended_attribute.rb
90
163
  - lib/dnsimple/record.rb
91
164
  - lib/dnsimple/template.rb
92
165
  - lib/dnsimple/template_record.rb
@@ -104,8 +177,8 @@ homepage: http://github.com/aetrion/dnsimple-ruby
104
177
  licenses: []
105
178
 
106
179
  post_install_message:
107
- rdoc_options:
108
- - --charset=UTF-8
180
+ rdoc_options: []
181
+
109
182
  require_paths:
110
183
  - lib
111
184
  required_ruby_version: !ruby/object:Gem::Requirement
data/.gitignore DELETED
@@ -1,3 +0,0 @@
1
- pkg
2
- rdoc
3
- dnsimple-ruby.gemspec