module OnsOpenApi::Connection
Constants
- API_KEY
- BASE_URI
Public Instance Methods
get(resource, args={})
click to toggle source
# File lib/ons_openapi/connection.rb, line 8 def get(resource, args={}) to_object request(resource, "get", args) end
post(resource, args={})
click to toggle source
# File lib/ons_openapi/connection.rb, line 12 def post(resource, args={}) to_object request(resource, "post", args) end
request(resource, method="get", args)
click to toggle source
# File lib/ons_openapi/connection.rb, line 41 def request(resource, method="get", args) uri = request_uri resource, args case method when "get" req = Net::HTTP::Get.new(uri.request_uri) when "post" req = Net::HTTP::Post.new(uri.request_uri) end http = Net::HTTP.new(uri.host, uri.port) http.use_ssl = (uri.port == 443) res = http.start() { |conn| conn.request(req) } res.body end
request_uri(resource, args)
click to toggle source
# File lib/ons_openapi/connection.rb, line 26 def request_uri(resource, args) unless API_KEY raise 'No ONS OpenAPI key found. Set this environment variable: ONS_APIKEY=<your_ons_openapi_key>' end uri = URI.join(BASE_URI, (resource+'.json').sub('.json.json','.json') ) args ||= {} args.delete('apikey') args.merge!( apikey: API_KEY ) uri.query = args.map { |k,v| "%s=%s" % [URI.encode(k.to_s), URI.encode(v.to_s)] }.join("&") if args puts uri.to_s uri end
to_object(json)
click to toggle source
# File lib/ons_openapi/connection.rb, line 16 def to_object json json.gsub!('"@', '"') json.gsub!('xml.lang','xml_lang') json.gsub!('"$":','"text":') json.gsub!('"2011WARDH" : {', '"X2011WARDH" : {') json.gsub!('"2011HTWARDH" : {', '"X2011HTWARDH" : {') hash = JSON.parse json Morph.from_hash hash, OnsOpenApi end