bhauman-twroute 0.1.7 → 0.1.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.7
1
+ 0.1.8
data/bin/twroute_runner CHANGED
@@ -6,7 +6,9 @@ require 'twroute/application'
6
6
 
7
7
  Daemons.run_proc('twroute_runner.rb', :dir_mode => :normal, :dir => 'log') do
8
8
  ActiveRecord::Base.logger = Logger.new(File.open(File.join(::Twroute::Application.root_dir, 'log/database.log'), 'a'))
9
- Twroute::Application.logger = Logger.new(File.open(File.join(::Twroute::Application.root_dir, 'log/twroute.log'), 'a'))
10
- Twroute::Application.run
9
+ Twroute::Application.logger = Logger.new(File.open(File.join(::Twroute::Application.root_dir, 'log/twroute.log'), 'a'))
10
+ loop do
11
+ Twroute::Application.run
12
+ end
11
13
  end
12
14
 
data/lib/twroute.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  require 'rubygems'
2
2
  require 'twroute/tweeter'
3
+ require 'twroute/polling_search'
3
4
  require 'twroute/routes'
4
5
  require 'twroute/dispatcher'
5
6
  require 'twroute/tweet_route'
@@ -11,10 +11,16 @@ module Twroute
11
11
  setup
12
12
  end
13
13
  def setup
14
- @tweeter = ::Twroute::Tweeter.new(config.twitter.user,
15
- config.twitter.password,
16
- config.twitter.stream_api,
17
- config.twitter.stream_api_args.marshal_dump)
14
+ if self.config.twitter.search_params
15
+ @tweeter = ::Twroute::PollingSearch.new(config.twitter.user,
16
+ config.twitter.password,
17
+ config.twitter.search_params.marshal_dump)
18
+ else
19
+ @tweeter = ::Twroute::Tweeter.new(config.twitter.user,
20
+ config.twitter.password,
21
+ config.twitter.stream_api,
22
+ config.twitter.stream_api_args.marshal_dump)
23
+ end
18
24
  @dispatcher = ::Twroute::Dispatcher.new( config.submit_to.marshal_dump,
19
25
  *::Twroute::Routes.routes )
20
26
  @requester = ::Twroute::Requester::Delayed.new
@@ -0,0 +1,48 @@
1
+ require 'yajl'
2
+ require 'yajl/http_stream'
3
+ require 'observer'
4
+ require 'uri'
5
+
6
+ module Twroute
7
+ class PollingSearch
8
+ include Observable
9
+ attr_accessor :since_id
10
+
11
+ def initialize(user, password, post_arg_hash = {})
12
+ @user = user
13
+ @password = password
14
+ @post_arg_hash = post_arg_hash
15
+ end
16
+
17
+ def twitter_search_uri
18
+ URI.parse("http://#{@user}:#{@password}@search.twitter.com/search.json?#{self.query_string}")
19
+ end
20
+
21
+ def query_string
22
+ @post_arg_hash['since_id'] = @since_id if @since_id
23
+ @post_arg_hash.keys.collect do |key|
24
+ "#{key}=#{URI.escape(@post_arg_hash[key].to_s)}"
25
+ end.sort_by { |x| x }.join('&')
26
+ end
27
+
28
+ def start
29
+ puts twitter_search_uri.to_s
30
+ loop do
31
+ send_query
32
+ sleep 30
33
+ end
34
+ end
35
+
36
+ def send_query
37
+ results = Yajl::HttpStream.get( twitter_search_uri,
38
+ :symbolize_keys => true)
39
+ @since_id = results[:results].last[:id]
40
+ results[:results].each do |tweet|
41
+ changed
42
+ notify_observers( tweet )
43
+ end
44
+ end
45
+
46
+ end
47
+ end
48
+
@@ -8,8 +8,8 @@ module Twroute
8
8
 
9
9
  def tweet(tweet_hash)
10
10
  reset
11
- @tweet_hash = tweet_hash
12
- @sender_hash = tweet_hash[:user]
11
+ @tweet_hash = tweet_hash || { }
12
+ @sender_hash = tweet_hash[:user] || { }
13
13
  parse_tweet(tweet_hash[:text])
14
14
  end
15
15
 
@@ -0,0 +1,50 @@
1
+ require 'test_helper.rb'
2
+ require 'twroute/polling_search'
3
+
4
+ class TestObserver
5
+ attr_accessor :results
6
+ def update(tweet_hash)
7
+ @results ||= []
8
+ @results << tweet_hash
9
+ end
10
+ end
11
+
12
+
13
+ class PollingSearchTest < Test::Unit::TestCase
14
+ def setup
15
+ end
16
+
17
+ def teardown
18
+ end
19
+
20
+ context "with tweeter" do
21
+ setup do
22
+ @tweeter = Twroute::PollingSearch.new('bhauman',
23
+ 'watertank',
24
+ { :q => 'twitter', :rpp => 20 })
25
+ end
26
+
27
+ should "be able to create query string" do
28
+ @tweeter.query_string.should == 'q=twitter&rpp=20'
29
+ end
30
+
31
+ should "be able to create a twitter search url" do
32
+ @tweeter.twitter_search_uri.to_s.should == 'http://bhauman:watertank@search.twitter.com/search.json?q=twitter&rpp=20'
33
+ end
34
+
35
+ should "be able to send query and get results" do
36
+ @listen = TestObserver.new
37
+ @tweeter.add_observer @listen
38
+ @tweeter.send_query
39
+
40
+ @listen.results.length.should == 20
41
+
42
+ @tweeter.since_id.should_not be_nil
43
+ @tweeter.since_id.should == @listen.results.last[:id]
44
+ @tweeter.twitter_search_uri.to_s.should == "http://bhauman:watertank@search.twitter.com/search.json?q=twitter&rpp=20&since_id=#{@listen.results.last[:id]}"
45
+
46
+ end
47
+
48
+ end
49
+
50
+ end
data/test/test_helper.rb CHANGED
@@ -7,7 +7,7 @@ require 'stump'
7
7
  $LOAD_PATH.unshift(File.dirname(__FILE__))
8
8
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
9
9
 
10
- require 'twroute'
10
+ require 'twroute.rb'
11
11
 
12
12
  class Test::Unit::TestCase
13
13
  end
@@ -5,6 +5,8 @@ class TweetRouteTest < Test::Unit::TestCase
5
5
  @tweet_route = Twroute::TweetRoute.new(Twroute::Parser::Tags.new, '/user/:tweet[sender]/tags/:tags')
6
6
  @tweet_str = "#this #is cool #too"
7
7
  @tweet = {:source=>"<a href=\"http://twitterfox.net/\">TwitterFox</a>", :user=>{:url=>"http://rosed1st.multiply.com/", :friends_count=>275, :time_zone=>"Central Time (US & Canada)", :screen_name=>"RoseD1st", :notifications=>nil, :utc_offset=>-21600, :profile_image_url=>"http://s3.amazonaws.com/twitter_production/profile_images/352932267/twitterProfilePhoto_normal.jpg", :protected=>false, :verified=>false, :profile_text_color=>"000000", :name=>"RoseD1st", :profile_sidebar_border_color=>"D5D39E", :statuses_count=>625, :profile_link_color=>"B4C67C", :location=>"Mad as Hell!", :following=>nil, :profile_background_image_url=>"http://s3.amazonaws.com/twitter_production/profile_background_images/2475770/background.png", :description=>"A conservatve whos had it with Obamas lies!I'm a proud \342\200\234Birther\342\200\235 and only those who haven't looked at the facts think there's no problem", :followers_count=>211, :created_at=>"Thu May 01 02:11:28 +0000 2008", :profile_background_tile=>true, :id=>14609143, :profile_background_color=>"9ae4e8", :profile_sidebar_fill_color=>"778F5F", :favourites_count=>19}, :text=>"this is a #test #tweet", :favorited=>false, :in_reply_to_screen_name=>nil, :in_reply_to_status_id=>nil, :created_at=>"Sun Aug 09 00:25:46 +0000 2009", :id=>3199928174, :in_reply_to_user_id=>nil, :truncated=>false}
8
+
9
+ @search_tweet = {:profile_image_url=>"http://a1.twimg.com/profile_images/49018042/Tom_Icon_64x64_normal.png", :source=>"&lt;a href=&quot;http://twitter.com/&quot;&gt;web&lt;/a&gt;", :text=>"this is a #test #tweet", :created_at=>"Fri, 11 Sep 2009 20:28:32 +0000", :to_user_id=>nil, :from_user=>"tmornini", :from_user_id=>168963, :iso_language_code=>"en", :id=>3918907432}
8
10
  end
9
11
 
10
12
  should "be able to determine if the required hash keys have been met" do
@@ -26,6 +28,17 @@ class TweetRouteTest < Test::Unit::TestCase
26
28
 
27
29
  post_args['tweet[user]'].should == nil
28
30
  end
31
+
32
+ should "be able to handle search result tweet" do
33
+ @tweet_route.tweet(@search_tweet)
34
+ post_args = @tweet_route.get_post_args
35
+ post_args['tweet[from_user]'].should == 'tmornini'
36
+ post_args['tweet[text]'].should == 'this is a #test #tweet'
37
+ post_args['parsed[tags]'].should == 'test-tweet'
38
+
39
+ post_args['sender'].should == nil
40
+ @tweet_route.fill_in_url_pattern.should == "/user/:tweet[sender]/tags/test-tweet"
41
+ end
29
42
 
30
43
  end
31
44
 
data/twroute.gemspec CHANGED
@@ -2,11 +2,11 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{twroute}
5
- s.version = "0.1.7"
5
+ s.version = "0.1.8"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["bhauman"]
9
- s.date = %q{2009-08-25}
9
+ s.date = %q{2009-09-11}
10
10
  s.description = %q{Twroute listens for Twitter updates and redirects them to HTTP post requests}
11
11
  s.email = %q{bhauman@gmail.com}
12
12
  s.executables = ["twroute", "twroute_runner", "twroute_worker"]
@@ -42,6 +42,7 @@ Gem::Specification.new do |s|
42
42
  "lib/twroute/parser/regex.rb",
43
43
  "lib/twroute/parser/tags.rb",
44
44
  "lib/twroute/parser/users.rb",
45
+ "lib/twroute/polling_search.rb",
45
46
  "lib/twroute/requester/basic.rb",
46
47
  "lib/twroute/requester/delayed.rb",
47
48
  "lib/twroute/requester/delayed/create_delayed_jobs.rb",
@@ -58,6 +59,7 @@ Gem::Specification.new do |s|
58
59
  "test/fixtures/non_twitter_response.yaml",
59
60
  "test/fixtures/twitter_response.yaml",
60
61
  "test/fixtures/twitter_response_bad_status.yaml",
62
+ "test/polling_search_test.rb",
61
63
  "test/reqex_parser_test.rb",
62
64
  "test/routes_test.rb",
63
65
  "test/tags_parser_test.rb",
@@ -80,6 +82,7 @@ Gem::Specification.new do |s|
80
82
  "test/config_test.rb",
81
83
  "test/delayed_request_test.rb",
82
84
  "test/dispatcher_test.rb",
85
+ "test/polling_search_test.rb",
83
86
  "test/reqex_parser_test.rb",
84
87
  "test/routes_test.rb",
85
88
  "test/tags_parser_test.rb",
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bhauman-twroute
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.7
4
+ version: 0.1.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - bhauman
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-08-25 00:00:00 -07:00
12
+ date: 2009-09-11 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -141,6 +141,7 @@ files:
141
141
  - lib/twroute/parser/regex.rb
142
142
  - lib/twroute/parser/tags.rb
143
143
  - lib/twroute/parser/users.rb
144
+ - lib/twroute/polling_search.rb
144
145
  - lib/twroute/requester/basic.rb
145
146
  - lib/twroute/requester/delayed.rb
146
147
  - lib/twroute/requester/delayed/create_delayed_jobs.rb
@@ -157,6 +158,7 @@ files:
157
158
  - test/fixtures/non_twitter_response.yaml
158
159
  - test/fixtures/twitter_response.yaml
159
160
  - test/fixtures/twitter_response_bad_status.yaml
161
+ - test/polling_search_test.rb
160
162
  - test/reqex_parser_test.rb
161
163
  - test/routes_test.rb
162
164
  - test/tags_parser_test.rb
@@ -199,6 +201,7 @@ test_files:
199
201
  - test/config_test.rb
200
202
  - test/delayed_request_test.rb
201
203
  - test/dispatcher_test.rb
204
+ - test/polling_search_test.rb
202
205
  - test/reqex_parser_test.rb
203
206
  - test/routes_test.rb
204
207
  - test/tags_parser_test.rb