class MediawikiApi::Response
Provides access to a parsed MediaWiki API responses.
Some types of responses, depending on the action, contain a level or two of addition structure (an envelope) above the actual payload. The {#data} method provides a way of easily getting at it.
@example
# http.body => '{"query": {"userinfo": {"some": "data"}}}' response = Response.new(http, ["query", "userinfo"]) response.data # => { "some" => "data" }
Public Class Methods
new(response, envelope = [])
click to toggle source
Constructs a new response.
@param response [Faraday::Response] @param envelope [Array] Property names for expected payload nesting.
# File lib/mediawiki_api/response.rb, line 26 def initialize(response, envelope = []) @response = response @envelope = envelope end
Public Instance Methods
[](key)
click to toggle source
Accessor for root response object values.
@param key [String]
@return [Object]
# File lib/mediawiki_api/response.rb, line 37 def [](key) response_object[key] end
data()
click to toggle source
The main payload from the parsed response, removed from its envelope.
@return [Object]
# File lib/mediawiki_api/response.rb, line 45 def data case response_object when Hash open_envelope(response_object) else response_object end end
errors()
click to toggle source
Set of error messages from the response.
@return [Array]
# File lib/mediawiki_api/response.rb, line 58 def errors flatten_resp('errors') end
warnings()
click to toggle source
Set of warning messages from the response.
@return [Array]
# File lib/mediawiki_api/response.rb, line 66 def warnings flatten_resp('warnings') end
warnings?()
click to toggle source
Whether the response contains warnings.
@return [true, false]
# File lib/mediawiki_api/response.rb, line 74 def warnings? !warnings.empty? end
Private Instance Methods
flatten_resp(str)
click to toggle source
# File lib/mediawiki_api/response.rb, line 80 def flatten_resp(str) if response_object[str] response_object[str].values.map(&:values).flatten else [] end end
open_envelope(obj, env = @envelope)
click to toggle source
# File lib/mediawiki_api/response.rb, line 88 def open_envelope(obj, env = @envelope) if !obj.is_a?(Hash) || env.nil? || env.empty? || !obj.include?(env.first) obj else open_envelope(obj[env.first], env[1..-1]) end end
response_object()
click to toggle source
# File lib/mediawiki_api/response.rb, line 96 def response_object @response_object ||= JSON.parse(@response.body) end