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