enom 0.9.7 → 0.9.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/enom.rb +1 -0
- data/lib/enom/cli.rb +3 -1
- data/lib/enom/commands/describe_domain.rb +26 -0
- data/lib/enom/contact_info.rb +79 -0
- data/lib/enom/domain.rb +9 -4
- metadata +4 -2
data/lib/enom.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'httparty'
|
2
2
|
|
3
3
|
require File.expand_path('../enom/client', __FILE__)
|
4
|
+
require File.expand_path('../enom/contact_info', __FILE__)
|
4
5
|
require File.expand_path('../enom/domain', __FILE__)
|
5
6
|
require File.expand_path('../enom/account', __FILE__)
|
6
7
|
require File.expand_path('../enom/error', __FILE__)
|
data/lib/enom/cli.rb
CHANGED
@@ -40,7 +40,8 @@ module Enom
|
|
40
40
|
'list' => Enom::Commands::ListDomains,
|
41
41
|
'check' => Enom::Commands::CheckDomain,
|
42
42
|
'register' => Enom::Commands::RegisterDomain,
|
43
|
-
'renew' => Enom::Commands::RenewDomain
|
43
|
+
'renew' => Enom::Commands::RenewDomain,
|
44
|
+
'describe' => Enom::Commands::DescribeDomain
|
44
45
|
}
|
45
46
|
end
|
46
47
|
|
@@ -50,3 +51,4 @@ require 'enom/commands/list_domains'
|
|
50
51
|
require 'enom/commands/check_domain'
|
51
52
|
require 'enom/commands/register_domain'
|
52
53
|
require 'enom/commands/renew_domain'
|
54
|
+
require 'enom/commands/describe_domain'
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Enom
|
2
|
+
module Commands
|
3
|
+
class DescribeDomain
|
4
|
+
def execute(args, options={})
|
5
|
+
name = args.shift
|
6
|
+
domain = Domain.find(name)
|
7
|
+
|
8
|
+
puts domain.name.upcase
|
9
|
+
puts "Expires: #{domain.expiration_date.strftime("%B %d, %Y")}"
|
10
|
+
|
11
|
+
puts "Name Servers:"
|
12
|
+
domain.nameservers.each do |ns|
|
13
|
+
puts "\t#{ns}"
|
14
|
+
end
|
15
|
+
|
16
|
+
puts "Contact Info:"
|
17
|
+
domain.all_contact_info.each do |k,v|
|
18
|
+
puts "\t#{k}:"
|
19
|
+
v.each do |k,v|
|
20
|
+
puts "\t\t#{k}: #{v}"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,79 @@
|
|
1
|
+
module Enom
|
2
|
+
module ContactInfo
|
3
|
+
|
4
|
+
CONTACT_TYPES = %w(Registrant AuxBilling Tech Admin)
|
5
|
+
FIELDS = [
|
6
|
+
{:name => "FirstName", :required => true},
|
7
|
+
{:name => "LastName", :required => true},
|
8
|
+
{:name => "OrganizationName", :required => true},
|
9
|
+
{:name => "JobTitle", :required => false},
|
10
|
+
{:name => "Address1", :required => true},
|
11
|
+
{:name => "Address2", :required => false},
|
12
|
+
{:name => "City", :required => true},
|
13
|
+
{:name => "StateProvinceChoice", :required => false}, # "S" or "P" are valid
|
14
|
+
{:name => "StateProvince", :required => false},
|
15
|
+
{:name => "PostalCode", :required => true},
|
16
|
+
{:name => "Country", :required => true},
|
17
|
+
{:name => "EmailAddress", :required => true},
|
18
|
+
{:name => "Phone", :required => true}
|
19
|
+
]
|
20
|
+
|
21
|
+
CONTACT_TYPES.each do |contact_type|
|
22
|
+
|
23
|
+
# Define getter methods for each contact type
|
24
|
+
# def registrant_contact_info
|
25
|
+
# ...
|
26
|
+
# end
|
27
|
+
define_method "#{contact_type.downcase}_contact_info" do
|
28
|
+
Client.request('Command' => 'GetContacts', 'SLD' => sld, 'TLD' => tld)["interface_response"]["GetContacts"][contact_type]
|
29
|
+
end
|
30
|
+
|
31
|
+
# Define setter methods for each contact type
|
32
|
+
# def update_registrant_contact_info(contact_data = {})
|
33
|
+
# ...
|
34
|
+
# end
|
35
|
+
define_method "update_#{contact_type.downcase}_contact_info" do |contact_data = {}|
|
36
|
+
|
37
|
+
# Remove attributes that are not in Enom's list of available fields
|
38
|
+
contact_data.select!{|k| FIELDS.map{|f| f[:name] }.include?(k)}
|
39
|
+
|
40
|
+
# Write the initial options hash containing the current ContactType
|
41
|
+
opts = {"ContactType" => contact_type}
|
42
|
+
|
43
|
+
# Check to make sure all required fields are present
|
44
|
+
FIELDS.each do |field|
|
45
|
+
if field[:required]
|
46
|
+
if contact_data[field[:name]].nil? || contact_data[field[:name]].empty?
|
47
|
+
raise Error, "#{field[:name]} is required to update contact info"
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
# Prepend ContactType to beginning of all data and add to options hash
|
53
|
+
contact_data.each do |k,v|
|
54
|
+
opts.merge!("#{contact_type}#{k}" => v)
|
55
|
+
end
|
56
|
+
|
57
|
+
# Send the new contact details to Enom
|
58
|
+
Client.request({'Command' => 'Contacts', 'SLD' => sld, 'TLD' => tld}.merge(opts))
|
59
|
+
|
60
|
+
# Fetch the new contact info and return it
|
61
|
+
send("#{contact_type.downcase}_contact_info")
|
62
|
+
end
|
63
|
+
|
64
|
+
def all_contact_info
|
65
|
+
Client.request('Command' => 'GetContacts', 'SLD' => sld, 'TLD' => tld)["interface_response"]["GetContacts"].select{|k| CONTACT_TYPES.include?(k)}
|
66
|
+
end
|
67
|
+
|
68
|
+
# Update all contact types with the same data
|
69
|
+
# Performs a separate API call for each type
|
70
|
+
def update_all_contact_info(data = {})
|
71
|
+
CONTACT_TYPES.each do |contact_type|
|
72
|
+
send("update_#{contact_type.downcase}_contact_info", data)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
end
|
77
|
+
|
78
|
+
end
|
79
|
+
end
|
data/lib/enom/domain.rb
CHANGED
@@ -2,6 +2,7 @@ module Enom
|
|
2
2
|
|
3
3
|
class Domain
|
4
4
|
include HTTParty
|
5
|
+
include ContactInfo
|
5
6
|
|
6
7
|
# The domain name on Enom
|
7
8
|
attr_reader :name
|
@@ -16,8 +17,9 @@ module Enom
|
|
16
17
|
def initialize(attributes)
|
17
18
|
@name = attributes["DomainName"] || attributes["domainname"]
|
18
19
|
@sld, @tld = @name.split('.')
|
19
|
-
|
20
|
-
|
20
|
+
|
21
|
+
expiration_date_string = attributes["expiration_date"] || attributes["status"]["expiration"]
|
22
|
+
@expiration_date = Date.strptime(expiration_date_string.split(' ').first, "%m/%d/%Y")
|
21
23
|
|
22
24
|
# If we have more attributes for the domain from running GetDomainInfo
|
23
25
|
# (as opposed to GetAllDomains), we should save it to the instance to
|
@@ -129,8 +131,11 @@ module Enom
|
|
129
131
|
end
|
130
132
|
|
131
133
|
def expiration_date
|
132
|
-
|
133
|
-
|
134
|
+
unless @expiration_date
|
135
|
+
date_string = @domain_payload['interface_response']['GetDomainInfo']['status']['expiration']
|
136
|
+
@expiration_date = Date.strptime(date_string.split(' ').first, "%m/%d/%Y")
|
137
|
+
end
|
138
|
+
@expiration_date
|
134
139
|
end
|
135
140
|
|
136
141
|
def registration_status
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 9
|
8
|
-
-
|
9
|
-
version: 0.9.
|
8
|
+
- 8
|
9
|
+
version: 0.9.8
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- James Miller
|
@@ -61,9 +61,11 @@ files:
|
|
61
61
|
- lib/enom/account.rb
|
62
62
|
- lib/enom/cli.rb
|
63
63
|
- lib/enom/client.rb
|
64
|
+
- lib/enom/contact_info.rb
|
64
65
|
- lib/enom/domain.rb
|
65
66
|
- lib/enom/error.rb
|
66
67
|
- lib/enom/commands/check_domain.rb
|
68
|
+
- lib/enom/commands/describe_domain.rb
|
67
69
|
- lib/enom/commands/list_domains.rb
|
68
70
|
- lib/enom/commands/register_domain.rb
|
69
71
|
- lib/enom/commands/renew_domain.rb
|