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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# 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 # Select only routes that may come next routes = @@routes.select { |s| s.start_with?(cur_route) }. map { |s| s[@cur_route.length..-1] }. join.split('/').uniq.delete_if(&:empty?) # Define methods without parameters routes.reject { |r| r =~ /^\{.*\}$/ }. map(&:to_sym).each do |route| self.class.send :define_method, route do if is_in_routes?("#{@cur_route}/#{route}") UWaterlooAPIQuery.new "#{@cur_route}/#{route}", "#{@cur_url}/#{route}", api_key else raise NoMethodError end end end # Define methods with parameters routes.select { |r| r =~ /^\{.*\}$/ }. map { |r| r.delete('{}') }. map(&:to_sym).each do |route| self.class.send :define_method, route do |value| raise ArgumentError if ["", 0].include? value if is_in_routes?("#{@cur_route}/{#{route}}") UWaterlooAPIQuery.new "#{@cur_route}/{#{route}}", "#{@cur_url}/#{value}", api_key else raise NoMethodError end end end end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method, *args, &block) ⇒ Object
71 72 73 74 75 76 77 78 79 80 |
# File 'lib/helpers/uwaterlooapi_query.rb', line 71 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
58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/helpers/uwaterlooapi_query.rb', line 58 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
48 49 50 51 52 53 54 55 |
# File 'lib/helpers/uwaterlooapi_query.rb', line 48 def (var) raise NoMethodError unless is_full_route? @cur_route if @meta @meta[var.to_s] else raise "No request has been made yet, so meta data is not available." end end |
#respond_to?(method, include_private = false) ⇒ Boolean
82 83 84 85 86 87 88 89 90 91 |
# File 'lib/helpers/uwaterlooapi_query.rb', line 82 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 |