Add method to create DNS resource from data string
I recently played around with DNS over HTTPS.
I found that it's a little bit tricky to generate the appropriate resource using the Resolv::DNS::Resource hierarchy.
Here is what my code ended up:
if klass = Resolv::DNS::Resource.get_class(answer["type"], resource_class::ClassValue) if klass < Resolv::DNS::Resource::DomainName resource = klass.new(Resolv::DNS::Name.create(answer["data"])) else resource = klass.new(answer["data"]) end
It would be nice to have a simpler interface, e.g.
if klass = Resolv::DNS::Resource.get_class(answer["type"], resource_class::ClassValue) klass.create(answer["data"]) end
In this case, the
Resource#create method would take a data string and convert it to a name if required.
The base resource class could just have
alias create new, while the
DomainName class could have:
def create(data) self.new(Name.create(data)) end
Or something like that.
Updated by shevegen (Robert A. Heiler) over 2 years ago
Although I myself have not used/needed Resolv::DNS::Resource yet,
if the proposed #create method does not conflict with anything in
Resolv, then I think it is fine to add it. (If I understood it correctly
then this is mostly alias-related, with the toplevel create doing a
bit more than just an alias, so it should not be a problem I think?)
Documentation should not be forgotten for the new toplevel create
method, if it is accepted by matz/the ruby core team.