module DomainTldSearch
Search Porkbunโs public TLD catalogue for registerable extensions.
Public Instance Methods
Source
# File lib/domain_tld_search.rb, line 38 def build_match(tld, row) pricing = DomainPricing.pricing_from_row(row) { tld: tld, supported: pricing[:supported], register: pricing[:register], renew: pricing[:renew] } end
Source
# File lib/domain_tld_search.rb, line 24 def filter_matches(catalogue, query) hits = catalogue.keys.select { |tld| tld == query || tld.include?(query) } sorted = hits.sort_by { |tld| sort_key(tld, query) } total = sorted.length shown = sorted.first(DomainTldReport::MAX_RESULTS) matches = shown.map { |tld| build_match(tld, catalogue[tld]) } [matches, total] end
Source
# File lib/domain_tld_search.rb, line 11 def lookup(query, http: nil) parsed = DomainTldParse.parse(query) return DomainTldReport.usage if parsed[:error] == :empty return DomainTldReport.invalid if parsed[:error] == :invalid pricing_http = http || DomainPricing.method(:default_http) catalogue = DomainPricing.fetch_all_pricing(http: pricing_http) return DomainTldReport.empty(query: parsed[:query]) if catalogue.nil? || catalogue.empty? matches, total = filter_matches(catalogue, parsed[:query]) DomainTldReport.format(query: parsed[:query], matches: matches, total: total) end
Source
# File lib/domain_tld_search.rb, line 33 def sort_key(tld, query) exact = tld == query ? 0 : 1 [exact, tld.length, tld] end