class SportsSouth::Base

Holds methods common to all classes.

Constants

CONTENT_TYPE
TIMEOUT
USER_AGENT

Protected Class Methods

content_for(xml_doc, field) click to toggle source
# File lib/sports_south/base.rb, line 29
def self.content_for(xml_doc, field)
  node = xml_doc.css(field).first
  node.nil? ? nil : CGI.unescapeHTML(node.content.strip)
end
form_params(options = {}) click to toggle source

Returns a hash of common form params.

# File lib/sports_south/base.rb, line 36
def self.form_params(options = {})
  {
    UserName: options[:username],
    Password: options[:password],
    CustomerNumber: options[:username],
    Source: SportsSouth.config.source,
  }
end
get_http_and_request(api_url, endpoint) click to toggle source

Returns the Net::HTTP and Net::HTTP::Post objects.

http, request = get_http_and_request(<api_url>, <endpoint>)
# File lib/sports_south/base.rb, line 49
def self.get_http_and_request(api_url, endpoint)
  uri = URI([api_url, endpoint].join)

  http = Net::HTTP.new(uri.host, uri.port)
  http.read_timeout = TIMEOUT

  request = Net::HTTP::Post.new(uri.request_uri)
  request['User-Agent']   = USER_AGENT
  request['Content-Type'] = CONTENT_TYPE

  return http, request
end
not_authenticated?(xml_doc) click to toggle source
# File lib/sports_south/base.rb, line 63
def self.not_authenticated?(xml_doc)
  msg = content_for(xml_doc, 'ERROR')
  (msg =~ /Authentication Failed/i) || (msg =~ /NOT AUTHENTICATED/i)
end
requires!(hash, *params) click to toggle source
# File lib/sports_south/base.rb, line 16
def self.requires!(hash, *params)
  params.each do |param|
    if param.is_a?(Array)
      raise ArgumentError.new("Missing required parameter: #{param.first}") unless hash.has_key?(param.first)

      valid_options = param[1..-1]
      raise ArgumentError.new("Parameter: #{param.first} must be one of: #{valid_options.join(', ')}") unless valid_options.include?(hash[param.first])
    else
      raise ArgumentError.new("Missing required parameter: #{param}") unless hash.has_key?(param)
    end
  end
end
sanitize_response(response) click to toggle source

HACK: We have to fix the malformed XML response SS is currently returning.

# File lib/sports_south/base.rb, line 70
def self.sanitize_response(response)
  response.body.gsub('&lt;', '<').gsub('&gt;', '>')
end

Protected Instance Methods

content_for(*args) click to toggle source
# File lib/sports_south/base.rb, line 33
def content_for(*args); self.class.content_for(*args); end
download_to_tempfile(http, request) click to toggle source
# File lib/sports_south/base.rb, line 75
def download_to_tempfile(http, request)
  preformatted_tempfile = Tempfile.new(['preformatted-', '.txt'])

  # Stream the response to disk.
  # This file is not yet valid XML (the angle brackets are escaped).
  http.request(request) do |response|
    File.open(preformatted_tempfile, 'w') do |file|
      response.read_body do |chunk|
        file.write(chunk.force_encoding('UTF-8'))
      end
    end
  end
  preformatted_tempfile.close

  # Now we need to read the file line-by-line and unescape the angle brackets.
  # The new (properly formatted) XML will be in a secondary tempfile.
  converted_tempfile = Tempfile.new(['formated-', '.xml'])

  File.open(preformatted_tempfile, 'r') do |file|
    file.each_line do |line|
      converted_tempfile.puts CGI.unescapeHTML(line)
    end
  end

  # Return the (still opened) tempfile
  # Since it's sill open you may need to '#rewind' it first before usage
  return converted_tempfile
end
form_params(*args) click to toggle source
# File lib/sports_south/base.rb, line 44
def form_params(*args); self.class.form_params(*args); end
get_http_and_request(*args) click to toggle source
# File lib/sports_south/base.rb, line 61
def get_http_and_request(*args); self.class.get_http_and_request(*args); end
not_authenticated?(*args) click to toggle source
# File lib/sports_south/base.rb, line 67
def not_authenticated?(*args); self.class.not_authenticated?(*args); end
requires!(*args) click to toggle source

Wrapper to `self.requires!` that can be used as an instance method.

# File lib/sports_south/base.rb, line 12
def requires!(*args)
  self.class.requires!(*args)
end
sanitize_response(*args) click to toggle source
# File lib/sports_south/base.rb, line 73
def sanitize_response(*args); self.class.sanitize_response(*args); end