Skip to content
This repository has been archived by the owner on Mar 8, 2022. It is now read-only.

Commit

Permalink
Fix bug due to possible nil venue when retrieved from meetup.
Browse files Browse the repository at this point in the history
Issue #33
  • Loading branch information
toch committed Jul 14, 2015
1 parent f4938b6 commit 15901ac
Show file tree
Hide file tree
Showing 3 changed files with 75 additions and 6 deletions.
40 changes: 37 additions & 3 deletions app/models/meetup_event.rb
Original file line number Diff line number Diff line change
Expand Up @@ -15,19 +15,53 @@ class << self
def all
json = HTTParty.get("https://api.meetup.com/2/events?&sign=true&photo-host=public&group_id=15138792,12922902,5356052&page=20&key=#{ENV['MEETUP_API_KEY']}").body
raw_events = JSON.parse(json)['results']
raw_events = [] unless raw_events
events = []
raw_events.each do |event|
venue = create_venue_from_payload(event['venue'])
events << MeetupEvent.new(
name: event['name'],
description: event['description'],
time: event['time'],
attendees: event['yes_rsvp_count'],
address: event['venue']['address_1'],
venue: event['venue']['name'],
url: event['event_url'],
address: venue.address,
venue: venue.name,
url: event['event_url']
)
end
events
end

private
# NullObject for Venue
class NullVenue
attr_reader :address, :name
def initialize
@address = ""
@name = "None"
end
end

# A Venue is a place with a name
class Venue
attr_reader :address, :name
def initialize(name: "", address: "")
@name = name
@address = address

@address = "" unless @address
@name = "None" unless @name
end
end

# Factory method
def create_venue_from_payload(venue_hash)
return NullVenue.new if venue_hash.nil?

Venue.new(
name: venue_hash["name"],
address: venue_hash["address_1"]
)
end
end
end
21 changes: 20 additions & 1 deletion test/fixtures/meetup_events.json
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,25 @@
"urlname": "brug__",
"who": "Rubyists"
}
},
{
"utc_offset":7200000,
"headcount":0,
"visibility":"public",
"waitlist_count":0,
"created":1435654516000,
"maybe_rsvp_count":0,
"description":"Let's code together.",
"event_url":"http://www.meetup.com/brug__/events/223598126/",
"yes_rsvp_count":15,
"duration":14400000,
"announced":true,
"name":"BRUG July 2015: Hack Evening",
"id":"223598126",
"time":1436889600000,
"updated":1435657051000,
"group":{"join_mode":"open","created":1403000188000,"name":"BRUG","group_lon":4.329999923706055,"id":15138792,"urlname":"brug__","group_lat":50.83000183105469,"who":"Rubyists"},
"status":"upcoming"
}
],
"meta": {
Expand All @@ -53,4 +72,4 @@
"method": "Events",
"lat": ""
}
}
}
20 changes: 18 additions & 2 deletions test/models/meetup_event_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@

it 'retrieves all BRUG events from Meetup' do
HTTParty.stub(:get, json_payload) do
MeetupEvent.all.count.must_equal 1
MeetupEvent.all.count.must_equal 2
end
end

Expand Down Expand Up @@ -50,4 +50,20 @@
event.time.must_equal Time.at(1_417_543_200_000 / 1000).to_datetime
end
end
end

describe 'when parsing Meetup JSON payload with empty venue' do
let(:event) do
HTTParty.stub(:get, json_payload) do
MeetupEvent.all.last
end
end

it 'gets a default name' do
event.venue.must_equal "None"
end

it 'gets a empty address' do
event.address.must_equal ""
end
end
end

0 comments on commit 15901ac

Please sign in to comment.