diff --git a/lib/whois/parsers/whois.namejuice.com.rb b/lib/whois/parsers/whois.namejuice.com.rb new file mode 100644 index 00000000..9c9e9f9c --- /dev/null +++ b/lib/whois/parsers/whois.namejuice.com.rb @@ -0,0 +1,60 @@ +#-- +# Ruby Whois +# +# An intelligent pure Ruby WHOIS client and parser. +# +# Copyright (c) 2009-2018 Simone Carletti +#++ + + +require_relative 'base_icann_compliant' + + +module Whois + class Parsers + + class WhoisNamejuiceCom < BaseIcannCompliant + self.scanner = Scanners::BaseIcannCompliant, { + pattern_available: /^Domain Name not found\n/ + } + + property_supported :domain do + node("Domain name", &:downcase) + end + + property_supported :registrant_contacts do + build_contact("Registrant", Parser::Contact::TYPE_REGISTRANT) + end + + property_supported :admin_contacts do + build_contact("Admin", Parser::Contact::TYPE_ADMINISTRATIVE) + end + + property_supported :technical_contacts do + build_contact("Tech", Parser::Contact::TYPE_TECHNICAL) + end + + private + + def build_contact(element, type) + node("#{element} Name") do + Parser::Contact.new( + type: type, + id: node("Registry #{element} ID").presence, + name: value_for_property(element, 'Name'), + organization: value_for_property(element, 'Organization'), + address: value_for_property(element, 'Street'), + city: value_for_property(element, 'City'), + zip: value_for_property(element, 'Postal Code'), + state: value_for_property(element, 'State/Province'), + country_code: value_for_property(element, 'Country'), + phone: value_for_phone_property(element, 'Phone'), + fax: value_for_phone_property(element, 'Fax'), + email: value_for_property(element, 'Email') + ) + end + end + + end + end +end diff --git a/spec/fixtures/responses/whois.namejuice.com/status_available.expected b/spec/fixtures/responses/whois.namejuice.com/status_available.expected new file mode 100644 index 00000000..f0e6a67f --- /dev/null +++ b/spec/fixtures/responses/whois.namejuice.com/status_available.expected @@ -0,0 +1,42 @@ +#domain + %s == nil + +#domain_id + %s == nil + +#status + %s == :available + +#available? + %s == true + +#registered? + %s == false + +#created_on + %s == nil + +#updated_on + %s == nil + +#expires_on + %s == nil + +#registrar + %s == nil + +#registrant_contacts + %s %CLASS{array} + %s == [] + +#admin_contacts + %s %CLASS{array} + %s == [] + +#technical_contacts + %s %CLASS{array} + %s == [] + +#nameservers + %s %CLASS{array} + %s == [] diff --git a/spec/fixtures/responses/whois.namejuice.com/status_available.txt b/spec/fixtures/responses/whois.namejuice.com/status_available.txt new file mode 100644 index 00000000..a395a6c2 --- /dev/null +++ b/spec/fixtures/responses/whois.namejuice.com/status_available.txt @@ -0,0 +1 @@ +Domain Name not found diff --git a/spec/fixtures/responses/whois.namejuice.com/status_registered.expected b/spec/fixtures/responses/whois.namejuice.com/status_registered.expected new file mode 100644 index 00000000..a6eee241 --- /dev/null +++ b/spec/fixtures/responses/whois.namejuice.com/status_registered.expected @@ -0,0 +1,93 @@ +#domain + %s == "domain.com" + +#domain_id + %s == "104784662_DOMAIN_COM-VRSN" + +#status + %s == :registered + +#available? + %s == false + +#registered? + %s == true + +#created_on + %s %CLASS{time} + %s %TIME{2004-03-25 16:06:56 UTC} + +#updated_on + %s %CLASS{time} + %s %TIME{2018-05-03 09:52:37 UTC} + +#expires_on + %s %CLASS{time} + %s %TIME{2020-10-09 04:00:00 UTC} + +#registrar + %s %CLASS{registrar} + %s.id == "636" + %s.name == "BRANDON GRAY INTERNET SERVICES, INC. DBA NAMEJUICE.COM" + %s.organization == "BRANDON GRAY INTERNET SERVICES, INC. DBA NAMEJUICE.COM" + %s.url == "http://www.namejuice.com" + +#registrant_contacts + %s %CLASS{array} + %s %SIZE{1} + %s[0] %CLASS{contact} + %s[0].type == Whois::Parser::Contact::TYPE_REGISTRANT + %s[0].name == "Domain Registrar" + %s[0].organization == "Brandon Gray Internet Services Inc." + %s[0].address == "7100 Warden Ave, Unit 8" + %s[0].city == "Markham" + %s[0].zip == "L3R 8B5" + %s[0].state == "ON" + %s[0].country_code == "CA" + %s[0].phone == "+1.9054152681" + %s[0].fax == "+1.9054152682" + %s[0].email == "registrar@namejuice.com" + +#admin_contacts + %s %CLASS{array} + %s %SIZE{1} + %s[0] %CLASS{contact} + %s[0].type == Whois::Parser::Contact::TYPE_ADMINISTRATIVE + %s[0].name == "Domain Registrar" + %s[0].organization == "Brandon Gray Internet Services Inc." + %s[0].address == "7100 Warden Ave, Unit 8" + %s[0].city == "Markham" + %s[0].zip == "L3R 8B5" + %s[0].state == "ON" + %s[0].country_code == "CA" + %s[0].phone == "+1.9054152681" + %s[0].fax == "+1.9054152682" + %s[0].email == "registrar@namejuice.com" + +#technical_contacts + %s %CLASS{array} + %s %SIZE{1} + %s[0] %CLASS{contact} + %s[0].type == Whois::Parser::Contact::TYPE_TECHNICAL + %s[0].name == "Domain Registrar" + %s[0].organization == "Brandon Gray Internet Services Inc." + %s[0].address == "7100 Warden Ave, Unit 8" + %s[0].city == "Markham" + %s[0].zip == "L3R 8B5" + %s[0].state == "ON" + %s[0].country_code == "CA" + %s[0].phone == "+1.9054152681" + %s[0].fax == "+1.9054152682" + %s[0].email == "registrar@namejuice.com" + +#nameservers + %s %CLASS{array} + %s %SIZE{4} + %s[0] %CLASS{nameserver} + %s[0].name == "dns1.nameresolvers.com" + %s[1] %CLASS{nameserver} + %s[1].name == "dns2.nameresolvers.com" + %s[2] %CLASS{nameserver} + %s[2].name == "dns3.nameresolvers.com" + %s[3] %CLASS{nameserver} + %s[3].name == "dns4.nameresolvers.com" diff --git a/spec/fixtures/responses/whois.namejuice.com/status_registered.txt b/spec/fixtures/responses/whois.namejuice.com/status_registered.txt new file mode 100644 index 00000000..efbfab8a --- /dev/null +++ b/spec/fixtures/responses/whois.namejuice.com/status_registered.txt @@ -0,0 +1,84 @@ + +Domain name: NAMEJUICE.COM +Registry Domain ID: 104784662_DOMAIN_COM-VRSN +Registrar WHOIS Server: whois.namejuice.com +Registrar URL: http://www.namejuice.com +Updated Date: 2018-05-03T09:52:37Z +Creation Date: 2004-03-25T16:06:56Z +Registrar Registration Expiration Date: 2020-10-09T04:00:00Z +Registrar: BRANDON GRAY INTERNET SERVICES, INC. DBA NAMEJUICE.COM +Registrar IANA ID: 636 +Registrar Abuse Contact Email: abuse@namejuice.com +Registrar Abuse Contact Phone: +1.9054152681 +Domain Status: clientDeleteProhibited https://www.icann.org/epp#clientDeleteProhibited +Domain Status: clientTransferProhibited https://www.icann.org/epp#clientTransferProhibited +Registry Registrant ID: +Registrant Name: Domain Registrar +Registrant Organization: Brandon Gray Internet Services Inc. +Registrant Street: 7100 Warden Ave +Registrant Street: Unit 8 +Registrant City: Markham +Registrant State/Province: ON +Registrant Postal Code: L3R 8B5 +Registrant Country: CA +Registrant Phone: +1.9054152681 +Registrant Phone Ext: +Registrant Fax: +1.9054152682 +Registrant Fax Ext: +Registrant Email: registrar@namejuice.com +Registry Admin ID: +Admin Name: Domain Registrar +Admin Organization: Brandon Gray Internet Services Inc. +Admin Street: 7100 Warden Ave +Admin Street: Unit 8 +Admin City: Markham +Admin State/Province: ON +Admin Postal Code: L3R 8B5 +Admin Country: CA +Admin Phone: +1.9054152681 +Admin Phone Ext: +Admin Fax: +1.9054152682 +Admin Fax Ext: +Admin Email: registrar@namejuice.com +Registry Tech ID: +Tech Name: Domain Registrar +Tech Organization: Brandon Gray Internet Services Inc. +Tech Street: 7100 Warden Ave +Tech Street: Unit 8 +Tech City: Markham +Tech State/Province: ON +Tech Postal Code: L3R 8B5 +Tech Country: CA +Tech Phone: +1.9054152681 +Tech Phone Ext: +Tech Fax: +1.9054152682 +Tech Fax Ext: +Tech Email: registrar@namejuice.com +Name Server: DNS1.NAMERESOLVERS.COM +Name Server: DNS2.NAMERESOLVERS.COM +Name Server: DNS3.NAMERESOLVERS.COM +Name Server: DNS4.NAMERESOLVERS.COM +DNSSEC: Unsigned +URL of the ICANN WHOIS Data Problem Reporting System: http://wdprs.internic.net/ +Last update of WHOIS database: 2018-05-03T09:52:37Z + +For more information on Whois status codes, please visit https://www.icann.org/resources/pages/epp-status-codes-2014-06-16-en. + + + +The data in this whois database is provided to you for information +purposes only, that is, to assist you in obtaining information about or +related to a domain name registration record. We make this information +available "as is," and do not guarantee its accuracy. By submitting a +whois query, you agree that you will use this data only for lawful +purposes and that, under no circumstances will you use this data to: (1) +enable high volume, automated, electronic processes that stress or load +this whois database system providing you this information; or (2) allow, +enable, or otherwise support the transmission of mass unsolicited, +commercial advertising or solicitations via direct mail, electronic +mail, or by telephone. The compilation, repackaging, dissemination or +other use of this data is expressly prohibited without prior written +consent from us. + +We reserve the right to modify these terms at any time. By submitting +this query, you agree to abide by these terms! diff --git a/spec/whois/parsers/responses/whois.namejuice.com/status_available_spec.rb b/spec/whois/parsers/responses/whois.namejuice.com/status_available_spec.rb new file mode 100644 index 00000000..71643e7e --- /dev/null +++ b/spec/whois/parsers/responses/whois.namejuice.com/status_available_spec.rb @@ -0,0 +1,93 @@ +# encoding: utf-8 + +# This file is autogenerated. Do not edit it manually. +# If you want change the content of this file, edit +# +# /spec/fixtures/responses/whois.namejuice.com/status_available.expected +# +# and regenerate the tests with the following rake task +# +# $ rake spec:generate +# + +require 'spec_helper' +require 'whois/parsers/whois.namejuice.com.rb' + +describe Whois::Parsers::WhoisNamejuiceCom, "status_available.expected" do + + subject do + file = fixture("responses", "whois.namejuice.com/status_available.txt") + part = Whois::Record::Part.new(body: File.read(file)) + described_class.new(part) + end + + describe "#domain" do + it do + expect(subject.domain).to eq(nil) + end + end + describe "#domain_id" do + it do + expect(subject.domain_id).to eq(nil) + end + end + describe "#status" do + it do + expect(subject.status).to eq(:available) + end + end + describe "#available?" do + it do + expect(subject.available?).to eq(true) + end + end + describe "#registered?" do + it do + expect(subject.registered?).to eq(false) + end + end + describe "#created_on" do + it do + expect(subject.created_on).to eq(nil) + end + end + describe "#updated_on" do + it do + expect(subject.updated_on).to eq(nil) + end + end + describe "#expires_on" do + it do + expect(subject.expires_on).to eq(nil) + end + end + describe "#registrar" do + it do + expect(subject.registrar).to eq(nil) + end + end + describe "#registrant_contacts" do + it do + expect(subject.registrant_contacts).to be_a(Array) + expect(subject.registrant_contacts).to eq([]) + end + end + describe "#admin_contacts" do + it do + expect(subject.admin_contacts).to be_a(Array) + expect(subject.admin_contacts).to eq([]) + end + end + describe "#technical_contacts" do + it do + expect(subject.technical_contacts).to be_a(Array) + expect(subject.technical_contacts).to eq([]) + end + end + describe "#nameservers" do + it do + expect(subject.nameservers).to be_a(Array) + expect(subject.nameservers).to eq([]) + end + end +end diff --git a/spec/whois/parsers/responses/whois.namejuice.com/status_registered_spec.rb b/spec/whois/parsers/responses/whois.namejuice.com/status_registered_spec.rb new file mode 100644 index 00000000..3b94a2b6 --- /dev/null +++ b/spec/whois/parsers/responses/whois.namejuice.com/status_registered_spec.rb @@ -0,0 +1,144 @@ +# encoding: utf-8 + +# This file is autogenerated. Do not edit it manually. +# If you want change the content of this file, edit +# +# /spec/fixtures/responses/whois.namejuice.com/status_registered.expected +# +# and regenerate the tests with the following rake task +# +# $ rake spec:generate +# + +require 'spec_helper' +require 'whois/parsers/whois.namejuice.com.rb' + +describe Whois::Parsers::WhoisNamejuiceCom, "status_registered.expected" do + + subject do + file = fixture("responses", "whois.namejuice.com/status_registered.txt") + part = Whois::Record::Part.new(body: File.read(file)) + described_class.new(part) + end + + describe "#domain" do + it do + expect(subject.domain).to eq("namejuice.com") + end + end + describe "#domain_id" do + it do + expect(subject.domain_id).to eq("104784662_DOMAIN_COM-VRSN") + end + end + describe "#status" do + it do + expect(subject.status).to eq(:registered) + end + end + describe "#available?" do + it do + expect(subject.available?).to eq(false) + end + end + describe "#registered?" do + it do + expect(subject.registered?).to eq(true) + end + end + describe "#created_on" do + it do + expect(subject.created_on).to be_a(Time) + expect(subject.created_on).to eq(Time.parse("2004-03-25 16:06:56 UTC")) + end + end + describe "#updated_on" do + it do + expect(subject.updated_on).to be_a(Time) + expect(subject.updated_on).to eq(Time.parse("2018-05-03 09:52:37 UTC")) + end + end + describe "#expires_on" do + it do + expect(subject.expires_on).to be_a(Time) + expect(subject.expires_on).to eq(Time.parse("2020-10-09 04:00:00 UTC")) + end + end + describe "#registrar" do + it do + expect(subject.registrar).to be_a(Whois::Parser::Registrar) + expect(subject.registrar.id).to eq("636") + expect(subject.registrar.name).to eq("BRANDON GRAY INTERNET SERVICES, INC. DBA NAMEJUICE.COM") + expect(subject.registrar.organization).to eq("BRANDON GRAY INTERNET SERVICES, INC. DBA NAMEJUICE.COM") + expect(subject.registrar.url).to eq("http://www.namejuice.com") + end + end + describe "#registrant_contacts" do + it do + expect(subject.registrant_contacts).to be_a(Array) + expect(subject.registrant_contacts.size).to eq(1) + expect(subject.registrant_contacts[0]).to be_a(Whois::Parser::Contact) + expect(subject.registrant_contacts[0].type).to eq(Whois::Parser::Contact::TYPE_REGISTRANT) + expect(subject.registrant_contacts[0].name).to eq("Domain Registrar") + expect(subject.registrant_contacts[0].organization).to eq("Brandon Gray Internet Services Inc.") + expect(subject.registrant_contacts[0].address).to eq("7100 Warden Ave, Unit 8") + expect(subject.registrant_contacts[0].city).to eq("Markham") + expect(subject.registrant_contacts[0].zip).to eq("L3R 8B5") + expect(subject.registrant_contacts[0].state).to eq("ON") + expect(subject.registrant_contacts[0].country_code).to eq("CA") + expect(subject.registrant_contacts[0].phone).to eq("+1.9054152681") + expect(subject.registrant_contacts[0].fax).to eq("+1.9054152682") + expect(subject.registrant_contacts[0].email).to eq("registrar@namejuice.com") + end + end + describe "#admin_contacts" do + it do + expect(subject.admin_contacts).to be_a(Array) + expect(subject.admin_contacts.size).to eq(1) + expect(subject.admin_contacts[0]).to be_a(Whois::Parser::Contact) + expect(subject.admin_contacts[0].type).to eq(Whois::Parser::Contact::TYPE_ADMINISTRATIVE) + expect(subject.admin_contacts[0].name).to eq("Domain Registrar") + expect(subject.admin_contacts[0].organization).to eq("Brandon Gray Internet Services Inc.") + expect(subject.admin_contacts[0].address).to eq("7100 Warden Ave, Unit 8") + expect(subject.admin_contacts[0].city).to eq("Markham") + expect(subject.admin_contacts[0].zip).to eq("L3R 8B5") + expect(subject.admin_contacts[0].state).to eq("ON") + expect(subject.admin_contacts[0].country_code).to eq("CA") + expect(subject.admin_contacts[0].phone).to eq("+1.9054152681") + expect(subject.admin_contacts[0].fax).to eq("+1.9054152682") + expect(subject.admin_contacts[0].email).to eq("registrar@namejuice.com") + end + end + describe "#technical_contacts" do + it do + expect(subject.technical_contacts).to be_a(Array) + expect(subject.technical_contacts.size).to eq(1) + expect(subject.technical_contacts[0]).to be_a(Whois::Parser::Contact) + expect(subject.technical_contacts[0].type).to eq(Whois::Parser::Contact::TYPE_TECHNICAL) + expect(subject.technical_contacts[0].name).to eq("Domain Registrar") + expect(subject.technical_contacts[0].organization).to eq("Brandon Gray Internet Services Inc.") + expect(subject.technical_contacts[0].address).to eq("7100 Warden Ave, Unit 8") + expect(subject.technical_contacts[0].city).to eq("Markham") + expect(subject.technical_contacts[0].zip).to eq("L3R 8B5") + expect(subject.technical_contacts[0].state).to eq("ON") + expect(subject.technical_contacts[0].country_code).to eq("CA") + expect(subject.technical_contacts[0].phone).to eq("+1.9054152681") + expect(subject.technical_contacts[0].fax).to eq("+1.9054152682") + expect(subject.technical_contacts[0].email).to eq("registrar@namejuice.com") + end + end + describe "#nameservers" do + it do + expect(subject.nameservers).to be_a(Array) + expect(subject.nameservers.size).to eq(4) + expect(subject.nameservers[0]).to be_a(Whois::Parser::Nameserver) + expect(subject.nameservers[0].name).to eq("dns1.nameresolvers.com") + expect(subject.nameservers[1]).to be_a(Whois::Parser::Nameserver) + expect(subject.nameservers[1].name).to eq("dns2.nameresolvers.com") + expect(subject.nameservers[2]).to be_a(Whois::Parser::Nameserver) + expect(subject.nameservers[2].name).to eq("dns3.nameresolvers.com") + expect(subject.nameservers[3]).to be_a(Whois::Parser::Nameserver) + expect(subject.nameservers[3].name).to eq("dns4.nameresolvers.com") + end + end +end