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.
@@ -11,6 +11,7 @@ module Weeter
11
11
  autoload 'Twitter', 'weeter/twitter'
12
12
  autoload 'Limitator', 'weeter/limitator'
13
13
  autoload 'Configuration', 'weeter/configuration'
14
+ autoload 'TweetItem', 'weeter/tweet_item'
14
15
 
15
16
  def configure
16
17
  yield Configuration.instance
@@ -4,7 +4,7 @@ module Weeter
4
4
 
5
5
  class Configuration
6
6
  include Singleton
7
- attr_accessor :log_path, :subscriptions_limit
7
+ attr_accessor :log_path
8
8
 
9
9
  autoload :ClientAppConfig, 'weeter/configuration/client_app_config'
10
10
  autoload :TwitterConfig, 'weeter/configuration/twitter_config'
@@ -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, @config.subscriptions_limit)
48
+ @tweet_consumer ||= Weeter::Twitter::TweetConsumer.new(@config.twitter, notification_plugin, limiter)
49
49
  end
50
50
  end
51
51
  end
@@ -1,2 +1 @@
1
1
  require 'weeter/twitter/tweet_consumer'
2
- require 'weeter/twitter/tweet_item'
@@ -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, subscriptions_limit = nil)
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) if @subscriptions_limit
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
- total = follow_count + track_count
79
-
80
- if total > @subscriptions_limit
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
- while total > 1000
85
- if follow_count > track_count
86
- follow_count -= 1
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
 
@@ -1,3 +1,3 @@
1
1
  module Weeter
2
- VERSION = "0.13.0"
2
+ VERSION = "0.14.0"
3
3
  end
@@ -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, 1000)
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..1001).to_a }
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 == 1000
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..1001).to_a }
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 == 1000
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 equally over' do
69
- let(:track) { (1..600).to_a }
70
- let(:follow) { (1..600).to_a }
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 tracks, but not follows' do
72
+ it 'limits both' do
73
73
 
74
74
  result = consumer.send(:limit_filter_params, params)
75
- result.fetch('track').length.should == 500
76
- result.fetch('follow').length.should == 500
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
@@ -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.13.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-04 00:00:00.000000000Z
14
+ date: 2012-12-31 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: eventmachine
18
- requirement: &2161838440 !ruby/object:Gem::Requirement
19
- none: false
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
- prerelease: false
26
- version_requirements: *2161838440
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
- requirement: &2161836940 !ruby/object:Gem::Requirement
30
- none: false
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
- prerelease: false
37
- version_requirements: *2161836940
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
- requirement: &2161835100 !ruby/object:Gem::Requirement
41
- none: false
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
- prerelease: false
48
- version_requirements: *2161835100
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
- requirement: &2161833640 !ruby/object:Gem::Requirement
52
- none: false
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
- prerelease: false
59
- version_requirements: *2161833640
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
- requirement: &2161832500 !ruby/object:Gem::Requirement
63
- none: false
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
- prerelease: false
70
- version_requirements: *2161832500
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
- requirement: &2161832040 !ruby/object:Gem::Requirement
74
- none: false
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
- prerelease: false
81
- version_requirements: *2161832040
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
- requirement: &2161831220 !ruby/object:Gem::Requirement
85
- none: false
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
- prerelease: false
92
- version_requirements: *2161831220
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
- requirement: &2161830060 !ruby/object:Gem::Requirement
96
- none: false
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
- prerelease: false
103
- version_requirements: *2161830060
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
- requirement: &2161829240 !ruby/object:Gem::Requirement
107
- none: false
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
- prerelease: false
114
- version_requirements: *2161829240
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
- requirement: &2161828460 !ruby/object:Gem::Requirement
118
- none: false
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
- prerelease: false
125
- version_requirements: *2161828460
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
- requirement: &2161827700 !ruby/object:Gem::Requirement
129
- none: false
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
- prerelease: false
136
- version_requirements: *2161827700
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
- requirement: &2161826960 !ruby/object:Gem::Requirement
140
- none: false
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
- prerelease: false
147
- version_requirements: *2161826960
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.10
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