vwo-sdk 1.14.1 → 1.15.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/vwo/constants.rb +1 -1
- data/lib/vwo/core/variation_decider.rb +4 -1
- data/lib/vwo/utils/campaign.rb +2 -2
- data/lib/vwo.rb +115 -113
- metadata +14 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2307340499cf5f0fd3fd13ab5025fc4892721123c82bc3df8eff266362d01c82
|
4
|
+
data.tar.gz: a0a3343ef9af102444cd9a6dd590937d5c737a3ed46765d3bd9cb8e18ceb41bf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f1c28b3c5b86fa2b4488b5995a9931aaea708d1788f803c079f2fc5684fca81d82465f798e9653d227d448d6c08688791cf0740f774526ed38bd345e252b91fa
|
7
|
+
data.tar.gz: e4d2fcfca37407b7ed7ff008bc2d2d6b03e7f6bddd2f653825fd059306de36254ee4d46165e0973524e701d62e9a972c11a586089c5279027fb4ea5dc589060f
|
data/lib/vwo/constants.rb
CHANGED
@@ -26,7 +26,7 @@ class VWO
|
|
26
26
|
HTTP_PROTOCOL = 'http://'
|
27
27
|
HTTPS_PROTOCOL = 'https://'
|
28
28
|
URL_NAMESPACE = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'
|
29
|
-
SDK_VERSION = '1.
|
29
|
+
SDK_VERSION = '1.15.0'
|
30
30
|
SDK_NAME = 'ruby'
|
31
31
|
VWO_DELIMITER = '_vwo_'
|
32
32
|
MAX_EVENTS_PER_REQUEST = 5000
|
@@ -151,7 +151,10 @@ class VWO
|
|
151
151
|
|
152
152
|
user_campaign_map = get_user_storage(user_id, campaign_key)
|
153
153
|
variation = get_stored_variation(user_id, campaign_key, user_campaign_map) if valid_hash?(user_campaign_map)
|
154
|
-
|
154
|
+
|
155
|
+
if variation
|
156
|
+
variation = variation.dup # deep copy
|
157
|
+
end
|
155
158
|
|
156
159
|
if variation
|
157
160
|
if valid_string?(user_campaign_map['goal_identifier']) && api_name == ApiMethods::TRACK
|
data/lib/vwo/utils/campaign.rb
CHANGED
@@ -190,7 +190,7 @@ class VWO
|
|
190
190
|
end
|
191
191
|
goal = get_campaign_goal(campaign, goal_identifier)
|
192
192
|
if validate_goal(goal, goal_type_to_track)
|
193
|
-
campaigns.
|
193
|
+
campaigns.push(campaign)
|
194
194
|
end
|
195
195
|
end
|
196
196
|
end
|
@@ -215,7 +215,7 @@ class VWO
|
|
215
215
|
|
216
216
|
campaign = get_campaign_for_campaign_key_and_goal(campaign_key, settings_file, goal_identifier, goal_type_to_track)
|
217
217
|
if campaign
|
218
|
-
campaigns.
|
218
|
+
campaigns.push(campaign)
|
219
219
|
end
|
220
220
|
end
|
221
221
|
campaigns
|
data/lib/vwo.rb
CHANGED
@@ -437,7 +437,7 @@ class VWO
|
|
437
437
|
exception: e
|
438
438
|
)
|
439
439
|
)
|
440
|
-
|
440
|
+
e
|
441
441
|
end
|
442
442
|
|
443
443
|
# This API method: Gets the variation name assigned for the
|
@@ -611,147 +611,149 @@ class VWO
|
|
611
611
|
|
612
612
|
result = {}
|
613
613
|
campaigns.each do |campaign|
|
614
|
-
|
615
|
-
|
616
|
-
if campaign_type == CampaignTypes::FEATURE_ROLLOUT
|
617
|
-
@logger.log(
|
618
|
-
LogLevelEnum::ERROR,
|
619
|
-
format(
|
620
|
-
LogMessageEnum::ErrorMessages::INVALID_API,
|
621
|
-
file: FILE,
|
622
|
-
api_name: ApiMethods::TRACK,
|
623
|
-
user_id: user_id,
|
624
|
-
campaign_key: campaign['key'],
|
625
|
-
campaign_type: campaign_type
|
626
|
-
)
|
627
|
-
)
|
628
|
-
result[campaign['key']] = false
|
629
|
-
next
|
630
|
-
end
|
631
|
-
|
632
|
-
variation = @variation_decider.get_variation(user_id, campaign, ApiMethods::TRACK, campaign['key'], custom_variables, variation_targeting_variables, goal_identifier)
|
614
|
+
begin
|
615
|
+
campaign_type = campaign['type']
|
633
616
|
|
634
|
-
|
635
|
-
goal = get_campaign_goal(campaign, goal_identifier)
|
636
|
-
if goal.nil? || !goal["id"]
|
637
|
-
@logger.log(
|
638
|
-
LogLevelEnum::ERROR,
|
639
|
-
format(
|
640
|
-
LogMessageEnum::ErrorMessages::TRACK_API_GOAL_NOT_FOUND,
|
641
|
-
file: FILE,
|
642
|
-
goal_identifier: goal_identifier,
|
643
|
-
user_id: user_id,
|
644
|
-
campaign_key: campaign['key'],
|
645
|
-
api_name: ApiMethods::TRACK
|
646
|
-
)
|
647
|
-
)
|
648
|
-
result[campaign['key']] = false
|
649
|
-
next
|
650
|
-
elsif goal['type'] == GoalTypes::REVENUE && !valid_value?(revenue_value)
|
617
|
+
if campaign_type == CampaignTypes::FEATURE_ROLLOUT
|
651
618
|
@logger.log(
|
652
619
|
LogLevelEnum::ERROR,
|
653
620
|
format(
|
654
|
-
LogMessageEnum::ErrorMessages::
|
621
|
+
LogMessageEnum::ErrorMessages::INVALID_API,
|
655
622
|
file: FILE,
|
623
|
+
api_name: ApiMethods::TRACK,
|
656
624
|
user_id: user_id,
|
657
|
-
goal_identifier: goal_identifier,
|
658
625
|
campaign_key: campaign['key'],
|
659
|
-
|
626
|
+
campaign_type: campaign_type
|
660
627
|
)
|
661
628
|
)
|
662
629
|
result[campaign['key']] = false
|
663
630
|
next
|
664
|
-
elsif goal['type'] == GoalTypes::CUSTOM
|
665
|
-
revenue_value = nil
|
666
631
|
end
|
667
632
|
|
668
|
-
|
669
|
-
identifiers = variation['goal_identifier'].split(VWO_DELIMITER)
|
670
|
-
else
|
671
|
-
variation['goal_identifier'] = ''
|
672
|
-
identifiers = []
|
673
|
-
end
|
633
|
+
variation = @variation_decider.get_variation(user_id, campaign, ApiMethods::TRACK, campaign['key'], custom_variables, variation_targeting_variables, goal_identifier)
|
674
634
|
|
675
|
-
if
|
676
|
-
|
677
|
-
|
678
|
-
|
679
|
-
|
680
|
-
|
681
|
-
|
682
|
-
|
683
|
-
|
684
|
-
|
685
|
-
|
686
|
-
|
687
|
-
|
688
|
-
goal_identifier: goal_identifier,
|
689
|
-
api_name: ApiMethods::TRACK
|
635
|
+
if variation
|
636
|
+
goal = get_campaign_goal(campaign, goal_identifier)
|
637
|
+
if goal.nil? || !goal["id"]
|
638
|
+
@logger.log(
|
639
|
+
LogLevelEnum::ERROR,
|
640
|
+
format(
|
641
|
+
LogMessageEnum::ErrorMessages::TRACK_API_GOAL_NOT_FOUND,
|
642
|
+
file: FILE,
|
643
|
+
goal_identifier: goal_identifier,
|
644
|
+
user_id: user_id,
|
645
|
+
campaign_key: campaign['key'],
|
646
|
+
api_name: ApiMethods::TRACK
|
647
|
+
)
|
690
648
|
)
|
691
|
-
|
692
|
-
|
693
|
-
|
694
|
-
end
|
695
|
-
|
696
|
-
if defined?(@batch_events)
|
697
|
-
impression = create_bulk_event_impression(
|
698
|
-
@settings_file,
|
699
|
-
campaign['id'],
|
700
|
-
variation['id'],
|
701
|
-
user_id,
|
702
|
-
goal['id'],
|
703
|
-
revenue_value
|
704
|
-
)
|
705
|
-
@batch_events_queue.enqueue(impression)
|
706
|
-
else
|
707
|
-
impression = create_impression(
|
708
|
-
@settings_file,
|
709
|
-
campaign['id'],
|
710
|
-
variation['id'],
|
711
|
-
user_id,
|
712
|
-
@sdk_key,
|
713
|
-
goal['id'],
|
714
|
-
revenue_value
|
715
|
-
)
|
716
|
-
if @event_dispatcher.dispatch(impression)
|
649
|
+
result[campaign['key']] = false
|
650
|
+
next
|
651
|
+
elsif goal['type'] == GoalTypes::REVENUE && !valid_value?(revenue_value)
|
717
652
|
@logger.log(
|
718
|
-
LogLevelEnum::
|
653
|
+
LogLevelEnum::ERROR,
|
719
654
|
format(
|
720
|
-
LogMessageEnum::
|
655
|
+
LogMessageEnum::ErrorMessages::TRACK_API_REVENUE_NOT_PASSED_FOR_REVENUE_GOAL,
|
721
656
|
file: FILE,
|
722
|
-
|
723
|
-
|
724
|
-
|
725
|
-
|
726
|
-
end_point: EVENTS::TRACK_GOAL
|
657
|
+
user_id: user_id,
|
658
|
+
goal_identifier: goal_identifier,
|
659
|
+
campaign_key: campaign['key'],
|
660
|
+
api_name: ApiMethods::TRACK
|
727
661
|
)
|
728
662
|
)
|
663
|
+
result[campaign['key']] = false
|
664
|
+
next
|
665
|
+
elsif goal['type'] == GoalTypes::CUSTOM
|
666
|
+
revenue_value = nil
|
667
|
+
end
|
668
|
+
|
669
|
+
if variation['goal_identifier']
|
670
|
+
identifiers = variation['goal_identifier'].split(VWO_DELIMITER)
|
671
|
+
else
|
672
|
+
variation['goal_identifier'] = ''
|
673
|
+
identifiers = []
|
674
|
+
end
|
675
|
+
|
676
|
+
if !identifiers.include? goal_identifier
|
677
|
+
updated_goal_identifier = variation['goal_identifier']
|
678
|
+
updated_goal_identifier += VWO_DELIMITER + goal_identifier
|
679
|
+
@variation_decider.save_user_storage(user_id, campaign['key'], variation['name'], updated_goal_identifier) if variation['name']
|
680
|
+
# set variation at user storage
|
681
|
+
elsif !should_track_returning_user
|
729
682
|
@logger.log(
|
730
683
|
LogLevelEnum::INFO,
|
731
684
|
format(
|
732
|
-
LogMessageEnum::InfoMessages::
|
685
|
+
LogMessageEnum::InfoMessages::GOAL_ALREADY_TRACKED,
|
733
686
|
file: FILE,
|
734
|
-
|
735
|
-
|
736
|
-
|
737
|
-
|
687
|
+
user_id: user_id,
|
688
|
+
campaign_key: campaign['key'],
|
689
|
+
goal_identifier: goal_identifier,
|
690
|
+
api_name: ApiMethods::TRACK
|
738
691
|
)
|
739
692
|
)
|
693
|
+
result[campaign['key']] = false
|
694
|
+
next
|
740
695
|
end
|
696
|
+
|
697
|
+
if defined?(@batch_events)
|
698
|
+
impression = create_bulk_event_impression(
|
699
|
+
@settings_file,
|
700
|
+
campaign['id'],
|
701
|
+
variation['id'],
|
702
|
+
user_id,
|
703
|
+
goal['id'],
|
704
|
+
revenue_value
|
705
|
+
)
|
706
|
+
@batch_events_queue.enqueue(impression)
|
707
|
+
else
|
708
|
+
impression = create_impression(
|
709
|
+
@settings_file,
|
710
|
+
campaign['id'],
|
711
|
+
variation['id'],
|
712
|
+
user_id,
|
713
|
+
@sdk_key,
|
714
|
+
goal['id'],
|
715
|
+
revenue_value
|
716
|
+
)
|
717
|
+
if @event_dispatcher.dispatch(impression)
|
718
|
+
@logger.log(
|
719
|
+
LogLevelEnum::INFO,
|
720
|
+
format(
|
721
|
+
LogMessageEnum::InfoMessages::IMPRESSION_SUCCESS,
|
722
|
+
file: FILE,
|
723
|
+
sdk_key: @sdk_key,
|
724
|
+
account_id: @account_id,
|
725
|
+
campaign_id: campaign['id'],
|
726
|
+
variation_id: variation['id'],
|
727
|
+
end_point: EVENTS::TRACK_GOAL
|
728
|
+
)
|
729
|
+
)
|
730
|
+
@logger.log(
|
731
|
+
LogLevelEnum::INFO,
|
732
|
+
format(
|
733
|
+
LogMessageEnum::InfoMessages::MAIN_KEYS_FOR_IMPRESSION,
|
734
|
+
file: FILE,
|
735
|
+
sdk_key: @sdk_key,
|
736
|
+
campaign_id: impression[:experiment_id],
|
737
|
+
account_id: impression[:account_id],
|
738
|
+
variation_id: impression[:combination]
|
739
|
+
)
|
740
|
+
)
|
741
|
+
end
|
742
|
+
end
|
743
|
+
result[campaign['key']] = true
|
744
|
+
next
|
741
745
|
end
|
742
|
-
result[campaign['key']] =
|
743
|
-
|
744
|
-
|
745
|
-
|
746
|
-
|
747
|
-
|
748
|
-
|
749
|
-
|
750
|
-
|
751
|
-
file: FILE,
|
752
|
-
exception: e
|
746
|
+
result[campaign['key']] = false
|
747
|
+
rescue StandardError => e
|
748
|
+
@logger.log(
|
749
|
+
LogLevelEnum::ERROR,
|
750
|
+
format(
|
751
|
+
e.message,
|
752
|
+
file: FILE,
|
753
|
+
exception: e
|
754
|
+
)
|
753
755
|
)
|
754
|
-
|
756
|
+
end
|
755
757
|
end
|
756
758
|
|
757
759
|
if result.length() == 0
|
metadata
CHANGED
@@ -1,29 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vwo-sdk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.15.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- VWO
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-08-
|
11
|
+
date: 2021-08-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: codecov
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.
|
19
|
+
version: 0.4.3
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 0.
|
26
|
+
version: 0.4.3
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rubocop
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -80,7 +80,7 @@ dependencies:
|
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0.1'
|
83
|
-
description:
|
83
|
+
description: Ruby SDK for VWO FullStack testing.
|
84
84
|
email:
|
85
85
|
- dev@wingify.com
|
86
86
|
executables: []
|
@@ -116,7 +116,12 @@ files:
|
|
116
116
|
homepage: https://vwo.com/fullstack/server-side-testing/
|
117
117
|
licenses:
|
118
118
|
- Apache-2.0
|
119
|
-
metadata:
|
119
|
+
metadata:
|
120
|
+
bug_tracker_uri: https://github.com/wingify/vwo-ruby-sdk/issues
|
121
|
+
changelog_uri: https://github.com/wingify/vwo-ruby-sdk/blob/master/CHANGELOG.md
|
122
|
+
documentation_uri: https://developers.vwo.com/docs/ruby-sdk-reference
|
123
|
+
homepage_uri: https://github.com/wingify/vwo-ruby-sdk
|
124
|
+
source_code_uri: https://github.com/wingify/vwo-ruby-sdk
|
120
125
|
post_install_message:
|
121
126
|
rdoc_options: []
|
122
127
|
require_paths:
|
@@ -125,7 +130,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
125
130
|
requirements:
|
126
131
|
- - ">="
|
127
132
|
- !ruby/object:Gem::Version
|
128
|
-
version:
|
133
|
+
version: 2.2.10
|
129
134
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
130
135
|
requirements:
|
131
136
|
- - ">="
|
@@ -135,5 +140,5 @@ requirements: []
|
|
135
140
|
rubygems_version: 3.0.6
|
136
141
|
signing_key:
|
137
142
|
specification_version: 4
|
138
|
-
summary: Ruby SDK for VWO
|
143
|
+
summary: Ruby SDK for VWO FullStack testing
|
139
144
|
test_files: []
|