kameleoon-client-ruby 1.0.4 → 1.0.5
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 +4 -4
- data/lib/kameleoon/client.rb +47 -26
- data/lib/kameleoon/request.rb +2 -2
- data/lib/kameleoon/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e0deee13cb73acd60d605f479ab0e2ebf374e38e7516d9bea0590b0adbdd7f53
|
4
|
+
data.tar.gz: 7c06c8d843f6f291d946375d495a3d573e31f932942c5b6edb2f86abf4d9183f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8d14ce02c0a2577988a0161292683e9a455c9532dda0fd69e5428d0f0a2bd08bb38114cf8b161d4a123921e08429cf1db126f7b3033d43a0889c4f6eea2d064b
|
7
|
+
data.tar.gz: de09c74c6587cbd9f53f44a6673b1d3e2832d3aa135376405d0e7eaef9933bc0891243cc34cb039d2eb72b8b8fa5eeb5045b9e4c69b4a4979aabcae154e8361b
|
data/lib/kameleoon/client.rb
CHANGED
@@ -121,11 +121,11 @@ module Kameleoon
|
|
121
121
|
experiment['deviations'].each do |key, value|
|
122
122
|
threshold -= value
|
123
123
|
if threshold < 0
|
124
|
-
|
124
|
+
track_experiment(visitor_code, experiment_id, key)
|
125
125
|
return key.to_s.to_i
|
126
126
|
end
|
127
127
|
end
|
128
|
-
|
128
|
+
track_experiment(visitor_code, experiment_id, REFERENCE, true)
|
129
129
|
raise Exception::NotActivated.new(visitor_code)
|
130
130
|
end
|
131
131
|
raise Exception::NotTargeted.new(visitor_code)
|
@@ -182,7 +182,7 @@ module Kameleoon
|
|
182
182
|
# @param [String] visitor_code Optional field - Visitor code, without visitor code it flush all of the data
|
183
183
|
#
|
184
184
|
def flush(visitor_code = nil)
|
185
|
-
|
185
|
+
track_data(visitor_code)
|
186
186
|
end
|
187
187
|
|
188
188
|
##
|
@@ -231,7 +231,7 @@ module Kameleoon
|
|
231
231
|
connexion_options = { :connect_timeout => (timeout.to_f / 1000.0) }
|
232
232
|
request_options = {
|
233
233
|
:path => get_experiment_register_url(visitor_code, id),
|
234
|
-
:body => (
|
234
|
+
:body => (data_not_sent(visitor_code).values.map { |data| data.obtain_full_post_text_line }.join("\n") || "").encode("UTF-8")
|
235
235
|
}
|
236
236
|
log "Activate feature request: " + request_options.inspect
|
237
237
|
log "Activate feature connexion:" + connexion_options.inspect
|
@@ -251,10 +251,10 @@ module Kameleoon
|
|
251
251
|
if feature_flag['targetingSegment'].nil? || feature_flag['targetingSegment'].check_tree(visitor_data)
|
252
252
|
threshold = obtain_hash_double(visitor_code, {}, id)
|
253
253
|
if threshold <= feature_flag['expositionRate']
|
254
|
-
|
254
|
+
track_experiment(visitor_code, id, feature_flag["variationsId"].first)
|
255
255
|
return true
|
256
256
|
else
|
257
|
-
|
257
|
+
track_experiment(visitor_code, id, REFERENCE, true)
|
258
258
|
return false
|
259
259
|
end
|
260
260
|
else
|
@@ -472,6 +472,10 @@ module Kameleoon
|
|
472
472
|
url
|
473
473
|
end
|
474
474
|
|
475
|
+
def get_data_register_url(visitor_code)
|
476
|
+
"/dataTracking?" + URI.encode_www_form(get_common_ssx_parameters(visitor_code))
|
477
|
+
end
|
478
|
+
|
475
479
|
def get_feature_flag(feature_key)
|
476
480
|
if feature_key.is_a?(String)
|
477
481
|
feature_flag = @feature_flags.select { |ff| ff['identificationKey'] == feature_key}.first
|
@@ -486,21 +490,48 @@ module Kameleoon
|
|
486
490
|
feature_flag
|
487
491
|
end
|
488
492
|
|
489
|
-
def
|
493
|
+
def track_experiment(visitor_code, experiment_id, variation_id = nil, none_variation = false)
|
494
|
+
data_not_sent = data_not_sent(visitor_code)
|
495
|
+
options = {
|
496
|
+
:path => get_experiment_register_url(visitor_code, experiment_id, variation_id, none_variation),
|
497
|
+
:body => ((data_not_sent.values[0] || []).map{ |it| it.obtain_full_post_text_line }.join("\n") || "").encode("UTF-8"),
|
498
|
+
:head => { "Content-Type" => "text/plain"}
|
499
|
+
}
|
500
|
+
trial = 0
|
501
|
+
log "Start post tracking experiment: " + data_not_sent.inspect
|
502
|
+
Thread.new do
|
503
|
+
EM.synchrony do
|
504
|
+
while trial < 10
|
505
|
+
request = EM::Synchrony.sync post(options, @tracking_url)
|
506
|
+
log "Request " + request.inspect
|
507
|
+
if is_successful(request)
|
508
|
+
(data_not_sent.values[0] || []).each { |it| it.sent = true }
|
509
|
+
EM.stop
|
510
|
+
end
|
511
|
+
trial += 1
|
512
|
+
end
|
513
|
+
EM.stop
|
514
|
+
end
|
515
|
+
log "Post to experiment tracking is done after " + trial.to_s + " trials"
|
516
|
+
Thread.exit
|
517
|
+
end
|
518
|
+
end
|
519
|
+
|
520
|
+
def track_data(visitor_code = nil)
|
490
521
|
Thread.new do
|
491
522
|
EM.synchrony do
|
492
|
-
entries = select_data_to_sent(visitor_code)
|
493
|
-
log "Start post to tracking: " + entries.inspect
|
494
523
|
trials = 10
|
495
524
|
concurrency = 1
|
496
|
-
|
497
|
-
|
498
|
-
|
525
|
+
data_not_sent = data_not_sent(visitor_code)
|
526
|
+
log "Start post tracking data: " + data_not_sent.inspect
|
527
|
+
while trials > 0 && !data_not_sent.empty?
|
528
|
+
EM::Synchrony::Iterator.new(data_not_sent, concurrency).map do |entry, iter|
|
499
529
|
options = {
|
500
|
-
:path =>
|
530
|
+
:path => get_data_register_url(entry.first),
|
501
531
|
:body => (entry.last.map { |data| data.obtain_full_post_text_line }.join("\n") || "").encode("UTF-8"),
|
502
532
|
:head => { "Content-Type" => "text/plain" }
|
503
533
|
}
|
534
|
+
log "Post tracking data for visitor_code: " + entry.first + " with options: " + options.inspect
|
504
535
|
request = post(options, @tracking_url)
|
505
536
|
request.callback {
|
506
537
|
if is_successful(request)
|
@@ -510,17 +541,17 @@ module Kameleoon
|
|
510
541
|
}
|
511
542
|
request.errback { iter.return(request) }
|
512
543
|
end
|
513
|
-
|
544
|
+
data_not_sent = data_not_sent(visitor_code)
|
514
545
|
trials -= 1
|
515
546
|
end
|
516
|
-
log "Post to tracking done"
|
547
|
+
log "Post to data tracking is done."
|
517
548
|
EM.stop
|
518
549
|
end
|
519
550
|
Thread.exit
|
520
551
|
end
|
521
552
|
end
|
522
553
|
|
523
|
-
def
|
554
|
+
def data_not_sent(visitor_code = nil)
|
524
555
|
if visitor_code.nil?
|
525
556
|
@data.select {|key, values| values.any? {|data| !data.sent}}
|
526
557
|
else
|
@@ -528,16 +559,6 @@ module Kameleoon
|
|
528
559
|
end
|
529
560
|
end
|
530
561
|
|
531
|
-
def build_beacon_path(type, visitor_code, experiment_id = nil, variation_id = nil, none_variation = nil)
|
532
|
-
if type == "dataTracking"
|
533
|
-
return "/dataTracking?" + URI.encode_www_form(get_common_ssx_parameters(visitor_code))
|
534
|
-
elsif type == "experimentTracking"
|
535
|
-
return get_experiment_register_url(visitor_code, experiment_id, variation_id, none_variation)
|
536
|
-
else
|
537
|
-
raise TypeError("Unknown type for post_beacon: " + type.to_s)
|
538
|
-
end
|
539
|
-
end
|
540
|
-
|
541
562
|
def log(text)
|
542
563
|
if @verbose_mode
|
543
564
|
print "Kameleoon Log: " + text.to_s + "\n"
|
data/lib/kameleoon/request.rb
CHANGED
@@ -42,9 +42,9 @@ module Kameleoon
|
|
42
42
|
|
43
43
|
def add_user_agent(request_options)
|
44
44
|
if request_options[:head].nil?
|
45
|
-
request_options[:head] = {'
|
45
|
+
request_options[:head] = {'Kameleoon-Client' => 'sdk/ruby/' + Kameleoon::VERSION}
|
46
46
|
else
|
47
|
-
request_options[:head].store('
|
47
|
+
request_options[:head].store('Kameleoon-Client', 'sdk/ruby/' + Kameleoon::VERSION)
|
48
48
|
end
|
49
49
|
end
|
50
50
|
end
|
data/lib/kameleoon/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kameleoon-client-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kameleoon - Guillaume Grandjean
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-05-
|
11
|
+
date: 2021-05-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: em-http-request
|