Exception: OneSignal::ApiError
- Inherits:
-
StandardError
- Object
- StandardError
- OneSignal::ApiError
- Defined in:
- lib/onesignal/api_error.rb
Instance Attribute Summary collapse
-
#code ⇒ Object
readonly
Returns the value of attribute code.
-
#response_body ⇒ Object
readonly
Returns the value of attribute response_body.
-
#response_headers ⇒ Object
readonly
Returns the value of attribute response_headers.
Instance Method Summary collapse
-
#error_messages ⇒ Array<String>
The error messages carried by the response body, normalized to a flat Array<String> regardless of which envelope shape the API returned (‘{ errors: “…” }`, `{ errors: [“…”] }`, `{ errors: [{ code:, title: }] }`, or an object map such as `{ errors: { invalid_aliases: … } }`, surfaced as `“<key>: <value>”` entries).
-
#initialize(arg = nil) ⇒ ApiError
constructor
Usage examples: ApiError.new ApiError.new(“message”) ApiError.new(:code => 500, :response_headers => {}, :response_body => “”) ApiError.new(:code => 404, :message => “Not Found”).
- #message ⇒ Object
-
#to_s ⇒ Object
Override to_s to display a friendly error message.
Constructor Details
#initialize(arg = nil) ⇒ ApiError
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/onesignal/api_error.rb', line 24 def initialize(arg = nil) if arg.is_a? Hash if arg.key?(:message) || arg.key?('message') super(arg[:message] || arg['message']) else super arg end arg.each do |k, v| instance_variable_set "@#{k}", v end else super arg end end |
Instance Attribute Details
#code ⇒ Object (readonly)
Returns the value of attribute code.
17 18 19 |
# File 'lib/onesignal/api_error.rb', line 17 def code @code end |
#response_body ⇒ Object (readonly)
Returns the value of attribute response_body.
17 18 19 |
# File 'lib/onesignal/api_error.rb', line 17 def response_body @response_body end |
#response_headers ⇒ Object (readonly)
Returns the value of attribute response_headers.
17 18 19 |
# File 'lib/onesignal/api_error.rb', line 17 def response_headers @response_headers end |
Instance Method Details
#error_messages ⇒ Array<String>
The error messages carried by the response body, normalized to a flat Array<String> regardless of which envelope shape the API returned (‘{ errors: “…” }`, `{ errors: [“…”] }`, `{ errors: [{ code:, title: }] }`, or an object map such as `{ errors: { invalid_aliases: … } }`, surfaced as `“<key>: <value>”` entries). Returns an empty array when the body is not a recognizable error envelope. The raw body remains on response_body.
67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 |
# File 'lib/onesignal/api_error.rb', line 67 def parsed = if response_body.is_a?(String) begin JSON.parse(response_body) rescue JSON::ParserError, TypeError nil end else response_body end return [] unless parsed.is_a?(Hash) errors = parsed['errors'] || parsed[:errors] case errors when String [errors] when Array errors.map do |e| if e.is_a?(String) e elsif e.is_a?(Hash) title = e['title'] || e[:title] title = nil if title == '' title || e['code'] || e[:code] end end.compact when Hash # Object-shaped envelopes (e.g. { invalid_aliases: {...} }) carry data # under arbitrary keys; surface each so it isn't silently dropped. Key # order is unspecified, so sort for deterministic output. errors.map do |key, value| rendered = value.is_a?(String) ? value : value.to_json "#{key}: #{rendered}" end.sort else [] end end |
#message ⇒ Object
45 46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/onesignal/api_error.rb', line 45 def if @message.nil? msg = "Error message: the server returns an error" else msg = @message end msg += "\nHTTP status code: #{code}" if code msg += "\nResponse headers: #{response_headers}" if response_headers msg += "\nResponse body: #{response_body}" if response_body msg end |
#to_s ⇒ Object
Override to_s to display a friendly error message
41 42 43 |
# File 'lib/onesignal/api_error.rb', line 41 def to_s end |