class UWaterlooAPI::Query
Public Class Methods
new(cur_route, cur_url, api_key)
click to toggle source
# File lib/uwaterlooapi/query.rb, line 7 def initialize(cur_route, cur_url, api_key) @api_key = api_key @cur_url = cur_url @cur_route = cur_route @retrieved_url = '' @response = @meta = nil # Define methods without parameters get_next_routes_without_params.each do |route| self.class.send :define_method, route do raise NoMethodError unless is_in_routes?("#{@cur_route}/#{route}") UWaterlooAPI::Query.new "#{@cur_route}/#{route}", "#{@cur_url}/#{route}", @api_key end end # Define methods with parameters get_next_routes_with_params.each do |route| self.class.send :define_method, route do |value| raise ArgumentError if ["", 0].include? value raise NoMethodError unless is_in_routes?("#{@cur_route}/{#{route}}") UWaterlooAPI::Query.new "#{@cur_route}/{#{route}}", "#{@cur_url}/#{value}", @api_key end end end
Public Instance Methods
get()
click to toggle source
Get data from server
# File lib/uwaterlooapi/query.rb, line 40 def get raise NoMethodError unless is_full_route? @cur_route @retrieved_url = @cur_url response = HTTParty.get("https://api.uwaterloo.ca/v2#{@cur_url}.json", { query: { key: @api_key, format: 'json' } }) case response.code when 400...600 raise "UWaterloo API Server returned a #{response.code} error" end @response = RecursiveOpenStruct.new response, recurse_over_arrays: true @meta = response['meta'] @response.data end
meta(var)
click to toggle source
Get meta variables
# File lib/uwaterlooapi/query.rb, line 33 def meta(var) raise NoMethodError unless is_full_route? @cur_route raise "No request has been made yet, so meta data is not available." unless @meta @meta[var.to_s] end
method_missing(method, *args, &block)
click to toggle source
Calls superclass method
# File lib/uwaterlooapi/query.rb, line 53 def method_missing(method, *args, &block) # Get data from API server get unless just_made_request if @response.data.respond_to? method @response.data.send method, *args, &block else super end end
respond_to?(method, include_private = false)
click to toggle source
Calls superclass method
# File lib/uwaterlooapi/query.rb, line 64 def respond_to?(method, include_private = false) # Get data from API server get unless just_made_request if @response.data.respond_to? method true else super end end
Private Instance Methods
get_next_routes()
click to toggle source
# File lib/uwaterlooapi/query.rb, line 81 def get_next_routes @next_routes ||= @@routes. select { |s| s.start_with?(@cur_route) }. map { |s| s[@cur_route.length..-1] }. join.split('/').uniq.delete_if(&:empty?) end
get_next_routes_with_params()
click to toggle source
# File lib/uwaterlooapi/query.rb, line 93 def get_next_routes_with_params @next_routes_with_params ||= get_next_routes. select { |r| r =~ /^\{.*\}$/ }. map { |r| r.delete('{}') }.map(&:to_sym) end
get_next_routes_without_params()
click to toggle source
# File lib/uwaterlooapi/query.rb, line 88 def get_next_routes_without_params @next_routes_without_params ||= get_next_routes. reject { |r| r =~ /^\{.*\}$/ }.map(&:to_sym) end
is_full_route?(substring)
click to toggle source
# File lib/uwaterlooapi/query.rb, line 103 def is_full_route?(substring) @@routes.include? substring end
is_in_routes?(substring)
click to toggle source
# File lib/uwaterlooapi/query.rb, line 99 def is_in_routes?(substring) @@routes.any? { |s| s.start_with?(substring) } end
just_made_request()
click to toggle source
# File lib/uwaterlooapi/query.rb, line 77 def just_made_request @retrieved_url == @cur_url end