Class: Almanack::EventSource::MeetupAPIRequest

Inherits:
Object
  • Object
show all
Defined in:
lib/almanack/event_source/meetup_group.rb

Constant Summary collapse

REQUIRED_OPTIONS =
[:group_domain, :group_urlname, :group_id]

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ MeetupAPIRequest

Returns a new instance of MeetupAPIRequest.



82
83
84
85
# File 'lib/almanack/event_source/meetup_group.rb', line 82

def initialize(options = {})
  @connection = options.delete(:connection)
  @options = options
end

Instance Attribute Details

#connectionObject (readonly)

Returns the value of attribute connection.



80
81
82
# File 'lib/almanack/event_source/meetup_group.rb', line 80

def connection
  @connection
end

#optionsObject (readonly)

Returns the value of attribute options.



80
81
82
# File 'lib/almanack/event_source/meetup_group.rb', line 80

def options
  @options
end

Instance Method Details

#error_message_from(data) ⇒ Object



118
119
120
121
122
123
124
125
126
# File 'lib/almanack/event_source/meetup_group.rb', line 118

def error_message_from(data)
  message = [data['problem'], data['details']].compact.join(' - ')

  if message.include?('not authorized')
    message << ' ⚠️ See https://github.com/Aupajo/almanack/issues/36 for more details'
  end

  message
end

#responseObject



107
108
109
110
111
112
113
114
115
116
# File 'lib/almanack/event_source/meetup_group.rb', line 107

def response
  response = connection.get(uri)
  data = JSON.parse(response.body)

  if data['problem']
    raise MeetupAPIError, error_message_from(data)
  end

  data
end

#resultsObject



87
88
89
# File 'lib/almanack/event_source/meetup_group.rb', line 87

def results
  response['results']
end

#uriObject



91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
# File 'lib/almanack/event_source/meetup_group.rb', line 91

def uri
  if !options.has_key?(:key)
    raise MeetupAPIException, 'Cannot form valid URI, missing :key option'
  end

  if (options.keys & REQUIRED_OPTIONS).empty?
    raise MeetupAPIException, "Cannot form valid URI, missing one of: #{REQUIRED_OPTIONS}"
  end

  endpoint = "https://api.meetup.com/2/events"

  Addressable::URI.parse(endpoint).tap do |uri|
    uri.query_values = options
  end
end