weeter 0.13.0 → 0.14.0
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/lib/weeter.rb +1 -0
- data/lib/weeter/configuration.rb +1 -1
- data/lib/weeter/runner.rb +1 -1
- data/lib/weeter/{twitter/tweet_item.rb → tweet_item.rb} +0 -0
- data/lib/weeter/twitter.rb +0 -1
- data/lib/weeter/twitter/tweet_consumer.rb +10 -20
- data/lib/weeter/version.rb +1 -1
- data/spec/weeter/twitter/tweet_consumer_spec.rb +12 -23
- data/weeter.conf.example +0 -12
- metadata +114 -54
data/lib/weeter.rb
CHANGED
data/lib/weeter/configuration.rb
CHANGED
@@ -4,7 +4,7 @@ module Weeter
|
|
4
4
|
|
5
5
|
class Configuration
|
6
6
|
include Singleton
|
7
|
-
attr_accessor :log_path
|
7
|
+
attr_accessor :log_path
|
8
8
|
|
9
9
|
autoload :ClientAppConfig, 'weeter/configuration/client_app_config'
|
10
10
|
autoload :TwitterConfig, 'weeter/configuration/twitter_config'
|
data/lib/weeter/runner.rb
CHANGED
@@ -45,7 +45,7 @@ module Weeter
|
|
45
45
|
end
|
46
46
|
|
47
47
|
def tweet_consumer
|
48
|
-
@tweet_consumer ||= Weeter::Twitter::TweetConsumer.new(@config.twitter, notification_plugin, limiter
|
48
|
+
@tweet_consumer ||= Weeter::Twitter::TweetConsumer.new(@config.twitter, notification_plugin, limiter)
|
49
49
|
end
|
50
50
|
end
|
51
51
|
end
|
File without changes
|
data/lib/weeter/twitter.rb
CHANGED
@@ -5,6 +5,8 @@ module Weeter
|
|
5
5
|
module Twitter
|
6
6
|
class TweetConsumer
|
7
7
|
extend ::Forwardable
|
8
|
+
TRACK_LIMIT = 400
|
9
|
+
FOLLOW_LIMIT = 5000
|
8
10
|
|
9
11
|
attr_reader :limiter, :notifier
|
10
12
|
def_delegators :@notifier, :notify_missed_tweets,
|
@@ -12,15 +14,14 @@ module Weeter
|
|
12
14
|
:delete_tweet,
|
13
15
|
:publish_tweet
|
14
16
|
|
15
|
-
def initialize(twitter_config, notifier, limiter
|
17
|
+
def initialize(twitter_config, notifier, limiter)
|
16
18
|
@config = twitter_config
|
17
19
|
@notifier = notifier
|
18
20
|
@limiter = limiter
|
19
|
-
@subscriptions_limit = subscriptions_limit
|
20
21
|
end
|
21
22
|
|
22
23
|
def connect(filter_params)
|
23
|
-
filter_params = limit_filter_params(filter_params)
|
24
|
+
filter_params = limit_filter_params(filter_params)
|
24
25
|
filter_params = clean_filter_params(filter_params)
|
25
26
|
|
26
27
|
|
@@ -75,27 +76,16 @@ module Weeter
|
|
75
76
|
follow_count = result['follow'].length
|
76
77
|
track_count = result['track'].length
|
77
78
|
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
Weeter.logger.error("Twitter Subscriptions are #{total}, but limited to #{@subscriptions_limit} subscriptions")
|
79
|
+
if follow_count > FOLLOW_LIMIT
|
80
|
+
Weeter.logger.error("Twitter Subscriptions include #{follow_count} follows, but are limited to #{FOLLOW_LIMIT}")
|
81
|
+
result['follow'] = result['follow'][0...FOLLOW_LIMIT]
|
82
82
|
end
|
83
83
|
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
elsif track_count > follow_count
|
88
|
-
track_count -= 1
|
89
|
-
else
|
90
|
-
track_count -= 1
|
91
|
-
end
|
92
|
-
|
93
|
-
total = follow_count + track_count
|
84
|
+
if track_count > TRACK_LIMIT
|
85
|
+
Weeter.logger.error("Twitter Subscriptions include #{track_count} tracks, but are limited to #{TRACK_LIMIT}")
|
86
|
+
result['track'] = result['track'][0...TRACK_LIMIT]
|
94
87
|
end
|
95
88
|
|
96
|
-
result['track'] = result['track'][0...track_count]
|
97
|
-
result['follow'] = result['follow'][0...follow_count]
|
98
|
-
|
99
89
|
result
|
100
90
|
end
|
101
91
|
|
data/lib/weeter/version.rb
CHANGED
@@ -24,7 +24,7 @@ describe Weeter::Twitter::TweetConsumer do
|
|
24
24
|
|
25
25
|
let(:client_proxy) { mock('NotificationPlugin', :publish_tweet => nil) }
|
26
26
|
let(:consumer) do
|
27
|
-
Weeter::Twitter::TweetConsumer.new(Weeter::Configuration::TwitterConfig.instance, client_proxy, limiter
|
27
|
+
Weeter::Twitter::TweetConsumer.new(Weeter::Configuration::TwitterConfig.instance, client_proxy, limiter)
|
28
28
|
end
|
29
29
|
|
30
30
|
let(:track) {[]}
|
@@ -46,45 +46,34 @@ describe Weeter::Twitter::TweetConsumer do
|
|
46
46
|
end
|
47
47
|
|
48
48
|
context 'follow above' do
|
49
|
-
let(:follow) { (1..
|
49
|
+
let(:follow) { (1..5001).to_a }
|
50
50
|
|
51
51
|
it 'it limits follows, but not tracks' do
|
52
52
|
result = consumer.send(:limit_filter_params, params)
|
53
|
-
result.fetch('follow').length.should ==
|
53
|
+
result.fetch('follow').length.should == 5000
|
54
54
|
result.fetch('track').length.should == 0
|
55
55
|
end
|
56
56
|
end
|
57
57
|
|
58
58
|
context 'track above' do
|
59
|
-
let(:track) { (1..
|
59
|
+
let(:track) { (1..401).to_a }
|
60
60
|
|
61
61
|
it 'limits tracks, but not follows' do
|
62
62
|
result = consumer.send(:limit_filter_params, params)
|
63
|
-
result.fetch('track').length.should ==
|
63
|
+
result.fetch('track').length.should == 400
|
64
64
|
result.fetch('follow').length.should == 0
|
65
65
|
end
|
66
66
|
end
|
67
67
|
|
68
|
-
context 'they are
|
69
|
-
let(:track) { (1..
|
70
|
-
let(:follow) { (1..
|
68
|
+
context 'they are both over' do
|
69
|
+
let(:track) { (1..401).to_a }
|
70
|
+
let(:follow) { (1..5001).to_a }
|
71
71
|
|
72
|
-
it 'limits
|
72
|
+
it 'limits both' do
|
73
73
|
|
74
74
|
result = consumer.send(:limit_filter_params, params)
|
75
|
-
result.fetch('track').length.should ==
|
76
|
-
result.fetch('follow').length.should ==
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
|
-
context 'track is more over' do
|
81
|
-
let(:track) { (1..800).to_a }
|
82
|
-
let(:follow) { (1..300).to_a }
|
83
|
-
|
84
|
-
it 'limits tracks, but not follows' do
|
85
|
-
result = consumer.send(:limit_filter_params, params)
|
86
|
-
result.fetch('track').length.should == 700
|
87
|
-
result.fetch('follow').length.should == 300
|
75
|
+
result.fetch('track').length.should == 400
|
76
|
+
result.fetch('follow').length.should == 5000
|
88
77
|
end
|
89
78
|
end
|
90
79
|
end
|
@@ -132,7 +121,7 @@ describe Weeter::Twitter::TweetConsumer do
|
|
132
121
|
end
|
133
122
|
|
134
123
|
it "should not publish unpublishable tweets" do
|
135
|
-
mock_tweet = mock('tweet', :deletion? => false, :publishable? => false, :limit_notice? => false, :[] => '', :limiting_facets => [])
|
124
|
+
mock_tweet = mock('tweet', :deletion? => false, :publishable? => false, :limit_notice? => false, :[] => '', :limiting_facets => [], :disconnect_notice? => false)
|
136
125
|
Weeter::TweetItem.stub!(:new).and_return mock_tweet
|
137
126
|
@client_proxy.should_not_receive(:publish_tweet).with(mock_tweet)
|
138
127
|
end
|
data/weeter.conf.example
CHANGED
@@ -9,18 +9,6 @@ Weeter.configure do |conf|
|
|
9
9
|
# To disable logging:
|
10
10
|
# conf.log_path = false
|
11
11
|
|
12
|
-
# To hard limits number of subscriptions.
|
13
|
-
# If the limit has been reached it will log and error, and fairly truncate
|
14
|
-
# subscriptions.
|
15
|
-
#
|
16
|
-
# default: nolimit = nil
|
17
|
-
#
|
18
|
-
# ** Please Note **
|
19
|
-
# - by default, twitter will reject connection attempts
|
20
|
-
# with greater then 1000 subscriptions
|
21
|
-
#
|
22
|
-
# conf.subscriptions_limit = 1000
|
23
|
-
|
24
12
|
conf.twitter do |twitter|
|
25
13
|
# For basic auth
|
26
14
|
# twitter.basic_auth = {:username => 'johnny', :password => 'secret'}
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: weeter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.14.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -11,140 +11,200 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2012-12-
|
14
|
+
date: 2012-12-31 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: eventmachine
|
18
|
-
|
19
|
-
|
18
|
+
prerelease: false
|
19
|
+
requirement: !ruby/object:Gem::Requirement
|
20
20
|
requirements:
|
21
21
|
- - ! '>='
|
22
22
|
- !ruby/object:Gem::Version
|
23
23
|
version: '0'
|
24
|
+
none: false
|
24
25
|
type: :runtime
|
25
|
-
|
26
|
-
|
26
|
+
version_requirements: !ruby/object:Gem::Requirement
|
27
|
+
requirements:
|
28
|
+
- - ! '>='
|
29
|
+
- !ruby/object:Gem::Version
|
30
|
+
version: '0'
|
31
|
+
none: false
|
27
32
|
- !ruby/object:Gem::Dependency
|
28
33
|
name: eventmachine_httpserver
|
29
|
-
|
30
|
-
|
34
|
+
prerelease: false
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
31
36
|
requirements:
|
32
37
|
- - ! '>='
|
33
38
|
- !ruby/object:Gem::Version
|
34
39
|
version: 0.2.1
|
40
|
+
none: false
|
35
41
|
type: :runtime
|
36
|
-
|
37
|
-
|
42
|
+
version_requirements: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - ! '>='
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: 0.2.1
|
47
|
+
none: false
|
38
48
|
- !ruby/object:Gem::Dependency
|
39
49
|
name: em-hiredis
|
40
|
-
|
41
|
-
|
50
|
+
prerelease: false
|
51
|
+
requirement: !ruby/object:Gem::Requirement
|
42
52
|
requirements:
|
43
53
|
- - ! '>='
|
44
54
|
- !ruby/object:Gem::Version
|
45
55
|
version: 0.1.0
|
56
|
+
none: false
|
46
57
|
type: :runtime
|
47
|
-
|
48
|
-
|
58
|
+
version_requirements: !ruby/object:Gem::Requirement
|
59
|
+
requirements:
|
60
|
+
- - ! '>='
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: 0.1.0
|
63
|
+
none: false
|
49
64
|
- !ruby/object:Gem::Dependency
|
50
65
|
name: multi_json
|
51
|
-
|
52
|
-
|
66
|
+
prerelease: false
|
67
|
+
requirement: !ruby/object:Gem::Requirement
|
53
68
|
requirements:
|
54
69
|
- - ! '>='
|
55
70
|
- !ruby/object:Gem::Version
|
56
71
|
version: 1.0.2
|
72
|
+
none: false
|
57
73
|
type: :runtime
|
58
|
-
|
59
|
-
|
74
|
+
version_requirements: !ruby/object:Gem::Requirement
|
75
|
+
requirements:
|
76
|
+
- - ! '>='
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
version: 1.0.2
|
79
|
+
none: false
|
60
80
|
- !ruby/object:Gem::Dependency
|
61
81
|
name: hashie
|
62
|
-
|
63
|
-
|
82
|
+
prerelease: false
|
83
|
+
requirement: !ruby/object:Gem::Requirement
|
64
84
|
requirements:
|
65
85
|
- - ! '>='
|
66
86
|
- !ruby/object:Gem::Version
|
67
87
|
version: 1.1.0
|
88
|
+
none: false
|
68
89
|
type: :runtime
|
69
|
-
|
70
|
-
|
90
|
+
version_requirements: !ruby/object:Gem::Requirement
|
91
|
+
requirements:
|
92
|
+
- - ! '>='
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
version: 1.1.0
|
95
|
+
none: false
|
71
96
|
- !ruby/object:Gem::Dependency
|
72
97
|
name: em-http-request
|
73
|
-
|
74
|
-
|
98
|
+
prerelease: false
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
75
100
|
requirements:
|
76
101
|
- - ! '>='
|
77
102
|
- !ruby/object:Gem::Version
|
78
103
|
version: 1.0.0
|
104
|
+
none: false
|
79
105
|
type: :runtime
|
80
|
-
|
81
|
-
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ! '>='
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: 1.0.0
|
111
|
+
none: false
|
82
112
|
- !ruby/object:Gem::Dependency
|
83
113
|
name: i18n
|
84
|
-
|
85
|
-
|
114
|
+
prerelease: false
|
115
|
+
requirement: !ruby/object:Gem::Requirement
|
86
116
|
requirements:
|
87
117
|
- - ~>
|
88
118
|
- !ruby/object:Gem::Version
|
89
119
|
version: 0.6.0
|
120
|
+
none: false
|
90
121
|
type: :runtime
|
91
|
-
|
92
|
-
|
122
|
+
version_requirements: !ruby/object:Gem::Requirement
|
123
|
+
requirements:
|
124
|
+
- - ~>
|
125
|
+
- !ruby/object:Gem::Version
|
126
|
+
version: 0.6.0
|
127
|
+
none: false
|
93
128
|
- !ruby/object:Gem::Dependency
|
94
129
|
name: activesupport
|
95
|
-
|
96
|
-
|
130
|
+
prerelease: false
|
131
|
+
requirement: !ruby/object:Gem::Requirement
|
97
132
|
requirements:
|
98
133
|
- - ! '>='
|
99
134
|
- !ruby/object:Gem::Version
|
100
135
|
version: 3.1.1
|
136
|
+
none: false
|
101
137
|
type: :runtime
|
102
|
-
|
103
|
-
|
138
|
+
version_requirements: !ruby/object:Gem::Requirement
|
139
|
+
requirements:
|
140
|
+
- - ! '>='
|
141
|
+
- !ruby/object:Gem::Version
|
142
|
+
version: 3.1.1
|
143
|
+
none: false
|
104
144
|
- !ruby/object:Gem::Dependency
|
105
145
|
name: simple_oauth
|
106
|
-
|
107
|
-
|
146
|
+
prerelease: false
|
147
|
+
requirement: !ruby/object:Gem::Requirement
|
108
148
|
requirements:
|
109
149
|
- - ~>
|
110
150
|
- !ruby/object:Gem::Version
|
111
151
|
version: 0.1.5
|
152
|
+
none: false
|
112
153
|
type: :runtime
|
113
|
-
|
114
|
-
|
154
|
+
version_requirements: !ruby/object:Gem::Requirement
|
155
|
+
requirements:
|
156
|
+
- - ~>
|
157
|
+
- !ruby/object:Gem::Version
|
158
|
+
version: 0.1.5
|
159
|
+
none: false
|
115
160
|
- !ruby/object:Gem::Dependency
|
116
161
|
name: lukemelia-twitter-stream
|
117
|
-
|
118
|
-
|
162
|
+
prerelease: false
|
163
|
+
requirement: !ruby/object:Gem::Requirement
|
119
164
|
requirements:
|
120
165
|
- - ~>
|
121
166
|
- !ruby/object:Gem::Version
|
122
167
|
version: 0.1.15
|
168
|
+
none: false
|
123
169
|
type: :runtime
|
124
|
-
|
125
|
-
|
170
|
+
version_requirements: !ruby/object:Gem::Requirement
|
171
|
+
requirements:
|
172
|
+
- - ~>
|
173
|
+
- !ruby/object:Gem::Version
|
174
|
+
version: 0.1.15
|
175
|
+
none: false
|
126
176
|
- !ruby/object:Gem::Dependency
|
127
177
|
name: rspec
|
128
|
-
|
129
|
-
|
178
|
+
prerelease: false
|
179
|
+
requirement: !ruby/object:Gem::Requirement
|
130
180
|
requirements:
|
131
181
|
- - ~>
|
132
182
|
- !ruby/object:Gem::Version
|
133
183
|
version: 2.6.0
|
184
|
+
none: false
|
134
185
|
type: :development
|
135
|
-
|
136
|
-
|
186
|
+
version_requirements: !ruby/object:Gem::Requirement
|
187
|
+
requirements:
|
188
|
+
- - ~>
|
189
|
+
- !ruby/object:Gem::Version
|
190
|
+
version: 2.6.0
|
191
|
+
none: false
|
137
192
|
- !ruby/object:Gem::Dependency
|
138
193
|
name: ZenTest
|
139
|
-
|
140
|
-
|
194
|
+
prerelease: false
|
195
|
+
requirement: !ruby/object:Gem::Requirement
|
141
196
|
requirements:
|
142
197
|
- - ! '>='
|
143
198
|
- !ruby/object:Gem::Version
|
144
199
|
version: '0'
|
200
|
+
none: false
|
145
201
|
type: :development
|
146
|
-
|
147
|
-
|
202
|
+
version_requirements: !ruby/object:Gem::Requirement
|
203
|
+
requirements:
|
204
|
+
- - ! '>='
|
205
|
+
- !ruby/object:Gem::Version
|
206
|
+
version: '0'
|
207
|
+
none: false
|
148
208
|
description: Weeter subscribes to a set of twitter users or search terms using Twitter's
|
149
209
|
streaming API, and notifies your app with each new tweet.
|
150
210
|
email:
|
@@ -182,9 +242,9 @@ files:
|
|
182
242
|
- lib/weeter/plugins/subscription_plugin.rb
|
183
243
|
- lib/weeter/runner.rb
|
184
244
|
- lib/weeter/tasks.rb
|
245
|
+
- lib/weeter/tweet_item.rb
|
185
246
|
- lib/weeter/twitter.rb
|
186
247
|
- lib/weeter/twitter/tweet_consumer.rb
|
187
|
-
- lib/weeter/twitter/tweet_item.rb
|
188
248
|
- lib/weeter/version.rb
|
189
249
|
- log/.gitignore
|
190
250
|
- spec/.DS_Store
|
@@ -208,20 +268,20 @@ rdoc_options: []
|
|
208
268
|
require_paths:
|
209
269
|
- lib
|
210
270
|
required_ruby_version: !ruby/object:Gem::Requirement
|
211
|
-
none: false
|
212
271
|
requirements:
|
213
272
|
- - ! '>='
|
214
273
|
- !ruby/object:Gem::Version
|
215
274
|
version: '0'
|
216
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
217
275
|
none: false
|
276
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
218
277
|
requirements:
|
219
278
|
- - ! '>='
|
220
279
|
- !ruby/object:Gem::Version
|
221
280
|
version: '0'
|
281
|
+
none: false
|
222
282
|
requirements: []
|
223
283
|
rubyforge_project: weeter
|
224
|
-
rubygems_version: 1.8.
|
284
|
+
rubygems_version: 1.8.24
|
225
285
|
signing_key:
|
226
286
|
specification_version: 3
|
227
287
|
summary: Consume the Twitter stream and notify your app
|