class PlayStationNetwork::API

Attributes

config[RW]
options[RW]

Public Class Methods

new(*options) click to toggle source
# File lib/playstationnetwork/api.rb, line 57
def initialize(*options)
  raise CONFIG_ERROR unless PlayStationNetwork.valid?

  @config = PlayStationNetwork.configuration
  @options = {
    api_key: config.key,
    api_secret: config.secret,
    response_type: 'json'
  }
end

Public Instance Methods

post(url, dig_to: [], xml: false) click to toggle source
  response(http.request(request), dig_to)
end

end

# File lib/playstationnetwork/api.rb, line 81
def post(url, dig_to: [], xml: false)
  uri = URI.parse([config.url, url].join)

  Net::HTTP.start(uri.host, uri.port, use_ssl: (uri.scheme == 'https'), verify_mode: OpenSSL::SSL::VERIFY_NONE) do |http|
    request = Net::HTTP::Post.new(uri.request_uri)
    request.set_form_data(options)

    response(http.request(request), dig_to, xml)
  end
end

Private Instance Methods

parse_xml(response) click to toggle source
# File lib/playstationnetwork/api.rb, line 114
def parse_xml(response)
  xml_parsed = response
    .gsub('<?xml version=\"1.0\"?>', '')
    .gsub('<\/', '</')
    .tr('"', '')

  return Hash.from_xml(xml_parsed).to_json
end
response(request, dig_to, xml) click to toggle source
# File lib/playstationnetwork/api.rb, line 94
def response(request, dig_to, xml)
  if request.code == '200'
    if xml
      body = parse_xml(request.body)
    else
      body = request.body
    end

    if dig_to.empty?
      JSON.parse(body, object_class: OpenStruct)
    else
      results = JSON.parse(body, object_class: OpenStruct).dig(*dig_to)
      results.pop if results&.last == 'Empty Node'
      return results
    end
  else
    raise "There was a problem parsing the JSON. Most likely an API problem: #{ request.code }"
  end
end