vwo-fme-ruby-sdk 1.1.0 → 1.3.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.
Files changed (81) hide show
  1. checksums.yaml +4 -4
  2. data/lib/resources/debug_messages.json +20 -0
  3. data/lib/resources/error_messages.json +34 -0
  4. data/lib/resources/info_messages.json +41 -0
  5. data/lib/resources/warn_messages.json +1 -0
  6. data/lib/vwo/api/get_flag.rb +30 -27
  7. data/lib/vwo/api/set_attribute.rb +10 -3
  8. data/lib/vwo/api/track_event.rb +11 -3
  9. data/lib/vwo/constants/constants.rb +6 -2
  10. data/lib/vwo/decorators/storage_decorator.rb +1 -1
  11. data/lib/vwo/enums/api_enum.rb +1 -1
  12. data/lib/vwo/enums/campaign_type_enum.rb +1 -1
  13. data/lib/vwo/enums/decision_types_enum.rb +1 -1
  14. data/lib/vwo/enums/event_enum.rb +1 -1
  15. data/lib/vwo/enums/headers_enum.rb +1 -1
  16. data/lib/vwo/enums/hooks_enum.rb +1 -1
  17. data/lib/vwo/enums/http_method_enum.rb +1 -1
  18. data/lib/vwo/enums/log_level_enum.rb +1 -1
  19. data/lib/vwo/enums/status_enum.rb +1 -1
  20. data/lib/vwo/enums/storage_enum.rb +1 -1
  21. data/lib/vwo/enums/url_enum.rb +2 -1
  22. data/lib/vwo/models/campaign/campaign_model.rb +1 -1
  23. data/lib/vwo/models/campaign/feature_model.rb +1 -1
  24. data/lib/vwo/models/campaign/impact_campaign_model.rb +1 -1
  25. data/lib/vwo/models/campaign/metric_model.rb +1 -1
  26. data/lib/vwo/models/campaign/rule_model.rb +1 -1
  27. data/lib/vwo/models/campaign/variable_model.rb +1 -1
  28. data/lib/vwo/models/campaign/variation_model.rb +1 -1
  29. data/lib/vwo/models/gateway_service_model.rb +1 -1
  30. data/lib/vwo/models/schemas/settings_schema_validation.rb +1 -1
  31. data/lib/vwo/models/settings/settings_model.rb +8 -2
  32. data/lib/vwo/models/storage/storage_data_model.rb +1 -1
  33. data/lib/vwo/models/user/context_model.rb +1 -1
  34. data/lib/vwo/models/user/context_vwo_model.rb +1 -1
  35. data/lib/vwo/models/user/get_flag_response.rb +1 -1
  36. data/lib/vwo/models/vwo_options_model.rb +1 -1
  37. data/lib/vwo/packages/decision_maker/decision_maker.rb +1 -1
  38. data/lib/vwo/packages/logger/core/log_manager.rb +2 -2
  39. data/lib/vwo/packages/logger/core/transport_manager.rb +1 -1
  40. data/lib/vwo/packages/logger/log_message_builder.rb +1 -1
  41. data/lib/vwo/packages/logger/logger.rb +2 -2
  42. data/lib/vwo/packages/logger/transports/console_transport.rb +1 -1
  43. data/lib/vwo/packages/network_layer/client/network_client.rb +39 -25
  44. data/lib/vwo/packages/network_layer/handlers/request_handler.rb +1 -1
  45. data/lib/vwo/packages/network_layer/manager/network_manager.rb +6 -4
  46. data/lib/vwo/packages/network_layer/models/global_request_model.rb +1 -1
  47. data/lib/vwo/packages/network_layer/models/request_model.rb +1 -1
  48. data/lib/vwo/packages/network_layer/models/response_model.rb +9 -1
  49. data/lib/vwo/packages/segmentation_evaluator/core/segmentation_manager.rb +1 -1
  50. data/lib/vwo/packages/segmentation_evaluator/enums/segment_operand_regex_enum.rb +1 -1
  51. data/lib/vwo/packages/segmentation_evaluator/enums/segment_operand_value_enum.rb +1 -1
  52. data/lib/vwo/packages/segmentation_evaluator/enums/segment_operator_value_enum.rb +1 -1
  53. data/lib/vwo/packages/segmentation_evaluator/evaluators/segment_evaluator.rb +1 -1
  54. data/lib/vwo/packages/segmentation_evaluator/evaluators/segment_operand_evaluator.rb +1 -1
  55. data/lib/vwo/packages/segmentation_evaluator/utils/segment_util.rb +1 -1
  56. data/lib/vwo/packages/storage/connector.rb +1 -1
  57. data/lib/vwo/packages/storage/storage.rb +3 -1
  58. data/lib/vwo/services/batch_event_queue.rb +179 -0
  59. data/lib/vwo/services/campaign_decision_service.rb +1 -1
  60. data/lib/vwo/services/hooks_service.rb +1 -1
  61. data/lib/vwo/services/logger_service.rb +1 -1
  62. data/lib/vwo/services/settings_service.rb +4 -2
  63. data/lib/vwo/services/storage_service.rb +1 -1
  64. data/lib/vwo/utils/batch_event_dispatcher.rb +117 -0
  65. data/lib/vwo/utils/campaign_util.rb +1 -1
  66. data/lib/vwo/utils/data_type_util.rb +1 -1
  67. data/lib/vwo/utils/decision_util.rb +1 -1
  68. data/lib/vwo/utils/function_util.rb +5 -1
  69. data/lib/vwo/utils/gateway_service_util.rb +1 -1
  70. data/lib/vwo/utils/impression_util.rb +10 -3
  71. data/lib/vwo/utils/log_message_util.rb +1 -1
  72. data/lib/vwo/utils/meg_util.rb +1 -1
  73. data/lib/vwo/utils/network_util.rb +16 -7
  74. data/lib/vwo/utils/rule_evaluation_util.rb +1 -1
  75. data/lib/vwo/utils/settings_util.rb +1 -1
  76. data/lib/vwo/utils/url_util.rb +1 -1
  77. data/lib/vwo/utils/uuid_util.rb +1 -1
  78. data/lib/vwo/vwo_builder.rb +97 -24
  79. data/lib/vwo/vwo_client.rb +23 -4
  80. data/lib/vwo.rb +2 -1
  81. metadata +8 -2
@@ -1,4 +1,4 @@
1
- # Copyright 2025 Wingify Software Pvt. Ltd.
1
+ # Copyright 2024-2025 Wingify Software Pvt. Ltd.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -16,7 +16,7 @@ require_relative '../models/settings/settings_model'
16
16
  require_relative './network_util'
17
17
  require_relative '../models/user/context_model'
18
18
  require_relative '../enums/event_enum'
19
-
19
+ require_relative '../services/batch_event_queue'
20
20
  # Creates and sends an impression for a variation shown event.
21
21
  # This function constructs the necessary properties and payload for the event
22
22
  # and uses the NetworkUtil to send a POST API request.
@@ -45,5 +45,12 @@ def create_and_send_impression_for_variation_shown(settings, campaign_id, variat
45
45
  context.get_ip_address
46
46
  )
47
47
 
48
- NetworkUtil.send_post_api_request(properties, payload)
48
+ # check if batching is enabled
49
+ if BatchEventsQueue.instance
50
+ # add the payload to the batch events queue
51
+ BatchEventsQueue.instance.enqueue(payload)
52
+ else
53
+ # Send the constructed payload via POST request
54
+ NetworkUtil.send_post_api_request(properties, payload)
55
+ end
49
56
  end
@@ -1,4 +1,4 @@
1
- # Copyright 2025 Wingify Software Pvt. Ltd.
1
+ # Copyright 2024-2025 Wingify Software Pvt. Ltd.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 2025 Wingify Software Pvt. Ltd.
1
+ # Copyright 2024-2025 Wingify Software Pvt. Ltd.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 2025 Wingify Software Pvt. Ltd.
1
+ # Copyright 2024-2025 Wingify Software Pvt. Ltd.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -104,8 +104,6 @@ class NetworkUtil
104
104
  msgId: "#{uuid}-#{get_current_unix_timestamp_in_millis}",
105
105
  visId: uuid,
106
106
  sessionId: get_current_unix_timestamp,
107
- visitor_ua: visitor_user_agent,
108
- visitor_ip: ip_address,
109
107
  event: {
110
108
  props: {
111
109
  vwo_sdkName: Constants::SDK_NAME,
@@ -130,6 +128,10 @@ class NetworkUtil
130
128
  properties[:d][:event][:props][:id] = campaign_id
131
129
  properties[:d][:event][:props][:variation] = variation_id
132
130
  properties[:d][:event][:props][:isFirst] = 1
131
+
132
+ # Only add visitor_ua and visitor_ip if they are non-null
133
+ properties[:d][:visitor_ua] = visitor_user_agent if visitor_user_agent && !visitor_user_agent.empty?
134
+ properties[:d][:visitor_ip] = ip_address if ip_address && !ip_address.empty?
133
135
 
134
136
  LoggerService.log(LogLevelEnum::DEBUG, "IMPRESSION_FOR_TRACK_USER", {
135
137
  accountId: settings.account_id,
@@ -196,9 +198,16 @@ class NetworkUtil
196
198
  SettingsService.instance.protocol,
197
199
  SettingsService.instance.port
198
200
  )
199
-
200
- begin
201
- network_instance.post(request)
201
+
202
+ begin
203
+ if network_instance.get_client.get_should_use_threading
204
+ network_instance.get_client.get_thread_pool.post {
205
+ response = network_instance.post(request)
206
+ response
207
+ }
208
+ else
209
+ response = network_instance.post(request)
210
+ end
202
211
  rescue ResponseModel => err
203
212
  LoggerService.log(LogLevelEnum::ERROR, "NETWORK_CALL_FAILED", {
204
213
  method: HttpMethodEnum::POST,
@@ -224,7 +233,7 @@ class NetworkUtil
224
233
 
225
234
  begin
226
235
  network_instance.get(request)
227
- rescue ResponseModel => err
236
+ rescue StandardError => err
228
237
  LoggerService.log(LogLevelEnum::ERROR, "NETWORK_CALL_FAILED", {
229
238
  method: HttpMethodEnum::GET,
230
239
  err: err.is_a?(Hash) ? err.to_json : err
@@ -1,4 +1,4 @@
1
- # Copyright 2025 Wingify Software Pvt. Ltd.
1
+ # Copyright 2024-2025 Wingify Software Pvt. Ltd.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 2025 Wingify Software Pvt. Ltd.
1
+ # Copyright 2024-2025 Wingify Software Pvt. Ltd.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 2025 Wingify Software Pvt. Ltd.
1
+ # Copyright 2024-2025 Wingify Software Pvt. Ltd.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 2025 Wingify Software Pvt. Ltd.
1
+ # Copyright 2024-2025 Wingify Software Pvt. Ltd.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright 2025 Wingify Software Pvt. Ltd.
1
+ # Copyright 2024-2025 Wingify Software Pvt. Ltd.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -21,9 +21,13 @@ require_relative './packages/storage/storage'
21
21
  require_relative './packages/network_layer/manager/network_manager'
22
22
  require_relative './packages/segmentation_evaluator/core/segmentation_manager'
23
23
  require_relative './services/logger_service'
24
+ require_relative './services/batch_event_queue'
25
+ require_relative './utils/function_util'
26
+ require_relative './utils/batch_event_dispatcher'
27
+ require_relative './constants/constants'
24
28
 
25
29
  class VWOBuilder
26
- attr_reader :settings, :storage, :log_manager, :is_settings_fetch_in_progress, :vwo_instance
30
+ attr_reader :settings, :storage, :log_manager, :is_settings_fetch_in_progress, :vwo_instance, :is_valid_poll_interval_passed_from_init
27
31
 
28
32
  # Initialize the VWOBuilder with the given options
29
33
  # @param options [Hash] The options for the VWOBuilder
@@ -33,9 +37,50 @@ class VWOBuilder
33
37
  @storage = nil
34
38
  @log_manager = nil
35
39
  @is_settings_fetch_in_progress = false
40
+ @is_valid_poll_interval_passed_from_init = false
36
41
  @vwo_instance = nil
37
42
  end
38
43
 
44
+ # Initializes the batch event processing system
45
+ # Validates batch event settings and configures the BatchEventsQueue
46
+ # Sets up event dispatcher and flushes any existing events
47
+ # @raise [StandardError] If batch event configuration is invalid
48
+ def init_batch
49
+ # if gateway service is configured, then do not initialize batch event queue
50
+ if SettingsService.instance.is_gateway_service_provided
51
+ LoggerService.log(LogLevelEnum::INFO, "GATEWAY_AND_BATCH_EVENTS_CONFIG_MISMATCH")
52
+ return self
53
+ end
54
+ begin
55
+ if @options.key?(:batch_event_data)
56
+ if @options[:batch_event_data].is_a?(Hash)
57
+ # Validate batch event parameters
58
+ events_per_request = @options[:batch_event_data][:events_per_request]
59
+ request_time_interval = @options[:batch_event_data][:request_time_interval]
60
+
61
+ if (!events_per_request.is_a?(Numeric) || events_per_request <= 0) &&
62
+ (!request_time_interval.is_a?(Numeric) || request_time_interval <= 0)
63
+ LoggerService.log(LogLevelEnum::ERROR, "INVALID_BATCH_EVENTS_CONFIG")
64
+ end
65
+
66
+ BatchEventsQueue.configure(
67
+ @options[:batch_event_data].merge(
68
+ {
69
+ account_id: @options[:account_id],
70
+ dispatcher: method(:dispatcher)
71
+ }
72
+ )
73
+ )
74
+ @batch_event_data = @options[:batch_event_data]
75
+ else
76
+ LoggerService.log(LogLevelEnum::ERROR, "Invalid batch events config, should be a hash.", nil)
77
+ end
78
+ end
79
+ rescue StandardError => e
80
+ LoggerService.log(LogLevelEnum::ERROR, "Failed to initialize batch event queue: #{e.message}", nil)
81
+ end
82
+ end
83
+
39
84
  # Set the network manager
40
85
  # @return [VWOBuilder] The VWOBuilder instance
41
86
  def set_network_manager
@@ -89,7 +134,12 @@ class VWOBuilder
89
134
  # Set the storage
90
135
  # @return [VWOBuilder] The VWOBuilder instance
91
136
  def set_storage
92
- @storage = @options[:storage] ? Storage.instance.attach_connector(@options[:storage]) : nil
137
+ if @options[:storage]
138
+ @storage = Storage.instance.attach_connector(@options[:storage])
139
+ Storage.instance.is_storage_enabled = true
140
+ else
141
+ @storage = nil
142
+ end
93
143
  LoggerService.log(LogLevelEnum::DEBUG, "SERVICE_INITIALIZED", {service: "Storage"})
94
144
  self
95
145
  end
@@ -116,26 +166,19 @@ class VWOBuilder
116
166
  # Initialize the polling
117
167
  # @return [VWOBuilder] The VWOBuilder instance
118
168
  def init_polling
119
- return self unless @options[:poll_interval]
120
-
121
- unless @options[:poll_interval].is_a?(Numeric)
122
- LoggerService.log(LogLevelEnum::ERROR, "INIT_OPTIONS_INVALID", {
123
- key: 'poll_interval',
124
- correctType: 'number'
125
- })
126
- return self
127
- end
128
-
129
- # Check if the polling interval is greater than or equal to 1000
130
- unless @options[:poll_interval] >= 1000
169
+ poll_interval = @options[:poll_interval]
170
+
171
+ if poll_interval && poll_interval.is_a?(Numeric) && poll_interval >= 1000
172
+ # this is to check if the poll_interval passed in options is valid
173
+ @is_valid_poll_interval_passed_from_init = true
174
+ check_and_poll
175
+ elsif poll_interval
176
+ # only log error if poll_interval is present in options
131
177
  LoggerService.log(LogLevelEnum::ERROR, "INIT_OPTIONS_INVALID", {
132
178
  key: 'poll_interval',
133
- correctType: 'number'
179
+ correctType: 'number >= 1000'
134
180
  })
135
- return self
136
181
  end
137
-
138
- check_and_poll
139
182
  self
140
183
  end
141
184
 
@@ -144,25 +187,42 @@ class VWOBuilder
144
187
  # @return [VWOClient] The VWO instance
145
188
  def build(settings)
146
189
  @vwo_instance = VWOClient.new(settings, @options)
190
+ # if poll_interval is not present in options, set it to the pollInterval from settings
191
+ update_poll_interval_and_check_and_poll(settings)
147
192
  @vwo_instance
148
193
  end
149
194
 
195
+ def update_poll_interval_and_check_and_poll(settings, should_check_and_poll = true)
196
+ # only update the poll_interval if it poll_interval is not valid or not present in options
197
+ if !@is_valid_poll_interval_passed_from_init
198
+ @options[:poll_interval] = settings["pollInterval"] || Constants::POLLING_INTERVAL
199
+ LoggerService.log(LogLevelEnum::DEBUG, "USING_POLL_INTERVAL_FROM_SETTINGS", {
200
+ source: settings["pollInterval"] ? 'settings' : 'default',
201
+ pollInterval: @options[:poll_interval]
202
+ })
203
+ end
204
+ # should_check_and_poll will be true only when we are updating the poll_interval first time from self.build method
205
+ # if we are updating the poll_interval already running polling, we don't need to check and poll again
206
+ if should_check_and_poll && !@is_valid_poll_interval_passed_from_init
207
+ check_and_poll
208
+ end
209
+ end
210
+
150
211
  # This method is used to check and poll the settings from the server
151
212
  # @return [VWOBuilder] The VWOBuilder instance
152
213
  def check_and_poll
153
- polling_interval = @options[:poll_interval]
154
-
155
214
  @thread_pool = NetworkManager.instance.get_client.get_thread_pool
156
215
  @thread_pool.post do
157
216
  loop do
158
- sleep(polling_interval / 1000.0)
217
+ sleep(@options[:poll_interval]/ 1000.0)
159
218
  begin
160
219
  latest_settings = fetch_settings(true)
161
- if latest_settings.to_json != @settings.to_json
220
+ if latest_settings && latest_settings.to_json != @settings.to_json
162
221
  @settings = latest_settings
163
222
  LoggerService.log(LogLevelEnum::INFO, "POLLING_SET_SETTINGS")
164
223
  @vwo_instance.update_settings(latest_settings.clone, false) if @vwo_instance
165
- else
224
+ update_poll_interval_and_check_and_poll(latest_settings, false)
225
+ elsif latest_settings
166
226
  LoggerService.log(LogLevelEnum::INFO, "POLLING_NO_CHANGE_IN_SETTINGS")
167
227
  end
168
228
  rescue StandardError => e
@@ -171,4 +231,17 @@ class VWOBuilder
171
231
  end
172
232
  end
173
233
  end
234
+
235
+ def dispatcher(events, callback)
236
+ BatchEventDispatcher.dispatch(
237
+ {
238
+ ev: events
239
+ },
240
+ callback,
241
+ {
242
+ a: @options[:account_id],
243
+ env: @options[:sdk_key]
244
+ }
245
+ )
246
+ end
174
247
  end
@@ -1,4 +1,4 @@
1
- # Copyright 2025 Wingify Software Pvt. Ltd.
1
+ # Copyright 2024-2025 Wingify Software Pvt. Ltd.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -23,6 +23,7 @@ require_relative 'services/logger_service'
23
23
  require_relative 'enums/log_level_enum'
24
24
  require_relative 'utils/network_util'
25
25
  require_relative 'models/schemas/settings_schema_validation'
26
+ require_relative 'services/batch_event_queue'
26
27
 
27
28
  class VWOClient
28
29
  attr_accessor :settings, :original_settings
@@ -59,7 +60,7 @@ class VWOClient
59
60
  LoggerService.log(LogLevelEnum::ERROR, "API_INVALID_PARAM", {apiName: api_name, key: 'feature_key', type: feature_key.class.name , correctType: 'String'})
60
61
  raise TypeError, 'feature_key should be a non-empty string'
61
62
  end
62
- unless SettingsSchema.new.is_settings_valid(@original_settings)
63
+ unless SettingsService.instance.is_settings_valid
63
64
  LoggerService.log(LogLevelEnum::ERROR, "API_SETTING_INVALID")
64
65
  raise TypeError, 'Invalid Settings'
65
66
  end
@@ -100,7 +101,7 @@ class VWOClient
100
101
  LoggerService.log(LogLevelEnum::ERROR, "API_INVALID_PARAM", {apiName: api_name, key: 'event_properties', type: event_properties.class.name, correctType: 'Hash'})
101
102
  raise TypeError, 'event_properties should be a hash'
102
103
  end
103
- unless SettingsSchema.new.is_settings_valid(@original_settings)
104
+ unless SettingsService.instance.is_settings_valid
104
105
  LoggerService.log(LogLevelEnum::ERROR, "API_SETTING_INVALID")
105
106
  raise TypeError, 'Invalid Settings'
106
107
  end
@@ -139,7 +140,7 @@ class VWOClient
139
140
  LoggerService.log(LogLevelEnum::ERROR, "API_INVALID_PARAM", {apiName: api_name, key: 'context.id', type: context[:id].class.name, correctType: 'String'})
140
141
  raise TypeError, 'Invalid context, id should be a non-empty string'
141
142
  end
142
- unless SettingsSchema.new.is_settings_valid(@original_settings)
143
+ unless SettingsService.instance.is_settings_valid
143
144
  LoggerService.log(LogLevelEnum::ERROR, "API_SETTING_INVALID")
144
145
  raise TypeError, 'Invalid Settings'
145
146
  end
@@ -189,4 +190,22 @@ class VWOClient
189
190
  )
190
191
  end
191
192
  end
193
+
194
+ # Flushes the batch events queue
195
+ # @return [void]
196
+ def flush_events
197
+ api_name = 'flush_events'
198
+ begin
199
+ LoggerService.log(LogLevelEnum::DEBUG, "API_CALLED", {apiName: api_name})
200
+ if BatchEventsQueue.instance.nil?
201
+ LoggerService.log(LogLevelEnum::ERROR, "Batching is not enabled. Pass batch_event_data in the SDK configuration while invoking init API.", nil)
202
+ raise StandardError, "Batch events queue is not initialized"
203
+ end
204
+ # flush the batch events queue
205
+ @response = BatchEventsQueue.instance.flush(true)
206
+ @response
207
+ rescue StandardError => e
208
+ LoggerService.log(LogLevelEnum::ERROR, "API_THROW_ERROR", {apiName: api_name, err: e.message})
209
+ end
210
+ end
192
211
  end
data/lib/vwo.rb CHANGED
@@ -1,4 +1,4 @@
1
- # Copyright 2025 Wingify Software Pvt. Ltd.
1
+ # Copyright 2024-2025 Wingify Software Pvt. Ltd.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -36,6 +36,7 @@ class VWO
36
36
  .set_network_manager
37
37
  .set_segmentation
38
38
  .init_polling
39
+ .init_batch
39
40
 
40
41
  if options[:settings]
41
42
  return @@vwo_builder.build(options[:settings])
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vwo-fme-ruby-sdk
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - VWO
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-03-19 00:00:00.000000000 Z
11
+ date: 2025-06-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: uuidtools
@@ -143,6 +143,10 @@ executables: []
143
143
  extensions: []
144
144
  extra_rdoc_files: []
145
145
  files:
146
+ - lib/resources/debug_messages.json
147
+ - lib/resources/error_messages.json
148
+ - lib/resources/info_messages.json
149
+ - lib/resources/warn_messages.json
146
150
  - lib/vwo.rb
147
151
  - lib/vwo/api/get_flag.rb
148
152
  - lib/vwo/api/set_attribute.rb
@@ -196,11 +200,13 @@ files:
196
200
  - lib/vwo/packages/segmentation_evaluator/utils/segment_util.rb
197
201
  - lib/vwo/packages/storage/connector.rb
198
202
  - lib/vwo/packages/storage/storage.rb
203
+ - lib/vwo/services/batch_event_queue.rb
199
204
  - lib/vwo/services/campaign_decision_service.rb
200
205
  - lib/vwo/services/hooks_service.rb
201
206
  - lib/vwo/services/logger_service.rb
202
207
  - lib/vwo/services/settings_service.rb
203
208
  - lib/vwo/services/storage_service.rb
209
+ - lib/vwo/utils/batch_event_dispatcher.rb
204
210
  - lib/vwo/utils/campaign_util.rb
205
211
  - lib/vwo/utils/data_type_util.rb
206
212
  - lib/vwo/utils/decision_util.rb