Class: UWaterlooAPIQuery
- Inherits:
-
Object
- Object
- UWaterlooAPIQuery
- Includes:
- Routes
- Defined in:
- lib/helpers/uwaterlooapi_query.rb
Instance Method Summary collapse
-
#get ⇒ Object
Get data from server.
-
#initialize(cur_route, cur_url, api_key) ⇒ UWaterlooAPIQuery
constructor
A new instance of UWaterlooAPIQuery.
-
#meta(var) ⇒ Object
Get meta variables.
- #method_missing(method, *args, &block) ⇒ Object
- #respond_to?(method, include_private = false) ⇒ Boolean
Methods included from Routes
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 = = 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
#get ⇒ Object
Get data from server
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 = response['meta'] @response.data end |
#meta(var) ⇒ Object
Get meta variables
32 33 34 35 36 |
# File 'lib/helpers/uwaterlooapi_query.rb', line 32 def (var) raise NoMethodError unless is_full_route? @cur_route raise "No request has been made yet, so meta data is not available." unless [var.to_s] end |
#respond_to?(method, include_private = false) ⇒ 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 |