powertrack 1.3.1 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- YmM3YTA5ZDU2Y2Y2ZDkzNzY2NWMzYjExOWU0OTUwMmFjMGY2NTY0NA==
5
- data.tar.gz: !binary |-
6
- ODZiMjAzMjJhNmI0ZTg1ZGI4MmI4YjgwNjhiMWM0NGY2Mjg3Y2U4Zg==
2
+ SHA1:
3
+ metadata.gz: b66eefaa2405a5c5087fc1736170bc562efa4322
4
+ data.tar.gz: aedb846d2550c44716a803793812a3d22d7397e0
7
5
  SHA512:
8
- metadata.gz: !binary |-
9
- YWFhMTcyNzU1NjkxOTNhZjE5M2RlNmFmZWQ1OGQwMDZiNTE5MWIyYmI5ZmE1
10
- NjU2ODNkODllMGI1MjI1NmQyZGRjODc1N2Q5MGQzMWNmY2FjYmRmMzgwYWJl
11
- MzI0MjQzYjBmMTI5YTdmZjc4NzhkNTg5YjU3YzgxMzgwMWQ2NTM=
12
- data.tar.gz: !binary |-
13
- ODY0NGIyODVlYmQzMWIwNzBlN2NhYzBjNWM0MzU3YjNkY2I4MGEzMzgxY2Qy
14
- YWRkMzJiZTRlYmFhMGYyNzNlZTQzZTNkYzVjMGE3MGRkNGRkNWM5MGYyODQ4
15
- NzE1YjY1NDRmY2MyMDE2NDFlZmYxZDcyYmVlODk5ZjA2YTRkODM=
6
+ metadata.gz: 42f74190100119a58477e7123a52e179800202b713342aaa005b390b34980a9492bd328a1f8a598b4c09715a5eb60679ef0931a703c21d5f7d19428822232414
7
+ data.tar.gz: b200cd8cd5536b468fab9ea9db5f068876a3b61765fe567f0bf6d5ea1f213515054e98bbc31aebbdc8cea0a5d64ce98f7961fa3f14082d2246a097ef51d33a97
data/Gemfile CHANGED
@@ -1,7 +1,7 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
3
  group :test do
4
- gem 'yajl-ruby', '~> 1.0', require: 'yajl'
4
+ gem 'yajl-ruby', '~> 1.3.1', require: 'yajl'
5
5
  end
6
6
 
7
7
  # Specify your gem's dependencies in powertrack-rb.gemspec
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- powertrack (1.3.1)
4
+ powertrack (2.0.0)
5
5
  em-http-request (~> 1.1)
6
6
  eventmachine (~> 1.0)
7
7
  exponential-backoff (~> 0.0.2)
@@ -29,7 +29,7 @@ GEM
29
29
  rake (10.4.2)
30
30
  ruby-prof (0.15.8)
31
31
  void_logger (0.1)
32
- yajl-ruby (1.2.1)
32
+ yajl-ruby (1.3.1)
33
33
 
34
34
  PLATFORMS
35
35
  ruby
@@ -40,4 +40,7 @@ DEPENDENCIES
40
40
  powertrack!
41
41
  rake (~> 10.3)
42
42
  ruby-prof (~> 0.15)
43
- yajl-ruby (~> 1.0)
43
+ yajl-ruby (~> 1.3.1)
44
+
45
+ BUNDLED WITH
46
+ 1.10.6
@@ -1,4 +1,10 @@
1
- v1.3.0
1
+ v2.0.0
2
+ ------
3
+
4
+ * Remove support for PowerTrack v1 since this version was sunset in early
5
+ January 2017
6
+
7
+ v1.3.1
2
8
  ------
3
9
 
4
10
  * Add the PowerTrack::Stream.v2? instance method
data/README.md CHANGED
@@ -128,16 +128,20 @@ replaying the same timeframe again and again when GNIP is unstable.
128
128
  All the errors that come from PowerTrack are defined through an ad-hoc exception
129
129
  class hierarchy. See ```lib/powertrack/errors.rb```.
130
130
 
131
+ ## PowerTrack v1
132
+
133
+ The library was originally designed for PowerTrack v1. But this version of the
134
+ PowerTrack API was sunset in early January 2017.
135
+
136
+ Consequently, since v2.0, the library does not support v1 anymore.
137
+
131
138
  ## PowerTrack v2
132
139
 
133
- The library provides early support for PowerTrack API version 2. Please read
140
+ The library provides support for PowerTrack API version 2. Please read
134
141
  [PowerTrack API v2](http://support.gnip.com/apis/powertrack2.0/index.html) and
135
142
  the [Migration Guide](http://support.gnip.com/apis/powertrack2.0/transition.html)
136
143
  for details about this new major release.
137
144
 
138
- Set the ```:v2```option to ```true``` when building a ```PowerTrack::Stream```
139
- object to enable this feature. The library uses v1 by default.
140
-
141
145
  Everything should work the same for v2 as for v1 except
142
146
 
143
147
  o ```PowerTrack::Stream.add_rule``` and ```PowerTrack::Stream.delete_rule```
@@ -7,11 +7,8 @@ module PowerTrack
7
7
  # The maximum length of a rule tag.
8
8
  MAX_TAG_LENGTH = 255
9
9
 
10
- # The maximum lengh of the value of a standard rule
11
- MAX_STD_RULE_VALUE_LENGTH = 1024
12
-
13
- # The maximum lengh of the value of a long rule
14
- MAX_LONG_RULE_VALUE_LENGTH = 2048
10
+ # The maximum lengh of the value of a rule
11
+ MAX_RULE_VALUE_LENGTH = 2048
15
12
 
16
13
  # The maximum number of positive terms in a single rule value
17
14
  MAX_POSITIVE_TERMS = 30
@@ -20,58 +17,29 @@ module PowerTrack
20
17
  MAX_NEGATIVE_TERMS = 50
21
18
 
22
19
  # The maximum size of the HTTP body accepted by PowerTrack /rules calls (in bytes)
23
- # 1 MB for v1, 5MB for v2
24
- MAX_RULES_BODY_SIZE = {
25
- v1: 1024**2,
26
- v2: 5*1024**2
27
- }
20
+ # 5MB since v2
21
+ MAX_RULES_BODY_SIZE = 5*1024**2
28
22
 
29
23
  # The default rule features
30
24
  DEFAULT_RULE_FEATURES = {
31
25
  # no id by default
32
26
  id: nil,
33
27
  # no tag by default
34
- tag: nil,
35
- # long determined by value length
36
- long: nil,
37
- # v1 by default
38
- v2: false
28
+ tag: nil
39
29
  }.freeze
40
30
 
41
31
  attr_reader :value, :id, :tag, :error
42
32
 
43
33
  # Builds a new rule based on a value and some optional features
44
- # (:id, :tag, :long, :v2).
45
- #
46
- # By default, the constructor assesses if it's a long rule or not
47
- # based on the length of the value. But the 'long' feature can be
48
- # explicitly specified with the :long feature. Finally, if :v2 is
49
- # true the rule is always considered long.
34
+ # (:id, :tag).
50
35
  def initialize(value, features=nil)
51
36
  @value = value || ''
52
37
  features = DEFAULT_RULE_FEATURES.merge(features || {})
53
38
  @tag = features[:tag]
54
39
  @id = features[:id]
55
- # only accept boolean values
56
- _v2 = features[:v2]
57
- @v2 = (_v2 == !!_v2) ? _v2 : false
58
- # check if long is a boolean
59
- _long = features[:long]
60
- # v2 rules are always long
61
- @long = (@v2 ? true : (_long == !!_long ? _long : @value.size > MAX_STD_RULE_VALUE_LENGTH))
62
40
  @error = nil
63
41
  end
64
42
 
65
- # Returns true if the rule is long.
66
- def long?
67
- @long
68
- end
69
-
70
- # Returns true if the rule is v2.
71
- def v2?
72
- @v2
73
- end
74
-
75
43
  # Returns true if the rule is valid, false otherwise. The validation error
76
44
  # can be through the error method.
77
45
  def valid?
@@ -82,23 +50,12 @@ module PowerTrack
82
50
  :too_long_value?,
83
51
  :contains_empty_source?,
84
52
  :contains_negated_or?,
85
- :too_long_tag?
53
+ :too_long_tag?,
54
+ :contains_explicit_and?,
55
+ :contains_lowercase_or?,
56
+ :contains_explicit_not?
86
57
  ]
87
58
 
88
- if @v2
89
- validation_rules += [
90
- :contains_explicit_and?,
91
- :contains_lowercase_or?,
92
- :contains_explicit_not?
93
- ]
94
- else
95
- # no more restriction on the number of positive and negative terms in v2
96
- validation_rules += [
97
- :too_many_positive_terms?,
98
- :too_many_negative_terms?
99
- ]
100
- end
101
-
102
59
  validation_rules.each do |validator|
103
60
  # stop when 1 validator fails
104
61
  if self.send(validator)
@@ -132,8 +89,7 @@ module PowerTrack
132
89
  def ==(other)
133
90
  other.class == self.class &&
134
91
  other.value == @value &&
135
- other.tag == @tag &&
136
- other.long? == self.long?
92
+ other.tag == @tag
137
93
  end
138
94
 
139
95
  alias eql? ==
@@ -142,13 +98,12 @@ module PowerTrack
142
98
  # rules as Hash keys.
143
99
  def hash
144
100
  # let's assume a nil value for @value or @tag is not different from the empty value
145
- "v:#{@value},t:#{@tag},l:#{@long}".hash
101
+ "v:#{@value},t:#{@tag}".hash
146
102
  end
147
103
 
148
- # Returns the maximum length of the rule value according to the type of the
149
- # rule (long or standard).
104
+ # Returns the maximum length of the rule value.
150
105
  def max_value_length
151
- long? ? MAX_LONG_RULE_VALUE_LENGTH : MAX_STD_RULE_VALUE_LENGTH
106
+ MAX_RULE_VALUE_LENGTH
152
107
  end
153
108
 
154
109
  protected
@@ -178,20 +133,6 @@ module PowerTrack
178
133
  !@value[/(^| )NOT /].nil?
179
134
  end
180
135
 
181
- # Does the rule value contain too many positive terms ?
182
- def too_many_positive_terms?
183
- return false if long?
184
- # negative look-behind; see http://www.rexegg.com/regex-disambiguation.html
185
- # exclude the OR operator from the terms being counted
186
- @value.scan(/(?<!-)(\b[\w:]+|\"[\-\s\w:]+\"\b)/).select { |match| match.first != 'OR' }.size > MAX_POSITIVE_TERMS
187
- end
188
-
189
- # Does the rule value contain too many negative terms ?
190
- def too_many_negative_terms?
191
- return false if long?
192
- @value.scan(/(^| )\-(\w|\([^(]*\)|\"[^"]*\")/).size > MAX_NEGATIVE_TERMS
193
- end
194
-
195
136
  # Does the rule value contain an empty source ?
196
137
  def contains_empty_source?
197
138
  !@value[/source\:\s/].nil?
@@ -17,13 +17,9 @@ module PowerTrack
17
17
  # Includes a logger, void by default
18
18
  include VoidLogger::LoggerMixin
19
19
 
20
- # The format of the URLs to connect to the various stream services
21
- FEATURE_URL_FORMAT = {
22
- # [ hostname, account, source, mode, label, feature ]
23
- v1: "https://%s.gnip.com/accounts/%s/publishers/%s/%s/track/%s%s.json".freeze,
24
- # [ hostname, domain, feature, stream type, account, source, label, sub-feature ]
25
- v2: "https://gnip-%s.%s.com/%s/%s/accounts/%s/publishers/%s/%s%s.json".freeze
26
- }.freeze
20
+ # The format of the URL to connect to the stream service
21
+ # [ hostname, domain, feature, stream type, account, source, label, sub-feature ]
22
+ FEATURE_URL_FORMAT = 'https://gnip-%s.%s.com/%s/%s/accounts/%s/publishers/%s/%s%s.json'.freeze
27
23
 
28
24
  # The default timeout on a connection to PowerTrack. Can be overriden per call.
29
25
  DEFAULT_CONNECTION_TIMEOUT = 30
@@ -34,14 +30,10 @@ module PowerTrack
34
30
 
35
31
  # The default options for using the stream.
36
32
  DEFAULT_STREAM_OPTIONS = {
37
- # enable PowerTrack v2 API (using v1 by default)
38
- v2: false,
39
33
  # override the default connection timeout
40
34
  connect_timeout: DEFAULT_CONNECTION_TIMEOUT,
41
35
  # override the default inactivity timeout
42
36
  inactivity_timeout: DEFAULT_INACTIVITY_TIMEOUT,
43
- # use a client id if you want to leverage the Backfill feature in v1
44
- client_id: nil,
45
37
  # enable the replay mode to get activities over the last 5 days
46
38
  # see http://support.gnip.com/apis/replay/api_reference.html
47
39
  replay: false
@@ -67,13 +59,6 @@ module PowerTrack
67
59
  @label = label
68
60
  @options = DEFAULT_STREAM_OPTIONS.merge(options || {})
69
61
  @replay = !!@options[:replay]
70
- @client_id = @options[:client_id]
71
- @v2 = !!@options[:v2]
72
- end
73
-
74
- # Returns true if the stream uses PowerTrack v2
75
- def v2?
76
- @v2
77
62
  end
78
63
 
79
64
  # Adds many rules to your PowerTrack stream’s ruleset.
@@ -95,11 +80,11 @@ module PowerTrack
95
80
  # See http://support.gnip.com/apis/powertrack/api_reference.html#DeleteRules
96
81
  def delete_rules(*rules)
97
82
  # v2 does not use DELETE anymore
98
- delete_verb = @v2 ? :post : :delete
83
+ delete_verb = :post
99
84
  # flatten the rules in case it was provided as an array
100
85
  delete_options = { body: MultiJson.encode('rules' => rules.flatten) }
101
86
  # v2 uses a query parameter
102
- delete_options[:query] = { '_method' => 'delete' } if @v2
87
+ delete_options[:query] = { '_method' => 'delete' }
103
88
 
104
89
  make_rules_request(delete_verb, delete_options)
105
90
  end
@@ -149,7 +134,7 @@ module PowerTrack
149
134
  from: nil,
150
135
  # the ending date to which the activities will be recovered (replay mode only)
151
136
  to: nil,
152
- # specify a number of minutes to leverage the Backfill feature (v2 only)
137
+ # specify a number of minutes to leverage the Backfill feature
153
138
  backfill_minutes: nil,
154
139
  # called for each message received, except heartbeats
155
140
  on_message: nil,
@@ -181,39 +166,21 @@ module PowerTrack
181
166
 
182
167
  # Returns the URL of the stream for a given feature.
183
168
  def feature_url(hostname, feature=nil, sub_feature=nil)
184
- _url = nil
185
- if @v2
186
- feature ||= @replay ? 'replay' : hostname
187
- sub_feature = sub_feature ? "/#{sub_feature}" : ''
188
- stream_type = (feature == 'rules' && @replay ? 'powertrack-replay' : 'powertrack')
189
- # replay streaming is on gnip.com while replay rules are on twitter.com...
190
- domain = (feature == 'replay' && @replay ? 'gnip' : 'twitter')
191
-
192
- _url = FEATURE_URL_FORMAT[:v2] %
193
- [ hostname,
194
- domain,
195
- feature,
196
- stream_type,
197
- @account_name,
198
- @data_source,
199
- @label,
200
- sub_feature ]
201
- else
202
- feature = feature ? "/#{feature}" : ''
203
- mode = @replay ? 'replay' : 'streams'
204
-
205
- _url = FEATURE_URL_FORMAT[:v1] %
206
- [ hostname,
207
- @account_name,
208
- @data_source,
209
- mode,
210
- @label,
211
- feature ]
212
-
213
- _url += "?client=#{@client_id}" if @client_id
214
- end
215
-
216
- _url
169
+ feature ||= @replay ? 'replay' : hostname
170
+ sub_feature = sub_feature ? "/#{sub_feature}" : ''
171
+ stream_type = (feature == 'rules' && @replay ? 'powertrack-replay' : 'powertrack')
172
+ # replay streaming is on gnip.com while replay rules are on twitter.com...
173
+ domain = (feature == 'replay' && @replay ? 'gnip' : 'twitter')
174
+
175
+ FEATURE_URL_FORMAT %
176
+ [ hostname,
177
+ domain,
178
+ feature,
179
+ stream_type,
180
+ @account_name,
181
+ @data_source,
182
+ @label,
183
+ sub_feature ]
217
184
  end
218
185
 
219
186
  # Returns the HTTP header that turns on GZip-based compression if required.
@@ -396,7 +363,7 @@ module PowerTrack
396
363
  logger.info "Replay mode enabled from '#{from}' to '#{to}'"
397
364
  end
398
365
 
399
- if @v2 && backfill_minutes
366
+ if backfill_minutes
400
367
  get_opts[:query]['backfillMinutes'] = backfill_minutes
401
368
  end
402
369
 
@@ -1,3 +1,3 @@
1
1
  module PowerTrack
2
- VERSION = '1.3.1'.freeze
2
+ VERSION = '2.0.0'.freeze
3
3
  end
@@ -30,14 +30,13 @@ class Minitest::Test
30
30
  end
31
31
 
32
32
  # Returns a brand-new stream based on the config found in test/powertrack.yml.
33
- def new_stream(v2=false, replay=false)
33
+ def new_stream(replay=false)
34
34
  PowerTrack::Stream.new(
35
35
  powertrack_config[:username],
36
36
  powertrack_config[:password],
37
37
  powertrack_config[:account_name],
38
38
  powertrack_config[:data_source],
39
39
  replay ? 'prod' : powertrack_config[:stream_label],
40
- replay: replay,
41
- v2: v2)
40
+ replay: replay)
42
41
  end
43
42
  end
@@ -4,24 +4,16 @@ require 'multi_json'
4
4
 
5
5
  class TestManageRules < Minitest::Test
6
6
 
7
- def test_add_then_delete_a_single_rule_v1
8
- add_then_delete_a_single_rule(false, false)
7
+ def test_add_then_delete_a_single_rule
8
+ add_then_delete_a_single_rule(false)
9
9
  end
10
10
 
11
- def test_add_then_delete_a_single_rule_v2
12
- add_then_delete_a_single_rule(true, false)
11
+ def test_add_then_delete_a_single_rule_in_replay_mode
12
+ add_then_delete_a_single_rule(true)
13
13
  end
14
14
 
15
- def test_add_then_delete_a_single_rule_in_replay_mode_v1
16
- add_then_delete_a_single_rule(false, true)
17
- end
18
-
19
- def test_add_then_delete_a_single_rule_in_replay_mode_v2
20
- add_then_delete_a_single_rule(true, true)
21
- end
22
-
23
- def add_then_delete_a_single_rule(v2, replay)
24
- stream = new_stream(v2, replay)
15
+ def add_then_delete_a_single_rule(replay)
16
+ stream = new_stream(replay)
25
17
 
26
18
  # add a logger
27
19
  stream.logger = Logger.new(STDERR)
@@ -32,30 +24,26 @@ class TestManageRules < Minitest::Test
32
24
  pre_existing_rules = stream.list_rules
33
25
  $stderr.puts pre_existing_rules.inspect
34
26
  assert pre_existing_rules.is_a?(Array)
35
- assert pre_existing_rules.all? { |rule| !rule.id.nil? } if v2
27
+ assert pre_existing_rules.all? { |rule| !rule.id.nil? }
36
28
 
37
29
  already_in = pre_existing_rules.any? { |rule| new_rule == rule }
38
30
 
39
31
  res = stream.add_rule(new_rule)
40
32
 
41
- if v2
42
- assert res.is_a?(Hash)
43
- assert res['summary'].is_a?(Hash)
44
-
45
- if already_in
46
- assert_equal 0, res['summary']['created']
47
- assert_equal 1, res['summary']['not_created']
48
- else
49
- assert_equal 1, res['summary']['created']
50
- assert_equal 0, res['summary']['not_created']
51
- end
33
+ assert res.is_a?(Hash)
34
+ assert res['summary'].is_a?(Hash)
35
+
36
+ if already_in
37
+ assert_equal 0, res['summary']['created']
38
+ assert_equal 1, res['summary']['not_created']
52
39
  else
53
- assert_nil res
40
+ assert_equal 1, res['summary']['created']
41
+ assert_equal 0, res['summary']['not_created']
54
42
  end
55
43
 
56
44
  rules_after_addition = stream.list_rules
57
45
  assert rules_after_addition.is_a?(Array)
58
- assert rules_after_addition.all? { |rule| !rule.id.nil? } if v2
46
+ assert rules_after_addition.all? { |rule| !rule.id.nil? }
59
47
 
60
48
  if already_in
61
49
  assert_equal pre_existing_rules.size, rules_after_addition.size
@@ -67,19 +55,15 @@ class TestManageRules < Minitest::Test
67
55
 
68
56
  res = stream.delete_rules(new_rule)
69
57
 
70
- if v2
71
- assert res.is_a?(Hash)
72
- assert res['summary'].is_a?(Hash)
73
- assert_equal 1, res['summary']['deleted']
74
- assert_equal 0, res['summary']['not_deleted']
75
- else
76
- assert_nil res
77
- end
58
+ assert res.is_a?(Hash)
59
+ assert res['summary'].is_a?(Hash)
60
+ assert_equal 1, res['summary']['deleted']
61
+ assert_equal 0, res['summary']['not_deleted']
78
62
 
79
63
  rules_after_removal = stream.list_rules
80
64
  assert rules_after_removal.is_a?(Array)
81
65
  assert_equal rules_after_addition.size - 1, rules_after_removal.size
82
66
  assert_equal [], rules_after_removal - rules_after_addition
83
- assert rules_after_removal.all? { |rule| !rule.id.nil? } if v2
67
+ assert rules_after_removal.all? { |rule| !rule.id.nil? }
84
68
  end
85
69
  end
@@ -8,220 +8,71 @@ class TestRule < Minitest::Test
8
8
  rule = PowerTrack::Rule.new('coke')
9
9
  assert_equal 'coke', rule.value
10
10
  assert_nil rule.tag
11
- assert !rule.long?
12
11
  assert rule.valid?
13
12
  assert_nil rule.error
14
13
 
15
- long_rule = PowerTrack::Rule.new('pepsi', tag: 'soda', long: true)
16
- assert_equal 'pepsi', long_rule.value
17
- assert_equal 'soda', long_rule.tag
18
- assert long_rule.long?
19
- assert long_rule.valid?
20
- assert_nil long_rule.error
21
-
22
- v2_rule = PowerTrack::Rule.new('dr pepper', tag: 'soda', v2: true)
23
- assert v2_rule.v2?
24
- assert_equal 'dr pepper', v2_rule.value
25
- assert_equal 'soda', v2_rule.tag
26
- assert v2_rule.long?
27
- assert v2_rule.valid?
28
- assert_nil v2_rule.error
14
+ tagged_rule = PowerTrack::Rule.new('dr pepper', tag: 'soda')
15
+ assert_equal 'dr pepper', tagged_rule.value
16
+ assert_equal 'soda', tagged_rule.tag
17
+ assert tagged_rule.valid?
18
+ assert_nil tagged_rule.error
29
19
  end
30
20
 
31
21
  def test_too_long_tag
32
22
  long_tag = 'a' * PowerTrack::Rule::MAX_TAG_LENGTH
33
- rule = PowerTrack::Rule.new('coke', tag: long_tag, long: false)
23
+ rule = PowerTrack::Rule.new('coke', tag: long_tag)
34
24
  assert rule.valid?
35
25
  assert_nil rule.error
36
26
 
37
27
  long_tag = 'b' * 2 * PowerTrack::Rule::MAX_TAG_LENGTH
38
- rule = PowerTrack::Rule.new('coke', tag: long_tag, long: true)
28
+ rule = PowerTrack::Rule.new('coke', tag: long_tag)
39
29
  assert !rule.valid?
40
30
  assert_match /too long tag/i, rule.error
41
31
  end
42
32
 
43
33
  def test_too_long_value
44
- long_val = 'a' * PowerTrack::Rule::MAX_STD_RULE_VALUE_LENGTH
45
- # v1
34
+ long_val = 'a' * PowerTrack::Rule::MAX_RULE_VALUE_LENGTH
35
+
46
36
  rule = PowerTrack::Rule.new(long_val)
47
37
  assert rule.valid?
38
+ assert_nil rule.error
48
39
 
49
- # v2
50
- v2_rule = PowerTrack::Rule.new(long_val, v2: true)
51
- assert v2_rule.v2?
52
- assert v2_rule.valid?
53
- assert_nil v2_rule.error
54
-
55
- long_val = 'c' * PowerTrack::Rule::MAX_LONG_RULE_VALUE_LENGTH
56
- # v1
57
- rule = long_val.to_pwtk_rule(long: false)
58
- assert !rule.valid?
59
- assert_match /too long value/i, rule.error
60
-
40
+ long_val = 'c' * PowerTrack::Rule::MAX_RULE_VALUE_LENGTH
61
41
  assert long_val.to_pwtk_rule.valid?
62
- assert long_val.to_pwtk_rule(long: true).valid?
63
-
64
- # v2
65
- assert long_val.to_pwtk_rule(v2: true).valid?
66
- assert long_val.to_pwtk_rule(long: false, v2: true).valid?
67
42
 
68
- very_long_val = 'rrr' * PowerTrack::Rule::MAX_LONG_RULE_VALUE_LENGTH
69
- # v1
43
+ very_long_val = 'rrr' * PowerTrack::Rule::MAX_RULE_VALUE_LENGTH
70
44
  rule = very_long_val.to_pwtk_rule
71
45
  assert !rule.valid?
72
46
  assert_match /too long value/i, rule.error
73
-
74
- # v2
75
- v2_rule = very_long_val.to_pwtk_rule(v2: true)
76
- assert v2_rule.v2?
77
- assert !v2_rule.valid?
78
- assert_match /too long value/i, v2_rule.error
79
- end
80
-
81
- def test_too_many_positive_terms
82
- phrase = ([ 'coke' ] * PowerTrack::Rule::MAX_POSITIVE_TERMS).join(' ')
83
- rule = PowerTrack::Rule.new(phrase)
84
- assert !rule.long?
85
- assert rule.valid?
86
- assert_nil rule.error
87
-
88
- long_rule = PowerTrack::Rule.new(phrase, long: true)
89
- assert long_rule.long?
90
- assert long_rule.valid?
91
- assert_nil long_rule.error
92
-
93
- # v2
94
- v2_rule = PowerTrack::Rule.new(phrase, v2: true)
95
- assert v2_rule.v2?
96
- assert v2_rule.long?
97
- assert v2_rule.valid?
98
- assert_nil v2_rule.error
99
-
100
- phrase = ([ 'coke' ] * (2 * PowerTrack::Rule::MAX_POSITIVE_TERMS)).join(' ')
101
- # v1
102
- rule = PowerTrack::Rule.new(phrase, long: false)
103
- assert !rule.long?
104
- assert !rule.valid?
105
- assert_match /too many positive terms/i, rule.error
106
- # v2
107
- v2_rule = PowerTrack::Rule.new(phrase, v2: true)
108
- assert v2_rule.v2?
109
- assert v2_rule.long?
110
- assert v2_rule.valid?
111
- assert_nil v2_rule.error
112
-
113
- long_rule = PowerTrack::Rule.new(phrase, long: true)
114
- assert long_rule.long?
115
- assert long_rule.valid?
116
- assert_nil long_rule.error
117
-
118
- phrase = "from:lkv1csayp OR from:u42vf OR from:y OR from:groj OR from:69iqciuxlxerqq OR from:4 OR from:9832xjrqi1ncrs OR from:7kfss6jxtl0oj OR from:b31m9qf0u3tc OR from:0 OR from:abo59n OR from:3lma3kl OR from:5 OR from:ovw7bgov OR from:ubp OR from:gc9a6b OR from:jo7ootfvy4 OR from:sg7oohj OR from:349ankku OR from:9b72n OR from:qz7offt5019u OR from:gkd OR from:cc31p3 OR from:xws9 OR from:bjzbatm OR from:rwjm78cgre3j5 OR from:f1obak7w3w OR from:nontf OR from:4aeas6kgb7nia OR from:dzqy7"
119
- long_rule = PowerTrack::Rule.new(phrase)
120
- assert !long_rule.long?
121
- assert long_rule.valid?, long_rule.error
122
- assert_nil long_rule.error
123
-
124
- long_rule = PowerTrack::Rule.new(phrase + " OR from:michel")
125
- assert !rule.valid?
126
- assert_match /too many positive terms/i, rule.error
127
-
128
- v2_rule = PowerTrack::Rule.new(phrase + " OR from:michel", v2: true)
129
- assert v2_rule.v2?
130
- assert v2_rule.valid?
131
- assert_nil v2_rule.error
132
- end
133
-
134
- def test_too_many_negative_terms
135
- phrase = ([ '-pepsi' ] * PowerTrack::Rule::MAX_POSITIVE_TERMS).join(' ')
136
- rule = PowerTrack::Rule.new(phrase)
137
- assert !rule.long?
138
- assert rule.valid?
139
- assert_nil rule.error
140
-
141
- long_rule = PowerTrack::Rule.new(phrase, long: true)
142
- assert long_rule.long?
143
- assert long_rule.valid?
144
- assert_nil long_rule.error
145
-
146
- v2_rule = PowerTrack::Rule.new(phrase, v2: true)
147
- assert v2_rule.v2?
148
- assert v2_rule.long?
149
- assert v2_rule.valid?
150
- assert_nil v2_rule.error
151
-
152
- phrase = ([ '-pepsi' ] * (2 * PowerTrack::Rule::MAX_POSITIVE_TERMS)).join(' ')
153
- rule = PowerTrack::Rule.new(phrase)
154
- assert !rule.long?
155
- assert !rule.valid?
156
- assert_match /too many negative terms/i, rule.error
157
-
158
- long_rule = PowerTrack::Rule.new(phrase, long: true)
159
- assert long_rule.long?
160
- assert long_rule.valid?
161
- assert_nil long_rule.error
162
-
163
- v2_rule = PowerTrack::Rule.new(phrase, v2: true)
164
- assert v2_rule.v2?
165
- assert v2_rule.long?
166
- assert v2_rule.valid?
167
- assert_nil v2_rule.error
168
47
  end
169
48
 
170
49
  def test_contains_negated_or
171
50
  phrase = 'coke OR -pepsi'
172
51
  rule = PowerTrack::Rule.new(phrase)
173
- assert !rule.long?
174
52
  assert !rule.valid?
175
53
  assert_match /contains negated or/i, rule.error
176
-
177
- v2_rule = PowerTrack::Rule.new(phrase, v2: true)
178
- assert v2_rule.v2?
179
- assert v2_rule.long?
180
- assert !v2_rule.valid?
181
- assert_match /contains negated or/i, v2_rule.error
182
54
  end
183
55
 
184
56
  def test_contains_explicit_and
185
57
  phrase = 'coke AND pepsi'
186
58
  rule = PowerTrack::Rule.new(phrase)
187
- assert !rule.long?
188
- assert rule.valid?
189
- assert_nil rule.error
190
-
191
- v2_rule = PowerTrack::Rule.new(phrase, v2: true)
192
- assert v2_rule.v2?
193
- assert v2_rule.long?
194
- assert !v2_rule.valid?
195
- assert_match /contains explicit and/i, v2_rule.error
59
+ assert !rule.valid?
60
+ assert_match /contains explicit and/i, rule.error
196
61
  end
197
62
 
198
63
  def test_contains_explicit_not
199
64
  [ 'coke NOT pepsi', 'NOT (pepsi OR "dr pepper")' ].each do |phrase|
200
65
  rule = PowerTrack::Rule.new(phrase)
201
- assert !rule.long?
202
- assert rule.valid?
203
- assert_nil rule.error
204
-
205
- v2_rule = PowerTrack::Rule.new(phrase, v2: true)
206
- assert v2_rule.v2?
207
- assert v2_rule.long?
208
- assert !v2_rule.valid?
209
- assert_match /contains explicit not/i, v2_rule.error
66
+ assert !rule.valid?
67
+ assert_match /contains explicit not/i, rule.error
210
68
  end
211
69
  end
212
70
 
213
71
  def test_contains_lowercase_or
214
72
  phrase = 'coke or pepsi'
215
73
  rule = PowerTrack::Rule.new(phrase)
216
- assert !rule.long?
217
- assert rule.valid?
218
- assert_nil rule.error
219
-
220
- v2_rule = PowerTrack::Rule.new(phrase, v2: true)
221
- assert v2_rule.v2?
222
- assert v2_rule.long?
223
- assert !v2_rule.valid?
224
- assert_match /contains lowercase or/i, v2_rule.error
74
+ assert !rule.valid?
75
+ assert_match /contains lowercase or/i, rule.error
225
76
  end
226
77
 
227
78
  def test_to_hash_and_json
@@ -231,7 +82,7 @@ class TestRule < Minitest::Test
231
82
  assert_equal MultiJson.encode(res), rule.to_json
232
83
 
233
84
  res[:tag] = 'soda'
234
- rule = PowerTrack::Rule.new(res[:value], tag: res[:tag], long: true)
85
+ rule = PowerTrack::Rule.new(res[:value], tag: res[:tag])
235
86
  assert_equal res, rule.to_hash
236
87
  assert_equal MultiJson.encode(res), rule.to_json
237
88
  end
@@ -247,22 +98,12 @@ class TestRule < Minitest::Test
247
98
 
248
99
  def test_hash
249
100
  short_rule = PowerTrack::Rule.new('coke')
250
- not_long_rule = PowerTrack::Rule.new('coke', long: false)
251
- false_long_rule = PowerTrack::Rule.new('coke', long: true)
252
101
  short_rule_with_tag = PowerTrack::Rule.new('coke', tag: 'soda')
253
102
 
254
- assert short_rule == not_long_rule
255
- assert_equal short_rule, not_long_rule
256
- assert_equal short_rule.hash, not_long_rule.hash
257
-
258
- assert short_rule != false_long_rule
259
103
  h = { short_rule => 1 }
260
- h[not_long_rule] = 2
261
- h[false_long_rule] = 3
262
104
  h[short_rule_with_tag] = 4
263
105
 
264
- assert_equal 2, h[short_rule]
265
- assert_equal h[short_rule], h[not_long_rule]
106
+ assert_equal 1, h[short_rule]
266
107
  assert_equal 4, h[short_rule_with_tag]
267
108
  assert_nil h[PowerTrack::Rule.new('pepsi', tag: 'soda')]
268
109
  end
@@ -4,25 +4,16 @@ require 'multi_json'
4
4
 
5
5
  class TestTrackStream < Minitest::Test
6
6
 
7
- def test_track_realtime_stream_v1
8
- track_simple_stream(false, false)
7
+ def test_track_realtime_stream
8
+ track_simple_stream(false)
9
9
  end
10
10
 
11
- def test_track_realtime_stream_v2
12
- track_simple_stream(true, false)
11
+ def test_track_replay_stream
12
+ track_simple_stream(true)
13
13
  end
14
14
 
15
- def test_track_replay_stream_v1
16
- track_simple_stream(false, true)
17
- end
18
-
19
- def test_track_replay_stream_v2
20
- track_simple_stream(true, true)
21
- end
22
-
23
- def track_simple_stream(v2, replay)
24
- stream = new_stream(v2, replay)
25
- assert_equal !!v2, stream.v2?
15
+ def track_simple_stream(replay)
16
+ stream = new_stream(replay)
26
17
 
27
18
  # add a logger
28
19
  stream.logger = Logger.new(STDERR)
@@ -33,18 +24,14 @@ class TestTrackStream < Minitest::Test
33
24
  begin
34
25
  res = stream.add_rule(new_rule)
35
26
 
36
- if v2
37
- assert res.is_a?(Hash)
38
- assert res['summary'].is_a?(Hash)
39
- else
40
- assert_nil res
41
- end
27
+ assert res.is_a?(Hash)
28
+ assert res['summary'].is_a?(Hash)
42
29
 
43
30
  rules_after_addition = stream.list_rules
44
31
  assert rules_after_addition.is_a?(Array)
45
32
  assert rules_after_addition.size > 0
46
33
  assert rules_after_addition.any? { |rule| rule == new_rule }
47
- assert rules_after_addition.all? { |rule| !rule.id.nil? } if v2
34
+ assert rules_after_addition.all? { |rule| !rule.id.nil? }
48
35
 
49
36
  heartbeats = 0
50
37
  received = 0
@@ -106,8 +93,12 @@ class TestTrackStream < Minitest::Test
106
93
  end
107
94
 
108
95
  # heartbeats only sent every 10 minutes in v2...
109
- assert heartbeats > 0, 'No heartbeat received' unless v2
110
- puts "#{heartbeats} heartbeats received"
96
+ unless replay
97
+ assert_equal 0, heartbeats, "Unexpected #{heartbeats} heartbeats received"
98
+ else
99
+ assert heartbeats > 0, 'No heartbeats received so far'
100
+ puts "#{heartbeats} heartbeats received"
101
+ end
111
102
 
112
103
  assert received > 0, 'No message received so far'
113
104
  puts "#{received} messages received"
@@ -119,14 +110,10 @@ class TestTrackStream < Minitest::Test
119
110
  ensure
120
111
  res = stream.delete_rules(new_rule)
121
112
 
122
- if v2
123
- assert res.is_a?(Hash)
124
- assert res['summary'].is_a?(Hash)
125
- assert_equal 1, res['summary']['deleted']
126
- assert_equal 0, res['summary']['not_deleted']
127
- else
128
- assert_nil res
129
- end
113
+ assert res.is_a?(Hash)
114
+ assert res['summary'].is_a?(Hash)
115
+ assert_equal 1, res['summary']['deleted']
116
+ assert_equal 0, res['summary']['not_deleted']
130
117
  end
131
118
  end
132
119
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: powertrack
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.1
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Laurent Farcy
@@ -10,134 +10,132 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2016-09-23 00:00:00.000000000 Z
13
+ date: 2018-01-05 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: bundler
17
17
  requirement: !ruby/object:Gem::Requirement
18
18
  requirements:
19
- - - ~>
19
+ - - "~>"
20
20
  - !ruby/object:Gem::Version
21
21
  version: '1.7'
22
22
  type: :development
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
25
25
  requirements:
26
- - - ~>
26
+ - - "~>"
27
27
  - !ruby/object:Gem::Version
28
28
  version: '1.7'
29
29
  - !ruby/object:Gem::Dependency
30
30
  name: rake
31
31
  requirement: !ruby/object:Gem::Requirement
32
32
  requirements:
33
- - - ~>
33
+ - - "~>"
34
34
  - !ruby/object:Gem::Version
35
35
  version: '10.3'
36
36
  type: :development
37
37
  prerelease: false
38
38
  version_requirements: !ruby/object:Gem::Requirement
39
39
  requirements:
40
- - - ~>
40
+ - - "~>"
41
41
  - !ruby/object:Gem::Version
42
42
  version: '10.3'
43
43
  - !ruby/object:Gem::Dependency
44
44
  name: minitest
45
45
  requirement: !ruby/object:Gem::Requirement
46
46
  requirements:
47
- - - ~>
47
+ - - "~>"
48
48
  - !ruby/object:Gem::Version
49
49
  version: '5.5'
50
50
  type: :development
51
51
  prerelease: false
52
52
  version_requirements: !ruby/object:Gem::Requirement
53
53
  requirements:
54
- - - ~>
54
+ - - "~>"
55
55
  - !ruby/object:Gem::Version
56
56
  version: '5.5'
57
57
  - !ruby/object:Gem::Dependency
58
58
  name: ruby-prof
59
59
  requirement: !ruby/object:Gem::Requirement
60
60
  requirements:
61
- - - ~>
61
+ - - "~>"
62
62
  - !ruby/object:Gem::Version
63
63
  version: '0.15'
64
64
  type: :development
65
65
  prerelease: false
66
66
  version_requirements: !ruby/object:Gem::Requirement
67
67
  requirements:
68
- - - ~>
68
+ - - "~>"
69
69
  - !ruby/object:Gem::Version
70
70
  version: '0.15'
71
71
  - !ruby/object:Gem::Dependency
72
72
  name: multi_json
73
73
  requirement: !ruby/object:Gem::Requirement
74
74
  requirements:
75
- - - ~>
75
+ - - "~>"
76
76
  - !ruby/object:Gem::Version
77
77
  version: '1.11'
78
78
  type: :runtime
79
79
  prerelease: false
80
80
  version_requirements: !ruby/object:Gem::Requirement
81
81
  requirements:
82
- - - ~>
82
+ - - "~>"
83
83
  - !ruby/object:Gem::Version
84
84
  version: '1.11'
85
85
  - !ruby/object:Gem::Dependency
86
86
  name: eventmachine
87
87
  requirement: !ruby/object:Gem::Requirement
88
88
  requirements:
89
- - - ~>
89
+ - - "~>"
90
90
  - !ruby/object:Gem::Version
91
- version: !binary |-
92
- MS4w
91
+ version: '1.0'
93
92
  type: :runtime
94
93
  prerelease: false
95
94
  version_requirements: !ruby/object:Gem::Requirement
96
95
  requirements:
97
- - - ~>
96
+ - - "~>"
98
97
  - !ruby/object:Gem::Version
99
- version: !binary |-
100
- MS4w
98
+ version: '1.0'
101
99
  - !ruby/object:Gem::Dependency
102
100
  name: em-http-request
103
101
  requirement: !ruby/object:Gem::Requirement
104
102
  requirements:
105
- - - ~>
103
+ - - "~>"
106
104
  - !ruby/object:Gem::Version
107
105
  version: '1.1'
108
106
  type: :runtime
109
107
  prerelease: false
110
108
  version_requirements: !ruby/object:Gem::Requirement
111
109
  requirements:
112
- - - ~>
110
+ - - "~>"
113
111
  - !ruby/object:Gem::Version
114
112
  version: '1.1'
115
113
  - !ruby/object:Gem::Dependency
116
114
  name: exponential-backoff
117
115
  requirement: !ruby/object:Gem::Requirement
118
116
  requirements:
119
- - - ~>
117
+ - - "~>"
120
118
  - !ruby/object:Gem::Version
121
119
  version: 0.0.2
122
120
  type: :runtime
123
121
  prerelease: false
124
122
  version_requirements: !ruby/object:Gem::Requirement
125
123
  requirements:
126
- - - ~>
124
+ - - "~>"
127
125
  - !ruby/object:Gem::Version
128
126
  version: 0.0.2
129
127
  - !ruby/object:Gem::Dependency
130
128
  name: void_logger
131
129
  requirement: !ruby/object:Gem::Requirement
132
130
  requirements:
133
- - - ~>
131
+ - - "~>"
134
132
  - !ruby/object:Gem::Version
135
133
  version: '0.1'
136
134
  type: :runtime
137
135
  prerelease: false
138
136
  version_requirements: !ruby/object:Gem::Requirement
139
137
  requirements:
140
- - - ~>
138
+ - - "~>"
141
139
  - !ruby/object:Gem::Version
142
140
  version: '0.1'
143
141
  description: Powertrack is a gem used to develop GNIP PowerTrack streaming clients.
@@ -149,8 +147,8 @@ executables: []
149
147
  extensions: []
150
148
  extra_rdoc_files: []
151
149
  files:
152
- - .gitignore
153
- - .travis.yml
150
+ - ".gitignore"
151
+ - ".travis.yml"
154
152
  - Gemfile
155
153
  - Gemfile.lock
156
154
  - History.txt
@@ -183,17 +181,17 @@ require_paths:
183
181
  - lib
184
182
  required_ruby_version: !ruby/object:Gem::Requirement
185
183
  requirements:
186
- - - ! '>='
184
+ - - ">="
187
185
  - !ruby/object:Gem::Version
188
186
  version: '1.9'
189
187
  required_rubygems_version: !ruby/object:Gem::Requirement
190
188
  requirements:
191
- - - ! '>='
189
+ - - ">="
192
190
  - !ruby/object:Gem::Version
193
191
  version: '0'
194
192
  requirements: []
195
193
  rubyforge_project:
196
- rubygems_version: 2.4.6
194
+ rubygems_version: 2.4.8
197
195
  signing_key:
198
196
  specification_version: 4
199
197
  summary: Powertrack is a gem used to develop GNIP PowerTrack streaming clients.