namecheap 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -1,4 +1,12 @@
1
- source "http://rubygems.org"
1
+ source 'https://rubygems.org'
2
+
3
+ group :development do
4
+ gem 'pry'
5
+ end
6
+
7
+ group :test do
8
+ gem 'rspec', '>= 2.11'
9
+ gem 'webmock'
10
+ end
2
11
 
3
- # Specify your gem's dependencies in namecheap.gemspec
4
12
  gemspec
data/README.md CHANGED
@@ -1,6 +1,32 @@
1
1
  Overview
2
2
  ========
3
3
 
4
+ Documentation
5
+ -----
6
+
7
+ [http://rubygems.org/gems/namecheap](http://rubygems.org/gems/namecheap)
8
+
9
+ Usage
10
+ -----
11
+
12
+ In your initializers, configure Namecheap like so:
13
+
14
+ ```ruby
15
+ Namecheap.configure do |config|
16
+ config.key = 'apikey'
17
+ config.username = 'apiuser'
18
+ config.client_ip = '127.0.0.1'
19
+ end
20
+ ```
21
+
22
+ Then you can do something like:
23
+
24
+ ```ruby
25
+ Namecheap.domains.get_list
26
+ ```
27
+
28
+ Please see the Namecheap API documentation for more information
29
+
4
30
  About this project
5
31
  -------------
6
32
 
@@ -34,22 +60,20 @@ the purchase API wrappers, but it was a good starting point (and allowed me to
34
60
  study how seasoned pros would approach API wrappers). So I forked, published a
35
61
  gem based on the fork, and hacked on it. And that's how it all began :)
36
62
 
37
- Usage
38
- -----
63
+ Credits
64
+ -------
39
65
 
40
- In your initializers, configure Namecheap like so:
66
+ Tristan V. Gomez: tristan dot gomez at gmail dot com
67
+
68
+ [Hashrocket](http://www.hashrocket.com/) from where the original code was forked from
41
69
 
42
- Namecheap.configure do |config|
43
- config.key = 'apikey'
44
- config.username = 'apiuser'
45
- config.client_ip = '127.0.0.1'
46
- end
70
+ [Mongoid](http://www.mongoid.org) from where the configuration code was modified from
47
71
 
48
- Then you can do something like:
49
72
 
50
- Namecheap.domains.get_list
73
+ Plug!!
74
+ ------
51
75
 
52
- Please see the Namecheap API documentation for more information
76
+ Mindvalley is [hiring](http://www.mindvalley.com/careers) :)
53
77
 
54
78
  License
55
79
  -------
@@ -68,19 +92,3 @@ GNU General Public License for more details.
68
92
 
69
93
  You should have received a copy of the GNU General Public License
70
94
  along with this program. If not, see <http://www.gnu.org/licenses/>.
71
-
72
-
73
- Credits
74
- -------
75
-
76
- Tristan V. Gomez: tristan dot gomez at gmail dot com
77
-
78
- [Hashrocket](http://www.hashrocket.com/) from where the original code was forked from
79
-
80
- [Mongoid](http://www.mongoid.org) from where the configuration code was modified from
81
-
82
-
83
- Plug!!
84
- ------
85
-
86
- Mindvalley is [hiring](http://www.mindvalley.com/careers) :)
@@ -1,9 +1,15 @@
1
1
  require 'httparty'
2
- require 'monkey_patch'
3
2
  require 'pp'
4
-
5
- $LOAD_PATH.unshift("#{File.dirname(__FILE__)}/namecheap")
6
- Dir.glob("#{File.dirname(__FILE__)}/namecheap/*.rb") { |lib| require File.basename(lib, '.*') }
3
+ require 'namecheap/version'
4
+ require 'namecheap/api'
5
+ require 'namecheap/config'
6
+ require 'namecheap/domains'
7
+ require 'namecheap/dns'
8
+ require 'namecheap/ns'
9
+ require 'namecheap/ssl'
10
+ require 'namecheap/transfers'
11
+ require 'namecheap/users'
12
+ require 'namecheap/whois_guard'
7
13
 
8
14
  module Namecheap
9
15
 
@@ -22,15 +28,14 @@ module Namecheap
22
28
  block_given? ? yield(Config) : Config
23
29
  end
24
30
  alias :config :configure
25
-
26
- # Take all the public instance methods from the Config singleton and allow
27
- # them to be accessed through the Namecheap module directly.
28
- #
29
- # @example Delegate the configuration methods.
30
- # Namecheap.key = 'newkey'
31
- delegate *(Config.public_instance_methods(false) << { :to => Config })
32
31
 
33
- attr_accessor :domains
32
+ attr_accessor :domains, :dns, :ns, :transfers, :ssl, :users, :whois_guard
34
33
  self.domains = Namecheap::Domains.new
34
+ self.dns = Namecheap::Dns.new
35
+ self.ns = Namecheap::Ns.new
36
+ self.transfers = Namecheap::Transfers.new
37
+ self.ssl = Namecheap::Ssl.new
38
+ self.users = Namecheap::Users.new
39
+ self.whois_guard = Namecheap::Whois_Guard.new
35
40
 
36
41
  end
@@ -1,3 +1,5 @@
1
+ require 'active_support/core_ext/string/inflections'
2
+
1
3
  module Namecheap
2
4
  class Api
3
5
  SANDBOX = 'https://api.sandbox.namecheap.com/xml.response'
@@ -5,18 +7,56 @@ module Namecheap
5
7
  ENVIRONMENT = defined?(Rails) && Rails.respond_to?(:env) ? Rails.env : (ENV["RACK_ENV"] || 'development')
6
8
  ENDPOINT = (ENVIRONMENT == 'production' ? PRODUCTION : SANDBOX)
7
9
 
8
- def api_call(command, command_args)
9
- args = init_args(command_args.merge :command => command)
10
- query = ENDPOINT + '?' + args.to_param
11
- HTTParty.get(query)
10
+ def get(command, options = {})
11
+ request 'get', command, options
12
+ end
13
+
14
+ def post(command, options = {})
15
+ request 'post', command, options
16
+ end
17
+
18
+ def put(command, options = {})
19
+ request 'post', command, options
20
+ end
21
+
22
+ def delete(command, options = {})
23
+ request 'post', command, options
24
+ end
25
+
26
+ def request(method, command, options = {})
27
+ command = 'namecheap.' + command
28
+ options = init_args.merge(options).merge({:command => command})
29
+ options.keys.each do |key|
30
+ options[key.to_s.camelize] = options.delete(key)
31
+ end
32
+
33
+ case method
34
+ when 'get'
35
+ #raise options.inspect
36
+ HTTParty.get(ENDPOINT, { :query => options})
37
+ when 'post'
38
+ HTTParty.post(ENDPOINT, { :query => options})
39
+ when 'put'
40
+ HTTParty.put(ENDPOINT, { :query => options})
41
+ when 'delete'
42
+ HTTParty.delete(ENDPOINT, { :query => options})
43
+ end
12
44
  end
13
45
 
14
- def init_args(options = {})
15
- args = {}
16
- args['ApiUser'] = args['UserName'] = Namecheap.username
17
- args['ApiKey'] = Namecheap.key
18
- args['ClientIp'] = Namecheap.client_ip
19
- args.merge options.camelize_keys!
46
+ def init_args
47
+ %w(username key client_ip).each do |key|
48
+ if Namecheap.config.key.nil?
49
+ raise Namecheap::Config::RequiredOptionMissing,
50
+ "Configuration parameter missing: #{key}, " +
51
+ "please add it to the Namecheap.configure block"
52
+ end
53
+ end
54
+ options = {
55
+ api_user: Namecheap.config.username,
56
+ user_name: Namecheap.config.username,
57
+ api_key: Namecheap.config.key,
58
+ client_ip: Namecheap.config.client_ip
59
+ }
20
60
  end
21
61
  end
22
- end
62
+ end
@@ -1,43 +1,9 @@
1
1
  module Namecheap
2
2
  module Config
3
- # Taken and modified from Mongoid config.rb
4
-
3
+ class RequiredOptionMissing < RuntimeError ; end
5
4
  extend self
6
5
 
7
- attr_accessor :settings, :defaults
8
- @settings = {}
9
- @defaults = {}
10
-
11
- # Define a configuration option with a default.
12
- #
13
- # @example Define the option.
14
- # Config.option(:client_ip, :default => '127.0.0.1')
15
- #
16
- # @param [ Symbol ] name The name of the configuration option.
17
- # @param [ Hash ] options Extras for the option.
18
- #
19
- # @option options [ Object ] :default The default value.
20
- def option(name, options = {})
21
- defaults[name] = settings[name] = options[:default]
22
-
23
- class_eval <<-RUBY
24
- def #{name}
25
- settings[#{name.inspect}]
26
- end
27
-
28
- def #{name}=(value)
29
- settings[#{name.inspect}] = value
30
- end
31
-
32
- def #{name}?
33
- #{name}
34
- end
35
- RUBY
36
- end
37
-
38
- option :key, :default => 'apikey'
39
- option :username, :default => 'apiuser'
40
- option :client_ip, :default => '127.0.0.1'
6
+ attr_accessor :key, :username, :client_ip
41
7
 
42
8
  # Configure namecheap from a hash. This is usually called after parsing a
43
9
  # yaml config file such as mongoid.yml.
@@ -65,14 +31,5 @@ module Namecheap
65
31
  from_hash(settings)
66
32
  end
67
33
  end
68
-
69
- # Reset the configuration options to the defaults.
70
- #
71
- # @example Reset the configuration options.
72
- # config.reset
73
- def reset
74
- settings.replace(defaults)
75
- end
76
-
77
34
  end
78
- end
35
+ end
@@ -1,51 +1,56 @@
1
1
  module Namecheap
2
2
  class Dns < Api
3
+ # Sets domain to use Namecheap's default DNS servers.
4
+ # @see http://developer.namecheap.com/docs/doku.php?id=api-reference:domains.dns:setdefault
3
5
  def set_default(sld, tld, options = {})
4
- args = options.clone
5
- args['SLD'] = sld
6
- args['TLD'] = tld
7
- api_call('namecheap.domains.dns.setDefault', args)
6
+ options = {:SLD => sld, :TLD => tld}.merge(options)
7
+ get 'domains.dns.setDefault', options
8
8
  end
9
9
 
10
+ # Sets domain to use custom DNS servers.
11
+ # @see http://developer.namecheap.com/docs/doku.php?id=api-reference:domains.dns:setcustom
10
12
  def set_custom(sld, tld, nameservers = [], options = {})
11
- args = options.clone
12
- args['SLD'] = sld
13
- args['TLD'] = tld
14
- args['Nameservers'] = nameservers.respond_to?(:join) ? nameservers.join(',') : nameservers
15
- api_call('namecheap.domains.dns.setCustom', args)
13
+ if nameservers.respond_to?(:join)
14
+ nameservers = nameservers.join(',')
15
+ end
16
+
17
+ options = {:SLD => sld, :TLD => tld, :Nameservers => nameservers}.merge(options)
18
+ get 'domains.dns.setCustom', options
16
19
  end
17
20
 
21
+ # Gets a list of DNS servers associated with the requested domain.
22
+ # @see http://developer.namecheap.com/docs/doku.php?id=api-reference:domains.dns:getlist
18
23
  def get_list(sld, tld, options = {})
19
- args = options.clone
20
- args['SLD'] = sld
21
- args['TLD'] = tld
22
- api_call('namecheap.domains.dns.getList', args)
24
+ options = {:SLD => sld, :TLD => tld}.merge(options)
25
+ get 'domains.dns.getList', options
23
26
  end
24
27
 
28
+ # Retrieves DNS host record settings for the requested domain.
29
+ # @see http://developer.namecheap.com/docs/doku.php?id=api-reference:domains.dns:gethosts
25
30
  def get_hosts(sld, tld, options = {})
26
- args = options.clone
27
- args['SLD'] = sld
28
- args['TLD'] = tld
29
- api_call('namecheap.domains.dns.getHosts', args)
31
+ options = {:SLD => sld, :TLD => tld}.merge(options)
32
+ get 'domains.dns.getHosts', options
30
33
  end
31
34
 
35
+ # Gets email forwarding settings for the requested domain.
36
+ # @see http://developer.namecheap.com/docs/doku.php?id=api-reference:domains.dns:getemailforwarding
32
37
  def get_email_forwarding(domain, options = {})
33
- args = options.clone
34
- args['DomainName'] = domain
35
- api_call('namecheap.domains.dns.getEmailForwarding', args)
38
+ options = {:DomainName => domain}.merge(options)
39
+ get 'domains.dns.getEmailForwarding', options
36
40
  end
37
41
 
42
+ # Sets email forwarding for a domain name.
43
+ # @see http://developer.namecheap.com/docs/doku.php?id=api-reference:domains.dns:setemailforwarding
38
44
  def set_email_forwarding(domain, options = {})
39
- args = options.clone
40
- args['DomainName'] = domain
41
- api_call('namecheap.domains.dns.setEmailForwarding', args)
45
+ options = {:DomainName => domain}.merge(options)
46
+ get 'domains.dns.setEmailForwarding', options
42
47
  end
43
48
 
49
+ # Sets DNS host records settings for the requested domain.
50
+ # @see http://developer.namecheap.com/docs/doku.php?id=api-reference:domains.dns:sethosts
44
51
  def set_hosts(sld, tld, options = {})
45
- args = options.clone
46
- args['SLD'] = sld
47
- args['TLD'] = tld
48
- api_call('namecheap.domains.dns.setHosts', args)
52
+ options = {:SLD => sld, :TLD => tld}.merge(options)
53
+ get 'domains.dns.setHosts', options
49
54
  end
50
55
  end
51
56
  end
@@ -1,67 +1,82 @@
1
1
  module Namecheap
2
2
  class Domains < Api
3
+ # Returns a list of domains for the particular user.
4
+ # @see http://developer.namecheap.com/docs/doku.php?id=api-reference:domains:getlist
3
5
  def get_list(options = {})
4
- args = options.clone
5
- api_call('namecheap.domains.getList', args)
6
+ get 'domains.getList', options
6
7
  end
7
8
 
9
+ # Gets contact information for the requested domain.
10
+ # @see http://developer.namecheap.com/docs/doku.php?id=api-reference:domains:getcontacts
8
11
  def get_contacts(domain, options = {})
9
- args = options.clone
10
- args['DomainName'] = domain
11
- api_call('namecheap.domains.getContacts', args)
12
+ options = {:DomainName => domain}.merge(options)
13
+ get 'domains.getContacts', options
12
14
  end
13
15
 
16
+ # Registers a domain.
17
+ # @see http://developer.namecheap.com/docs/doku.php?id=api-reference:domains:create
14
18
  def create(domain, options = {})
15
- args = options.clone
16
- args['DomainName'] = domain
17
- api_call('namecheap.domains.create', args)
19
+ options = {:DomainName => domain}.merge(options)
20
+ get 'domains.create', options
18
21
  end
19
22
 
23
+ # Returns a list of tlds.
24
+ # @see http://developer.namecheap.com/docs/doku.php?id=api-reference:domains:gettldlist
20
25
  def get_tld_list(options = {})
21
- args = options.clone
22
- api_call('namecheap.domains.getTldList', args)
26
+ get 'domains.getTldList', options
23
27
  end
24
28
 
29
+ # Sets contact information for the requested domain.
30
+ # @see http://developer.namecheap.com/docs/doku.php?id=api-reference:domains:setcontacts
25
31
  def set_contacts(domain, options = {})
26
- args = options.clone
27
- args['DomainName'] = domain
28
- api_call('namecheap.domains.setContacts', args)
32
+ options = {:DomainName => domain}.merge(options)
33
+ get 'domains.setContacts', options
29
34
  end
30
35
 
36
+ # Checks the availability of domains.
37
+ # @see http://developer.namecheap.com/docs/doku.php?id=api-reference:domains:check
31
38
  def check(domains = [], options = {})
32
- args = options.clone
33
- args['DomainList'] = domains.respond_to?(:join) ? domains.join(',') : domains
34
- api_call('namecheap.domains.check', args)
39
+ if domains.respond_to?(:join)
40
+ domains = domains.join(',')
41
+ end
42
+
43
+ options = {:DomainList => domains}.merge(options)
44
+ get 'domains.check', options
35
45
  end
36
46
 
47
+ # Reactivates an expired domain.
48
+ # @see http://developer.namecheap.com/docs/doku.php?id=api-reference:domains:reactivate
37
49
  def reactivate(domain, options = {})
38
- args = options.clone
39
- args['DomainName'] = domain
40
- api_call('namecheap.domains.reactivate', args)
50
+ options = {:DomainName => domain}.merge(options)
51
+ get 'domains.reactivate', options
41
52
  end
42
53
 
54
+ # Renews an expiring domain.
55
+ # http://developer.namecheap.com/docs/doku.php?id=api-reference:domains:renew
43
56
  def renew(domain, options = {})
44
- args = options.clone
45
- args['DomainName'] = domain
46
- api_call('namecheap.domains.renew', args)
57
+ options = {:DomainName => domain}.merge(options)
58
+ get 'domains.renew', options
47
59
  end
48
60
 
61
+ # Gets the status of RegistrarLock for the requested domain.
62
+ # @see http://developer.namecheap.com/docs/doku.php?id=api-reference:domains:getregistrarlock
49
63
  def get_registrar_lock(domain, options = {})
50
- args = options.clone
51
- args['DomainName'] = domain
52
- api_call('namecheap.domains.getRegistrarLock', args)
64
+ options = {:DomainName => domain}.merge(options)
65
+ get 'domains.getRegistrarLock', options
53
66
  end
54
67
 
68
+ # Sets the RegistrarLock status for a domain.
69
+ # @see http://developer.namecheap.com/docs/doku.php?id=api-reference:domains:setregistrarlock
55
70
  def set_registrar_lock(domain, options = {})
56
- args = options.clone
57
- args['DomainName'] = domain
58
- api_call('namecheap.domains.setRegistrarLock', args)
71
+ options = {:DomainName => domain}.merge(options)
72
+ get 'domains.setRegistrarLock', options
59
73
  end
60
74
 
75
+ # Returns information about the requested domain.
76
+ # @see http://developer.namecheap.com/docs/doku.php?id=api-reference:domains:getinfo
61
77
  def get_info(domain, options = {})
62
- args = options.clone
63
- args['DomainName'] = domain
64
- api_call('namecheap.domains.getInfo', args)
78
+ options = {:DomainName => domain}.merge(options)
79
+ get 'domains.getInfo', options
65
80
  end
66
81
  end
67
82
  end