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