class Meetupinator::MeetupAPI

This class is responsible for communicating with the meetup.com API and returning the json responses only.

Attributes

api_key[R]

Public Class Methods

new(api_key = nil) click to toggle source
# File lib/meetupinator/meetup_api.rb, line 10
def initialize(api_key = nil)
  @base_uri = 'api.meetup.com'
  @groups_endpoint = '/2/groups'
  @events_endpoint = '/2/events'
  @api_key = pick_which_api_key(api_key)
end

Public Instance Methods

get_meetup_id(group_url_name) click to toggle source
# File lib/meetupinator/meetup_api.rb, line 17
def get_meetup_id(group_url_name)
  query_string = 'key=' + @api_key + '&group_urlname=' + group_url_name
  uri = URI::HTTP.build(host: @base_uri, path: @groups_endpoint,
                        query: query_string)
  extract_meetup_id get_meetup_response(uri)
end
get_upcoming_events(group_ids, weeks) click to toggle source
# File lib/meetupinator/meetup_api.rb, line 24
def get_upcoming_events(group_ids, weeks)
  query_string = 'sign=true&photo-host=public&status=upcoming&key=' +
                 @api_key + '&group_id=' + group_ids.join(',')

  query_string << "&time=,#{weeks}w" if weeks

  uri = URI::HTTP.build(host: @base_uri, path: @events_endpoint,
                        query: query_string)
  response = get_meetup_response uri
  get_results response
end

Private Instance Methods

extract_meetup_id(response) click to toggle source
# File lib/meetupinator/meetup_api.rb, line 51
def extract_meetup_id(response)
  get_results(response)[0]['id']
end
fail_if_not_ok(response) click to toggle source
# File lib/meetupinator/meetup_api.rb, line 44
def fail_if_not_ok(response)
  return unless response.code != '200'
  msg = "Call to #{uri} failed: #{response.code} - #{response.message}"
  msg << '. ' + response.body if response.class.body_permitted?
  fail(msg)
end
get_meetup_response(uri) click to toggle source
# File lib/meetupinator/meetup_api.rb, line 38
def get_meetup_response(uri)
  response = Net::HTTP.get_response uri
  fail_if_not_ok(response)
  JSON.parse response.body
end
get_results(response) click to toggle source
# File lib/meetupinator/meetup_api.rb, line 55
def get_results(response)
  response['results']
end
key_found_in_env?() click to toggle source
# File lib/meetupinator/meetup_api.rb, line 77
def key_found_in_env?
  (!ENV['MEETUP_API_KEY'].nil? && !ENV['MEETUP_API_KEY'].empty?)
end
key_invalid?(api_key) click to toggle source
# File lib/meetupinator/meetup_api.rb, line 69
def key_invalid?(api_key)
  !key_valid?(api_key)
end
key_not_found_in_env?() click to toggle source
# File lib/meetupinator/meetup_api.rb, line 73
def key_not_found_in_env?
  !key_found_in_env?
end
key_valid?(api_key) click to toggle source
# File lib/meetupinator/meetup_api.rb, line 65
def key_valid?(api_key)
  !(api_key.nil? || api_key.empty?)
end
pick_which_api_key(api_key) click to toggle source
# File lib/meetupinator/meetup_api.rb, line 59
def pick_which_api_key(api_key)
  key = api_key if key_valid?(api_key)
  key = ENV['MEETUP_API_KEY'] if key_found_in_env? && key_invalid?(key)
  key_invalid?(key) ? fail('no MEETUP_API_KEY provided') : key
end