analytics-ruby 2.2.7 → 2.2.8.pre

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,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6c8742471c22e19783a69dee3403ddbd1ac2785b7bbd9608840432e34f4d50a5
4
- data.tar.gz: dad6dfe750ebf0746e2228cd29551afc23e4ce38d40c7df00184994e6d16db8b
3
+ metadata.gz: e51f2f5e83f0b45ffc47838b0a2048735ee58aa1d64c24229f3f4ca8db1b6383
4
+ data.tar.gz: 31adbe2f500bc4812e866e099c13f981786881c7b366879991022cbf2bf20e7c
5
5
  SHA512:
6
- metadata.gz: c5d305d7a968088a3ef5488faa360ce06ad6d97072bde0d6b068aae11bcb1824814f87fe1a18e8f09a231cbe34be2954b4565605cdb8a6b8e0d370ee56a6b492
7
- data.tar.gz: 154b45294bff8f12f2dd8bc338742889d11017983f5e516cca36e9446bbb3c0e6aa61ac35252aaf20ba39ececa96a58c264990f9a1dece39d6d5b39435ab1ad3
6
+ metadata.gz: 4dd283eb00b9a0acf4d0b858244bd10ad41e9db50b573b583d5072a534d56bc98f27e238e83dde6017e3ba97152d3131f025d0c1c22946ed12a3cd04841191cd
7
+ data.tar.gz: ce6e9b2c792654535d3a553697b605bec3a9e3d7ecb3e5c971c3be601eb6dac97d0e0e442ab03610246903ce80953346c6d10aaee7f6118fffc41ac554b112a4
@@ -29,6 +29,7 @@ command :send do |c|
29
29
  c.option '--userId=<userId>', String, 'the user id to send the event as'
30
30
  c.option '--anonymousId=<anonymousId>', String, 'the anonymous user id to send the event as'
31
31
  c.option '--context=<context>', 'additional context for the event (JSON-encoded)'
32
+ c.option '--integrations=<integrations>', 'additional integrations for the event (JSON-encoded)'
32
33
 
33
34
  c.option '--event=<event>', String, 'the event name to send with the event'
34
35
  c.option '--properties=<properties>', 'the event properties to send (JSON-encoded)'
@@ -38,6 +39,7 @@ command :send do |c|
38
39
  c.option '--traits=<traits>', 'the identify/group traits to send (JSON-encoded)'
39
40
 
40
41
  c.option '--groupId=<groupId>', String, 'the group id'
42
+ c.option '--previousId=<previousId>', String, 'the previous id'
41
43
 
42
44
  c.action do |args, options|
43
45
  Analytics = Segment::Analytics.new({
@@ -52,7 +54,8 @@ command :send do |c|
52
54
  event: options.event,
53
55
  anonymous_id: options.anonymousId,
54
56
  properties: json_hash(options.properties),
55
- context: json_hash(options.context)
57
+ context: json_hash(options.context),
58
+ integrations: json_hash(options.integrations)
56
59
  })
57
60
  when "page"
58
61
  Analytics.page({
@@ -60,22 +63,25 @@ command :send do |c|
60
63
  anonymous_id: options.anonymousId,
61
64
  name: options.name,
62
65
  properties: json_hash(options.properties),
63
- context: json_hash(options.context)
66
+ context: json_hash(options.context),
67
+ integrations: json_hash(options.integrations)
64
68
  })
65
69
  when "screen"
66
70
  Analytics.screen({
67
71
  user_id: options.userId,
68
72
  anonymous_id: options.anonymousId,
69
- name: option.name,
70
- traits: json_hash(options.traits),
71
- properties: json_hash(option.properties)
73
+ name: options.name,
74
+ properties: json_hash(options.properties),
75
+ context: json_hash(options.context),
76
+ integrations: json_hash(options.integrations)
72
77
  })
73
78
  when "identify"
74
79
  Analytics.identify({
75
80
  user_id: options.userId,
76
81
  anonymous_id: options.anonymousId,
77
82
  traits: json_hash(options.traits),
78
- context: json_hash(options.context)
83
+ context: json_hash(options.context),
84
+ integrations: json_hash(options.integrations)
79
85
  })
80
86
  when "group"
81
87
  Analytics.group({
@@ -83,7 +89,16 @@ command :send do |c|
83
89
  anonymous_id: options.anonymousId,
84
90
  group_id: options.groupId,
85
91
  traits: json_hash(options.traits),
86
- context: json_hash(options.context)
92
+ context: json_hash(options.context),
93
+ integrations: json_hash(options.integrations)
94
+ })
95
+ when "alias"
96
+ Analytics.alias({
97
+ previous_id: options.previousId,
98
+ user_id: options.userId,
99
+ anonymous_id: options.anonymousId,
100
+ context: json_hash(options.context),
101
+ integrations: json_hash(options.integrations)
87
102
  })
88
103
  else
89
104
  raise "Invalid Message Type #{options.type}"
@@ -25,6 +25,7 @@ module Segment
25
25
  @max_queue_size = opts[:max_queue_size] || Defaults::Queue::MAX_SIZE
26
26
  @worker_mutex = Mutex.new
27
27
  @worker = Worker.new(@queue, @write_key, opts)
28
+ @worker_thread = nil
28
29
 
29
30
  check_write_key!
30
31
 
@@ -120,12 +120,15 @@ module Segment
120
120
 
121
121
  isoify_dates! properties
122
122
 
123
- common.merge({
123
+ parsed = common.merge({
124
124
  :type => 'screen',
125
125
  :name => name,
126
- :properties => properties,
127
- :category => category
126
+ :properties => properties
128
127
  })
128
+
129
+ parsed[:category] = category if category
130
+
131
+ parsed
129
132
  end
130
133
 
131
134
  private
@@ -140,15 +143,20 @@ module Segment
140
143
 
141
144
  add_context! context
142
145
 
143
- {
144
- :anonymousId => fields[:anonymous_id],
146
+ parsed = {
145
147
  :context => context,
146
- :integrations => fields[:integrations],
147
148
  :messageId => message_id,
148
- :timestamp => datetime_in_iso8601(timestamp),
149
- :userId => fields[:user_id],
150
- :options => fields[:options] # Not in spec, retained for backward compatibility
149
+ :timestamp => datetime_in_iso8601(timestamp)
151
150
  }
151
+
152
+ parsed[:userId] = fields[:user_id] if fields[:user_id]
153
+ parsed[:anonymousId] = fields[:anonymous_id] if fields[:anonymous_id]
154
+ parsed[:integrations] = fields[:integrations] if fields[:integrations]
155
+
156
+ # Not in spec, retained for backward compatibility
157
+ parsed[:options] = fields[:options] if fields[:options]
158
+
159
+ parsed
152
160
  end
153
161
 
154
162
  def check_user_id!(fields)
@@ -5,6 +5,8 @@ module Segment
5
5
  class Analytics
6
6
  # A batch of `Message`s to be sent to the API
7
7
  class MessageBatch
8
+ class JSONGenerationError < StandardError; end
9
+
8
10
  extend Forwardable
9
11
  include Segment::Analytics::Logging
10
12
  include Segment::Analytics::Defaults::MessageBatch
@@ -16,8 +18,13 @@ module Segment
16
18
  end
17
19
 
18
20
  def <<(message)
19
- message_json_size = message.to_json.bytesize
21
+ begin
22
+ message_json = message.to_json
23
+ rescue StandardError => e
24
+ raise JSONGenerationError, "Serialization error: #{e}"
25
+ end
20
26
 
27
+ message_json_size = message_json.bytesize
21
28
  if message_too_big?(message_json_size)
22
29
  logger.error('a message exceeded the maximum allowed size')
23
30
  else
@@ -113,7 +113,7 @@ module Segment
113
113
 
114
114
  if self.class.stub
115
115
  logger.debug "stubbed request to #{@path}: " \
116
- "write key = #{write_key}, batch = JSON.generate(#{batch})"
116
+ "write key = #{write_key}, batch = #{JSON.generate(batch)}"
117
117
 
118
118
  [200, '{}']
119
119
  else
@@ -1,5 +1,5 @@
1
1
  module Segment
2
2
  class Analytics
3
- VERSION = '2.2.7'
3
+ VERSION = '2.2.8.pre'
4
4
  end
5
5
  end
@@ -38,11 +38,10 @@ module Segment
38
38
  return if @queue.empty?
39
39
 
40
40
  @lock.synchronize do
41
- @batch << @queue.pop until @batch.full? || @queue.empty?
41
+ consume_message_from_queue! until @batch.full? || @queue.empty?
42
42
  end
43
43
 
44
44
  res = Request.new.post @write_key, @batch
45
-
46
45
  @on_error.call(res.status, res.error) unless res.status == 200
47
46
 
48
47
  @lock.synchronize { @batch.clear }
@@ -54,6 +53,14 @@ module Segment
54
53
  def is_requesting?
55
54
  @lock.synchronize { !@batch.empty? }
56
55
  end
56
+
57
+ private
58
+
59
+ def consume_message_from_queue!
60
+ @batch << @queue.pop
61
+ rescue MessageBatch::JSONGenerationError => e
62
+ @on_error.call(-1, e.to_s)
63
+ end
57
64
  end
58
65
  end
59
66
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: analytics-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.7
4
+ version: 2.2.8.pre
5
5
  platform: ruby
6
6
  authors:
7
7
  - Segment.io
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-05-10 00:00:00.000000000 Z
11
+ date: 2019-12-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: commander
@@ -156,14 +156,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
156
156
  requirements:
157
157
  - - ">="
158
158
  - !ruby/object:Gem::Version
159
- version: '0'
159
+ version: '2.0'
160
160
  required_rubygems_version: !ruby/object:Gem::Requirement
161
161
  requirements:
162
- - - ">="
162
+ - - ">"
163
163
  - !ruby/object:Gem::Version
164
- version: '0'
164
+ version: 1.3.1
165
165
  requirements: []
166
- rubygems_version: 3.0.3
166
+ rubyforge_project:
167
+ rubygems_version: 2.7.7
167
168
  signing_key:
168
169
  specification_version: 4
169
170
  summary: Segment.io analytics library