json.present? && json['id'] == uri ? json : nil
end
- def fetch_resource_without_id_validation(uri, on_behalf_of = nil)
+ def fetch_resource_without_id_validation(uri, on_behalf_of = nil, raise_on_temporary_error = false)
build_request(uri, on_behalf_of).perform do |response|
+ unless response_successful?(response) || response_error_unsalvageable?(response) || !raise_on_temporary_error
+ raise Mastodon::UnexpectedResponseError, response
+ end
return body_to_json(response.body_with_limit) if response.code == 200
end
# If request failed, retry without doing it on behalf of a user
return if on_behalf_of.nil?
build_request(uri).perform do |response|
+ unless response_successful?(response) || response_error_unsalvageable?(response) || !raise_on_temporary_error
+ raise Mastodon::UnexpectedResponseError, response
+ end
response.code == 200 ? body_to_json(response.body_with_limit) : nil
end
end
private
+ def response_successful?(response)
+ (200...300).cover?(response.code)
+ end
+
+ def response_error_unsalvageable?(response)
+ (400...500).cover?(response.code) && response.code != 429
+ end
+
def build_request(uri, on_behalf_of = nil)
request = Request.new(:get, uri)
request.on_behalf_of(on_behalf_of) if on_behalf_of
return collection_or_uri if collection_or_uri.is_a?(Hash)
return unless @allow_synchronous_requests
return if invalid_origin?(collection_or_uri)
- collection = fetch_resource_without_id_validation(collection_or_uri)
- raise Mastodon::UnexpectedResponseError if collection.nil?
- collection
+ fetch_resource_without_id_validation(collection_or_uri, nil, true)
end
def filtered_replies