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('<', '<').gsub('>', '>') 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