powertrack 1.3.1 → 2.0.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.
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.