Restructure receive_event to use case

This is much more readable!
This commit is contained in:
Stawberri 2015-01-15 02:46:09 -08:00
parent 0f56a1a6eb
commit 023cbb3183

View file

@ -249,31 +249,15 @@ module Ebooks
# Receive an event from the twitter stream # Receive an event from the twitter stream
# @param ev [Object] Twitter streaming event # @param ev [Object] Twitter streaming event
def receive_event(ev) def receive_event(ev)
if ev.is_a? Array # Initial array sent on first connection case ev
when Array # Initial array sent on first connection
log "Online!" log "Online!"
return return
end when Twitter::DirectMessage
if ev.is_a? Twitter::DirectMessage
return if ev.sender.screen_name.downcase == @username.downcase # Don't reply to self return if ev.sender.screen_name.downcase == @username.downcase # Don't reply to self
log "DM from @#{ev.sender.screen_name}: #{ev.text}" log "DM from @#{ev.sender.screen_name}: #{ev.text}"
fire(:message, ev) fire(:message, ev)
when Twitter::Tweet
elsif ev.respond_to?(:name)
case ev.name
when :follow
return if ev.source.screen_name.downcase == @username.downcase
log "Followed by #{ev.source.screen_name}"
fire(:follow, ev.source)
when :favorite, :unfavorite
return if ev.source.screen_name.downcase == @username.downcase # Ignore our own favorites
log "@#{ev.source.screen_name} #{ev.name.to_s}d: #{ev.target_object.text}"
fire(ev.name, ev.source, ev.target_object)
when :user_update
update_user_object ev.source
end
elsif ev.is_a? Twitter::Tweet
return unless ev.text # If it's not a text-containing tweet, ignore it return unless ev.text # If it's not a text-containing tweet, ignore it
return if ev.user.screen_name.downcase == @username.downcase # Ignore our own tweets return if ev.user.screen_name.downcase == @username.downcase # Ignore our own tweets
@ -299,10 +283,21 @@ module Ebooks
else else
fire(:timeline, ev) fire(:timeline, ev)
end end
when Twitter::Streaming::Event
elsif ev.is_a?(Twitter::Streaming::DeletedTweet) || case ev.name
ev.is_a?(Twitter::Streaming::Event) when :follow
# pass return if ev.source.screen_name.downcase == @username.downcase
log "Followed by #{ev.source.screen_name}"
fire(:follow, ev.source)
when :favorite, :unfavorite
return if ev.source.screen_name.downcase == @username.downcase # Ignore our own favorites
log "@#{ev.source.screen_name} #{ev.name.to_s}d: #{ev.target_object.text}"
fire(ev.name, ev.source, ev.target_object)
when :user_update
update_user_object ev.source
end
when Twitter::Streaming::DeletedTweet
# Pass
else else
log ev log ev
end end