lib/openname.rb in openname-0.3 vs lib/openname.rb in openname-0.4

- old
+ new

@@ -1,8 +1,9 @@ require "openname/version" require 'net/http' require 'json' +require 'bitcoin' ## # A toolkit for the Openname distributed identity & naming system module Openname @@ -34,11 +35,11 @@ ## # Check if the given +openname+ is in proper format # Does not downcase input def self.valid?(openname) - Openname::ONENAME_REGEX.match(openname).nil? ? false : true + Openname::OPENNAME_REGEX.match(openname).nil? ? false : true end ## # Retrieve JSON data stored in Openname record def self.get_json(openname) @@ -46,25 +47,35 @@ uri = URI(self.endpoint + "/#{openname.downcase}.json") http = Net::HTTP.new(uri.host,uri.port) http.use_ssl = uri.scheme == "https" ? true : false req = Net::HTTP::Get.new(uri.path, {'User-Agent' => USERAGENT}) res = http.request(req) - case res.code - when 404 then raise NameError.new("User with Openname \"#{openname}\" does not exist") - when res.code != 200 then + case res.code.to_s + when "404" then raise NameError.new("User with Openname \"#{openname}\" does not exist") + when "200" then return JSON.parse(res.body) + else error = JSON.parse(res.body) raise RuntimeError.new("Openname endpoint returned error: #{error["error"]}") end - json = JSON.parse(res.body) end ## # Return a +User+ representing the given openname def self.get(openname) User.from_json(self.get_json(openname),openname) end + ## + # Takes either a bitcoin address or a openname + # Returns the bitcoin address associated with the openname or passes through address provided + def self.get_bitcoin_address(openname_or_address) + return openname_or_address if Bitcoin.valid_address?(openname_or_address) + raise ArgumentError.new("#{openname_or_address} is not a valid Openname or Bitcoin address") if !self.valid?(openname_or_address) + user = get(openname_or_address) + raise NameError.new("Openname user #{openname_or_address} does not have a Bitcoin address") if !Bitcoin.valid_address?(user.bitcoin_address) + return user.bitcoin_address + end class User def self.from_json(json,openname) User.new(json,openname) end \ No newline at end of file