lib/pupil/stream/base.rb in pupil-0.1.3 vs lib/pupil/stream/base.rb in pupil-0.1.4

- old
+ new

@@ -2,11 +2,11 @@ class Stream attr_reader :screen_name class StreamError < StandardError ; end STREAM_APIS = { :userstream => "https://userstream.twitter.com/2/user.json", - :filter => "https://stream.twitter.com/1/statuses/filter.json%s" + :search => "https://stream.twitter.com/1/statuses/filter.json%s" } def initialize key @screen_name = key[:screen_name] @@ -19,18 +19,18 @@ @consumer, key[:access_token], key[:access_token_secret] ) end - + # @return [Pupil::Stream::Shash, Pupil::Stream::Status] event variable supported :status, :retweeted, :favorite, :friends and :delete def start(type, param=nil, &block) raise ArgumentError unless block_given? - + run_get_stream type, param, &block end - + def run_get_stream(type, param=nil, &block) uri = URI.parse(STREAM_APIS[type] % Pupil.param_serializer(param)) https = Net::HTTP.new(uri.host, uri.port) https.use_ssl = true https.verify_mode = OpenSSL::SSL::VERIFY_NONE @@ -52,11 +52,11 @@ line.strip! status = JSON.parse(line) rescue break end - + event = self.guess_event status block.call event end end end @@ -64,55 +64,57 @@ rescue => vars raise StreamError, "StreamError: #{vars}" end end end - + def guess_event status if status["delete"] - return Shash.new(:delete, status["delete"]["status"]) + return Pupil::Stream::Hash.new(status["delete"]["status"], :delete) elsif status["friends"] - return Shash.new(:friends, status["friends"]) + return Pupil::Stream::Array.new(status["friends"], :friends) elsif status["event"] == "favorite" - return Shash.new(:favorite, status) + return Pupil::Stream::Hash.new(status, :favorite) elsif status["retweeted_status"] - return Status.new(status, :retweeted) + return Pupil::Stream::Status.new(status, :retweeted) elsif status["text"] - return Status.new(status) + return Pupil::Stream::Status.new(status) else - return Shash.new(:unknown, status) + return Pupil::Stream::Hash.new(status, :unknown) end end - + # Stream Status class Status < Pupil::Status attr_reader :event attr_reader :retweeted_status - - def initialize status, event=nil + + def initialize(status, event=nil) super(status) @event = (event)? event : :status @retweeted_status = status["retweeted_status"] end end - + # Stream Hash - class Shash + class Hash < Hash attr_reader :event - - def initialize event, status - @hash = status + + def initialize(status, event) + super() + self.update(status) @event = event end - - def [] param - @hash[param] + end + + # Stream Array + class Array < Array + attr_reader :event + + def initialize(status, event) + super(status) + #self.update(status) + @event = event end - - def size - @hash.size - end - - alias_method :length, :size end end end