Class: UWaterlooAPIQuery

Inherits:
Object
  • Object
show all
Includes:
Routes
Defined in:
lib/helpers/uwaterlooapi_query.rb

Instance Method Summary collapse

Methods included from Routes

route

Constructor Details

#initialize(cur_route, cur_url, api_key) ⇒ UWaterlooAPIQuery

Returns a new instance of UWaterlooAPIQuery.



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/helpers/uwaterlooapi_query.rb', line 6

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}")
      UWaterlooAPIQuery.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}}")
      UWaterlooAPIQuery.new "#{@cur_route}/{#{route}}", "#{@cur_url}/#{value}", @api_key
    end
  end
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method, *args, &block) ⇒ Object



52
53
54
55
56
57
58
59
60
61
# File 'lib/helpers/uwaterlooapi_query.rb', line 52

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

Instance Method Details

#getObject

Get data from server

Raises:

  • (NoMethodError)


39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/helpers/uwaterlooapi_query.rb', line 39

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) ⇒ Object

Get meta variables

Raises:

  • (NoMethodError)


32
33
34
35
36
# File 'lib/helpers/uwaterlooapi_query.rb', line 32

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

#respond_to?(method, include_private = false) ⇒ Boolean

Returns:

  • (Boolean)


63
64
65
66
67
68
69
70
71
72
# File 'lib/helpers/uwaterlooapi_query.rb', line 63

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