whoisxmlapi 0.0.13

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.
@@ -0,0 +1,18 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ .rvmrc
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in whoisxmlapi.gemspec
4
+ gemspec
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 Christopher Maujean
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,104 @@
1
+ # Whoisxmlapi
2
+
3
+ Gem for accessing whoisxmlapi.com based on httparty and mongoid
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'whoisxmlapi'
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install whoisxmlapi
18
+
19
+ ## Usage
20
+
21
+ *Whois*
22
+
23
+ # config/initializers/whoisxmlapi.rb
24
+ WhoisXMLAPI.configure do |config|
25
+ config.username = ENV['WHOISXMLAPI_USERNAME']
26
+ config.password = ENV['WHOISXMLAPI_PASSWORD']
27
+ config.cache = true
28
+ config.cache_length = 1.minute
29
+ end
30
+
31
+ # elsewhere
32
+ wc = WhoisXMLAPI::Client.new
33
+ y = wc.whois("google.com")
34
+
35
+ # y should now be a WhoisXMLAPI::Result (or an exeption was thrown)
36
+ y.registrant.email
37
+
38
+ Associate your model with a whois record:
39
+
40
+ has_one :whois, as: :whoisable, autosave: true, class_name: "WhoisXMLAPI::Result"
41
+
42
+ Now we can get at the data:
43
+
44
+ myinstance.whois.registrant.email
45
+
46
+ *RWhois*
47
+
48
+ z = wc.rwhois(cmaujean@brandle.net)
49
+ z.domains
50
+
51
+ Associate your model with a rwhois record:
52
+
53
+ has_one :rwhois, as: :rwhoisable, autosave: true, class_name: "WhoisXMLAPI::RWhoisResult"
54
+
55
+ *Account Balance*
56
+
57
+ Check your whoisxmlapi credits:
58
+
59
+ balance = wc.account_balance
60
+
61
+ # {
62
+ # "balance"=>"464",
63
+ # "reserve"=>"500",
64
+ # "monthly_balance"=>"0",
65
+ # "monthly_reserve"=>"0",
66
+ # "reverse_whois_balance"=>"0",
67
+ # "reverse_whois_reserve"=>"0",
68
+ # "reverse_whois_monthly_balance"=>"0",
69
+ # "reverse_whois_monthly_reserve"=>"0",
70
+ # "ba_query_balance"=>nil,
71
+ # "ba_query_reserve"=>nil,
72
+ # "ra_query_balance"=>nil,
73
+ # "ra_query_reserve"=>nil,
74
+ # "ds_query_balance"=>nil,
75
+ # "ds_query_reserve"=>nil
76
+ # }
77
+
78
+
79
+ *Callbacks*
80
+
81
+ You can add callbacks to your whois and rwhois calls via the initializer:
82
+
83
+ config.callbacks[:whois] << Proc.new { SystemCumulativeStats.increment_whoisxmlapi_requests }
84
+ config.callbacks[:rwhois] << Proc.new { SystemCumulativeStats.increment_rwhoisxmlapi_requests }
85
+
86
+ The callbacks will be called after the request to whoisxmlapi.com has been made. NOTE: Callback arguments are not currently supported.
87
+
88
+ *Exists*
89
+
90
+ Boolean check to see if a domain is registered.
91
+
92
+ wc.exists("foo.com")
93
+ #=> true
94
+
95
+ wc.exists("sdflsdfhwetewrw.com")
96
+ #=> false
97
+
98
+ ## Contributing
99
+
100
+ 1. Fork it
101
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
102
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
103
+ 4. Push to the branch (`git push origin my-new-feature`)
104
+ 5. Create new Pull Request
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,79 @@
1
+ require_relative "./whoisxmlapi/version"
2
+ require_relative "./whoisxmlapi/contact"
3
+ require_relative "./whoisxmlapi/result"
4
+ require_relative "./whoisxmlapi/good"
5
+ require_relative "./whoisxmlapi/un_parsable"
6
+ require_relative "./whoisxmlapi/bad_domain"
7
+ require_relative "./whoisxmlapi/unavailable"
8
+ require_relative "./whoisxmlapi/client"
9
+ require_relative "./whoisxmlapi/rwhois_result"
10
+
11
+ module WhoisXMLAPI
12
+ def self.domain
13
+ @domain
14
+ end
15
+
16
+ def self.domain=(dom)
17
+ @domain = dom
18
+ end
19
+
20
+ def self.username
21
+ @username
22
+ end
23
+
24
+ def self.username=(uname)
25
+ @username = uname
26
+ end
27
+
28
+ def self.password
29
+ @password
30
+ end
31
+
32
+ def self.password=(pass)
33
+ @password = pass
34
+ end
35
+
36
+ def self.cache_length=(leng)
37
+ @cache_length = leng
38
+ end
39
+
40
+ def self.cache_length
41
+ @cache_length
42
+ end
43
+
44
+ def self.cache=(bool)
45
+ @cache = bool
46
+ end
47
+
48
+ def self.cache
49
+ @cache.nil? or @cache.blank? ? true : @cache
50
+ end
51
+
52
+ def self.rwhois_mode=(mode)
53
+ @rwhois_mode = mode
54
+ end
55
+
56
+ def self.rwhois_mode
57
+ @rwhois_mode ? @rwhois_mode : 'sample_purchase'
58
+ end
59
+
60
+ def self.callbacks
61
+ @callbacks ||= {}
62
+ @callbacks[:whois] ||= []
63
+ @callbacks[:rwhois] ||= []
64
+ @callbacks
65
+ end
66
+
67
+ def self.logger
68
+ @logger ||= Logger.new(STDOUT)
69
+ @logger
70
+ end
71
+
72
+ def self.logger=(log)
73
+ @logger = log
74
+ end
75
+
76
+ def self.configure
77
+ yield self
78
+ end
79
+ end
@@ -0,0 +1,8 @@
1
+ module WhoisXMLAPI
2
+ class BadDomain < WhoisXMLAPI::Result
3
+ def parse(domain)
4
+ self.domain = "#{domain} is invalid."
5
+ self.save
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,153 @@
1
+ require 'httparty'
2
+ require 'active_support/core_ext'
3
+ require 'json'
4
+ require 'public_suffix'
5
+
6
+ module WhoisXMLAPI
7
+ class Client
8
+ def whois(domain)
9
+ unless PublicSuffix.valid?(domain)
10
+ res = WhoisXMLAPI::BadDomain.new
11
+ res.parse(domain)
12
+ return res
13
+ end
14
+
15
+ query = WhoisXMLAPI::Result.where(:domain => domain)
16
+
17
+ if WhoisXMLAPI.cache
18
+ query = query.where(:created_at.gte => (Time.now - WhoisXMLAPI.cache_length))
19
+ end
20
+
21
+ res = query.first
22
+
23
+ if res && res._type != "WhoisXMLAPI::Unavailable"
24
+ return res
25
+ else
26
+ xquery = {
27
+ :domainName => domain,
28
+ :outputFormat => 'json', # TODO: make into a config setting. see the JSON.parse line below for the rest of this change
29
+ :userName => WhoisXMLAPI.username,
30
+ :password => WhoisXMLAPI.password
31
+ }
32
+ begin
33
+ r = HTTParty.get("#{WhoisXMLAPI.domain}/whoisserver/WhoisService", :query => xquery)
34
+ rescue Exception => e
35
+ WhoisXMLAPI.logger.info("Error getting Whois info: #{e}")
36
+ res = WhoisXMLAPI::Unavailable.new
37
+ res.parse(domain)
38
+ return res
39
+ end
40
+
41
+ res = WhoisXMLAPI::Good.new
42
+
43
+ if WhoisXMLAPI.callbacks[:whois]
44
+ WhoisXMLAPI.callbacks[:whois].each do |cb|
45
+ cb.call
46
+ end
47
+ end
48
+
49
+ # TODO: with the above outputFormat change, use a Parser plugin instead of this
50
+ presponse = JSON.parse(r.parsed_response)
51
+
52
+ if (200..299).include? r.code.to_i and not presponse.key? 'ErrorMessage'
53
+ res.parse(presponse['WhoisRecord'])
54
+ res.save
55
+ return res
56
+ else
57
+ WhoisXMLAPI.logger.info("Error getting Whois info: #{e}")
58
+ res = WhoisXMLAPI::Unavailable.new
59
+ res.parse(domain)
60
+ return res
61
+ end
62
+ end
63
+ end
64
+
65
+ def rwhois(entity_name)
66
+ return nil if entity_name.nil?
67
+ query = WhoisXMLAPI::RWhoisResult.where(:entity_name => entity_name)
68
+ if WhoisXMLAPI.cache
69
+ query = query.where(:created_at.gte => (Time.now - WhoisXMLAPI.cache_length))
70
+ end
71
+ res = query.first
72
+
73
+ if res
74
+ Rails.logger.debug "WhoisXMLAPI rwhois - have cached rwhois data for #{entity_name}"
75
+ else
76
+ Rails.logger.debug "WhoisXMLAPI rwhois - no cached rwhois data for #{entity_name}"
77
+ res = WhoisXMLAPI::RWhoisResult.create(:entity_name => entity_name)
78
+ rquery = {
79
+ :term1 => entity_name,
80
+ :search_type => 'current',
81
+ :mode => WhoisXMLAPI.rwhois_mode,
82
+ :username => WhoisXMLAPI.username,
83
+ :password => WhoisXMLAPI.password
84
+ }
85
+ r = HTTParty.get("#{WhoisXMLAPI.domain}/reverse-whois-api/search.php", :query => rquery)
86
+ if WhoisXMLAPI.callbacks[:rwhois]
87
+ WhoisXMLAPI.callbacks[:rwhois].each do |cb|
88
+ cb.call
89
+ end
90
+ end
91
+ if r && r.parsed_response && r.parsed_response['domains']
92
+ res.domains = r.parsed_response['domains']
93
+ res.save
94
+ elsif PublicSuffix.valid?(entity_name)
95
+ domain = PublicSuffix.parse(entity_name)
96
+ domain_sld = domain.sld
97
+ Rails.logger.debug "WhoisXMLAPI rwhois - no domains found for domain #{entity_name}, trying #{domain_sld}"
98
+ res = WhoisXMLAPI::RWhoisResult.create(:entity_name => domain_sld)
99
+ rquery = {
100
+ :term1 => domain_sld,
101
+ :search_type => 'current',
102
+ :mode => WhoisXMLAPI.rwhois_mode,
103
+ :username => WhoisXMLAPI.username,
104
+ :password => WhoisXMLAPI.password
105
+ }
106
+ r = HTTParty.get("#{WhoisXMLAPI.domain}/reverse-whois-api/search.php", :query => rquery)
107
+ if WhoisXMLAPI.callbacks[:rwhois]
108
+ WhoisXMLAPI.callbacks[:rwhois].each do |cb|
109
+ cb.call
110
+ end
111
+ end
112
+ if r && r.parsed_response && r.parsed_response['domains']
113
+ res.domains = r.parsed_response['domains']
114
+ res.save
115
+ else
116
+ res.domains = []
117
+ res.save
118
+ end
119
+ else
120
+ Rails.logger.debug "WhoisXMLAPI rwhois - no domains found for #{entity_name}!"
121
+ res.domains = []
122
+ res.save
123
+ end
124
+ end
125
+ res
126
+ end
127
+
128
+ def exists?(domain)
129
+ xquery = {
130
+ :cmd => 'GET_DN_AVAILABILITY',
131
+ :domainName => domain,
132
+ :outputFormat => 'json',
133
+ :userName => WhoisXMLAPI.username,
134
+ :password => WhoisXMLAPI.password
135
+ }
136
+ r = HTTParty.get("#{WhoisXMLAPI.domain}/whoisserver/WhoisService", :query => xquery)
137
+
138
+ resp = JSON.parse(r.parsed_response)
139
+ resp["DomainInfo"]["domainAvailability"] == "UNAVAILABLE"
140
+ end
141
+
142
+ def account_balance
143
+ aquery = {
144
+ :servicetype => 'accountbalance',
145
+ :output_format => 'JSON',
146
+ :username => WhoisXMLAPI.username,
147
+ :password => WhoisXMLAPI.password
148
+ }
149
+ r = HTTParty.get("#{WhoisXMLAPI.domain}/accountServices.php", :query => aquery)
150
+ JSON.parse(r.parsed_response)
151
+ end
152
+ end
153
+ end
@@ -0,0 +1,19 @@
1
+ module WhoisXMLAPI
2
+ class Contact
3
+ include Mongoid::Document
4
+ include Mongoid::Timestamps
5
+
6
+ belongs_to :contactable, :polymorphic => true
7
+
8
+ field :name
9
+ field :organization
10
+ field :street1
11
+ field :street2
12
+ field :city
13
+ field :state
14
+ field :postalCode
15
+ field :country
16
+ field :email
17
+ field :telephone
18
+ end
19
+ end
@@ -0,0 +1,4 @@
1
+ module WhoisXMLAPI
2
+ class Good < WhoisXMLAPI::Result
3
+ end
4
+ end
@@ -0,0 +1,67 @@
1
+ require 'mongoid'
2
+
3
+ module WhoisXMLAPI
4
+ class Result
5
+ include Mongoid::Document
6
+ include Mongoid::Timestamps
7
+
8
+ field :domain
9
+ field :record_created
10
+ field :record_updated
11
+ field :record_expires
12
+ field :registrar
13
+ field :nameservers, :type => Array
14
+
15
+ has_one :registrant, :as => :contactable, :class_name => "WhoisXMLAPI::Contact", :autosave => true
16
+ has_one :admin, :as => :contactable, :class_name => "WhoisXMLAPI::Contact", :autosave => true
17
+ has_one :tech, :as => :contactable, :class_name => "WhoisXMLAPI::Contact", :autosave => true
18
+ has_one :billing, :as => :contactable, :class_name => "WhoisXMLAPI::Contact", :autosave => true
19
+
20
+ belongs_to :whoisable, :polymorphic => true
21
+
22
+ def parse(record)
23
+ self.domain = record['domainName']
24
+
25
+ if record['registryData']
26
+ self.record_created = record['registryData']['createdDate']
27
+ self.record_updated = record['registryData']['updatedDate']
28
+ self.record_expires = record['registryData']['expiresDate']
29
+ else
30
+ res = WhoisXMLAPI::UnParsable.new
31
+ res.parse(record)
32
+ return res
33
+ end
34
+
35
+ self.registrar = record['registrarName']
36
+ self.nameservers = record['nameServers'] ? record['nameServers']['hostNames'] : (record['registryData'] && record['registryData']['nameServers'] ? record['registryData']['nameServers']['hostNames'] : nil)
37
+ registrant_data = record['registrant'] || (record['registryData'] ? record['registryData']['registrant'] : nil)
38
+
39
+ if registrant_data.nil?
40
+ res = WhoisXMLAPI::UnParsable.new
41
+ res.parse(record)
42
+ return res
43
+ end
44
+
45
+ # more "optional" data
46
+ administrative_data = record['administrativeContact'] || (record['registryData'] ? record['registryData']['administrativeContact'] : nil)
47
+ technical_data = record['technicalContact'] || (record['registryData'] ? record['registryData']['technicalContact'] : nil)
48
+ billing_data = record['billingContact'] || (record['registryData'] ? record['registryData']['billingContact'] : nil)
49
+
50
+ self.registrant = WhoisXMLAPI::Contact.create(registrant_data.merge({'email' => record['contactEmail']})) if registrant_data
51
+ self.admin = WhoisXMLAPI::Contact.create(administrative_data) if administrative_data
52
+ self.tech = WhoisXMLAPI::Contact.create(technical_data) if technical_data
53
+ self.billing = WhoisXMLAPI::Contact.create(billing_data) if billing_data
54
+ end
55
+
56
+ def complete?
57
+ ( self.domain and self.registrar and ( self.registrant or self.admin or self.tech) )
58
+ end
59
+
60
+ def private?
61
+ %w/networksolutionsprivateregistration.com domainprivacygroup.com/.each do |priv|
62
+ return true if self.registrant.email =~ /#{priv}/
63
+ end
64
+ false
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,11 @@
1
+ module WhoisXMLAPI
2
+ class RWhoisResult
3
+ include Mongoid::Document
4
+ include Mongoid::Timestamps
5
+
6
+ belongs_to :rwhoisable, :polymorphic => true
7
+ field :entity_name, :type => String
8
+ field :domains, :type => Array
9
+
10
+ end
11
+ end
@@ -0,0 +1,33 @@
1
+ module WhoisXMLAPI
2
+ class UnParsable < WhoisXMLAPI::Result
3
+ def parse(record)
4
+ self.domain = record['domainName']
5
+
6
+ if record['registryData']
7
+ self.record_created = record['registryData']['createdDate']
8
+ self.record_updated = record['registryData']['updatedDate']
9
+ self.record_expires = record['registryData']['expiresDate']
10
+ end
11
+
12
+ self.registrar = record['registrarName']
13
+ self.nameservers = record['nameServers'] ? record['nameServers']['hostNames'] : []
14
+
15
+ registrant_data = record['registrant']
16
+
17
+ unless registrant_data
18
+ if record['registryData'] and record['registryData']['registrant']
19
+ registrant_data = record['registryData']['registrant']
20
+ else
21
+ registrant_data = {}
22
+ end
23
+ end
24
+ if record
25
+ registrant_data.merge({'email' => record['contactEmail']}) if record['contactEmail']
26
+ self.registrant = WhoisXMLAPI::Contact.create(registrant_data)
27
+ self.admin = WhoisXMLAPI::Contact.create(record['administrativeContact']) if record['administrativeContact']
28
+ self.tech = WhoisXMLAPI::Contact.create(record['technicalContact']) if record['technicalContact']
29
+ self.billing = WhoisXMLAPI::Contact.create(record['billingContact']) if record['billingContact']
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,8 @@
1
+ module WhoisXMLAPI
2
+ class Unavailable < WhoisXMLAPI::Result
3
+ def parse(domain)
4
+ self.domain = domain
5
+ self.save
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,3 @@
1
+ module WhoisXMLAPI
2
+ VERSION = "0.0.13"
3
+ end
@@ -0,0 +1,28 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'whoisxmlapi/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "whoisxmlapi"
8
+ spec.version = WhoisXMLAPI::VERSION
9
+ spec.authors = ["Christopher Maujean", "David Hillard"]
10
+ spec.email = ["cmaujean@brandle.net"]
11
+ spec.description = %q{Gem for accessing the Whois XML API via JSON, with caching}
12
+ spec.summary = %q{whoisxmlapi.com access}
13
+ spec.homepage = "http://brandle.net/"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files`.split($/)
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_dependency "activesupport", "~> 3.2"
22
+ spec.add_dependency "mongoid"
23
+ spec.add_dependency "httparty"
24
+ spec.add_dependency "public_suffix"
25
+
26
+ spec.add_development_dependency "bundler", "~> 1.3"
27
+ spec.add_development_dependency "rake"
28
+ end
metadata ADDED
@@ -0,0 +1,159 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: whoisxmlapi
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.13
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Christopher Maujean
9
+ - David Hillard
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2015-05-14 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: activesupport
17
+ requirement: !ruby/object:Gem::Requirement
18
+ none: false
19
+ requirements:
20
+ - - ~>
21
+ - !ruby/object:Gem::Version
22
+ version: '3.2'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - ~>
29
+ - !ruby/object:Gem::Version
30
+ version: '3.2'
31
+ - !ruby/object:Gem::Dependency
32
+ name: mongoid
33
+ requirement: !ruby/object:Gem::Requirement
34
+ none: false
35
+ requirements:
36
+ - - ! '>='
37
+ - !ruby/object:Gem::Version
38
+ version: '0'
39
+ type: :runtime
40
+ prerelease: false
41
+ version_requirements: !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ! '>='
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
47
+ - !ruby/object:Gem::Dependency
48
+ name: httparty
49
+ requirement: !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ type: :runtime
56
+ prerelease: false
57
+ version_requirements: !ruby/object:Gem::Requirement
58
+ none: false
59
+ requirements:
60
+ - - ! '>='
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ - !ruby/object:Gem::Dependency
64
+ name: public_suffix
65
+ requirement: !ruby/object:Gem::Requirement
66
+ none: false
67
+ requirements:
68
+ - - ! '>='
69
+ - !ruby/object:Gem::Version
70
+ version: '0'
71
+ type: :runtime
72
+ prerelease: false
73
+ version_requirements: !ruby/object:Gem::Requirement
74
+ none: false
75
+ requirements:
76
+ - - ! '>='
77
+ - !ruby/object:Gem::Version
78
+ version: '0'
79
+ - !ruby/object:Gem::Dependency
80
+ name: bundler
81
+ requirement: !ruby/object:Gem::Requirement
82
+ none: false
83
+ requirements:
84
+ - - ~>
85
+ - !ruby/object:Gem::Version
86
+ version: '1.3'
87
+ type: :development
88
+ prerelease: false
89
+ version_requirements: !ruby/object:Gem::Requirement
90
+ none: false
91
+ requirements:
92
+ - - ~>
93
+ - !ruby/object:Gem::Version
94
+ version: '1.3'
95
+ - !ruby/object:Gem::Dependency
96
+ name: rake
97
+ requirement: !ruby/object:Gem::Requirement
98
+ none: false
99
+ requirements:
100
+ - - ! '>='
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
103
+ type: :development
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ none: false
107
+ requirements:
108
+ - - ! '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ description: Gem for accessing the Whois XML API via JSON, with caching
112
+ email:
113
+ - cmaujean@brandle.net
114
+ executables: []
115
+ extensions: []
116
+ extra_rdoc_files: []
117
+ files:
118
+ - .gitignore
119
+ - Gemfile
120
+ - LICENSE.txt
121
+ - README.md
122
+ - Rakefile
123
+ - lib/whoisxmlapi.rb
124
+ - lib/whoisxmlapi/bad_domain.rb
125
+ - lib/whoisxmlapi/client.rb
126
+ - lib/whoisxmlapi/contact.rb
127
+ - lib/whoisxmlapi/good.rb
128
+ - lib/whoisxmlapi/result.rb
129
+ - lib/whoisxmlapi/rwhois_result.rb
130
+ - lib/whoisxmlapi/un_parsable.rb
131
+ - lib/whoisxmlapi/unavailable.rb
132
+ - lib/whoisxmlapi/version.rb
133
+ - whoisxmlapi.gemspec
134
+ homepage: http://brandle.net/
135
+ licenses:
136
+ - MIT
137
+ post_install_message:
138
+ rdoc_options: []
139
+ require_paths:
140
+ - lib
141
+ required_ruby_version: !ruby/object:Gem::Requirement
142
+ none: false
143
+ requirements:
144
+ - - ! '>='
145
+ - !ruby/object:Gem::Version
146
+ version: '0'
147
+ required_rubygems_version: !ruby/object:Gem::Requirement
148
+ none: false
149
+ requirements:
150
+ - - ! '>='
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ requirements: []
154
+ rubyforge_project:
155
+ rubygems_version: 1.8.21
156
+ signing_key:
157
+ specification_version: 3
158
+ summary: whoisxmlapi.com access
159
+ test_files: []