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