Class: Alula::RpcResource
- Inherits:
-
Object
- Object
- Alula::RpcResource
- Defined in:
- lib/alula/rpc_resource.rb
Direct Known Subclasses
DealerDeviceStatsProc, DealerRestoreProc, DealerSuspendProc, DeviceAssignProc, DeviceCellularHistoryProc, DeviceRatePlanGetProc, DeviceRegisterProc, DeviceSignalAddProc, DeviceSignalDeliveredProc, DeviceSignalUpdateProc, DeviceUnassignProc, DeviceUnregisterProc, FeaturePlanCloneProc, UploadTouchpadBrandingProc, UserPlansVideoPriceGetProc, UserTransferAccept, UserTransferAuthorize, UserTransferCancel, UserTransferDeny, UserTransferReject, UserTransferRequest
Class Method Summary collapse
-
.ok?(response) ⇒ Boolean
RPC endpoints tend to return a 200 OK even if the response failed.
- .request(http_method:, path:, payload:, handler:, wrap: true, opts: {}) ⇒ Object
- .wrap_payload(payload) ⇒ Object
Class Method Details
.ok?(response) ⇒ Boolean
RPC endpoints tend to return a 200 OK even if the response failed. Examine the response body to determine if there was an error.
25 26 27 28 29 30 |
# File 'lib/alula/rpc_resource.rb', line 25 def self.ok?(response) error = response.data['error'] && !response.data['error'].empty? errors = response.data['errors'] && !response.data['errors'].empty? !(error || errors) end |
.request(http_method:, path:, payload:, handler:, wrap: true, opts: {}) ⇒ Object
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
# File 'lib/alula/rpc_resource.rb', line 3 def self.request(http_method:, path:, payload:, handler:, wrap: true, opts: {}) response = Alula::Client.request(http_method, path, wrap ? wrap_payload(payload) : payload, opts) unless response.ok? && ok?(response) error = Alula::AlulaError.for_response(response) # # Some error classifications are critical and should be raised for visibility # These errors do not contain meaningful data that an end-user can use to correct # the error. raise error if [Alula::RateLimitError, Alula::BadRequestError, Alula::ForbiddenError, Alula::UnknownError, Alula::InsufficientScopeError].include?(error.class) return error end handler.new(response) end |
.wrap_payload(payload) ⇒ Object
32 33 34 35 36 37 38 |
# File 'lib/alula/rpc_resource.rb', line 32 def self.wrap_payload(payload) { id: SecureRandom.uuid, jsonrpc: '2.0', params: payload } end |