Sha256: dbfa3de338afd313eb44a87ad328b3faceefa68faecb5045d4dc71ce5cab6627
Contents?: true
Size: 1.63 KB
Versions: 2
Compression:
Stored size: 1.63 KB
Contents
require 'vng/connection_error' require 'vng/error' module Vng # Provides an abstract class for every Vonigo resource. class Resource private def self.request(path:, body: {}, query: {}, include_security_token: true) uri = URI::HTTPS.build host: host, path: path uri.query = URI.encode_www_form(query) if query.any? method = query.any? ? Net::HTTP::Get : Net::HTTP::Post request = method.new uri.request_uri request.initialize_http_header 'Content-Type' => 'application/json' if query.none? body = body.merge(securityToken: security_token) if include_security_token request.body = body.to_json end response = instrument do |data| data[:response] = Net::HTTP.start(uri.host, uri.port, use_ssl: true) do |http| http.request request end end JSON(response.body).tap do |data| raise Vng::Error, "#{data['errMsg']} #{data['Errors']}" unless data['errNo'].zero? end rescue Errno::ECONNREFUSED, SocketError => e raise Vng::ConnectionError, e.message end def self.host Vng.configuration.host end def self.security_token Vng.configuration.security_token end def self.value_for_field(data, field_id) field = data['Fields'].find { |field| field['fieldID'] == field_id } field['fieldValue'] if field end def self.instrument(&block) data = {class_name: name} # TODO: Add path, query, ... if defined?(ActiveSupport::Notifications) ActiveSupport::Notifications.instrument 'Vng.request', data, &block else block.call(data) end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
vng-1.2.0 | lib/vng/resource.rb |
vng-1.1.0 | lib/vng/resource.rb |