Skip to content

Commit 1c58b6c

Browse files
committed
added models classes
1 parent d9a1788 commit 1c58b6c

7 files changed

Lines changed: 155 additions & 0 deletions

File tree

lib/splitclient-rb.rb

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@
6666
require 'splitclient-rb/engine/common/impressions_counter'
6767
require 'splitclient-rb/engine/common/impressions_manager'
6868
require 'splitclient-rb/engine/common/noop_impressions_counter'
69+
require 'splitclient-rb/engine/events/events_manager_config.rb'
6970
require 'splitclient-rb/engine/parser/condition'
7071
require 'splitclient-rb/engine/parser/partition'
7172
require 'splitclient-rb/engine/parser/evaluator'
@@ -112,6 +113,10 @@
112113
require 'splitclient-rb/engine/models/evaluation_options'
113114
require 'splitclient-rb/engine/models/fallback_treatment.rb'
114115
require 'splitclient-rb/engine/models/fallback_treatments_configuration.rb'
116+
require 'splitclient-rb/engine/models/events_metadata.rb'
117+
require 'splitclient-rb/engine/models/sdk_event_type.rb'
118+
require 'splitclient-rb/engine/models/sdk_event.rb'
119+
require 'splitclient-rb/engine/models/sdk_internal_event.rb'
115120
require 'splitclient-rb/engine/auth_api_client'
116121
require 'splitclient-rb/engine/back_off'
117122
require 'splitclient-rb/engine/fallback_treatment_calculator.rb'
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
# frozen_string_literal: true
2+
3+
module SplitIoClient::Engine::Events
4+
class EventsManagerConfig
5+
attr_accessor :require_all, :prerequisites, :require_any, :suppressed_by, :execution_limits, :evaluation_order
6+
7+
def initialize
8+
@require_all = get_require_all
9+
@prerequisites = get_prerequisites
10+
@require_any = get_require_any
11+
@suppressed_by = get_suppressed_by
12+
@execution_limits = get_execution_limits
13+
@evaluation_order = get_sorted_events
14+
end
15+
16+
private
17+
18+
def get_require_all
19+
return {
20+
SplitIoClient::Engine::Models::SdkEvent::SDK_READY => Set.new([SplitIoClient::Engine::Models::SdkInternalEvent::SDK_READY])
21+
}
22+
end
23+
24+
def get_prerequisites
25+
return {
26+
SplitIoClient::Engine::Models::SdkEvent::SDK_UPDATE => Set.new([SplitIoClient::Engine::Models::SdkEvent::SDK_READY])
27+
}
28+
end
29+
30+
def get_require_any
31+
return {
32+
SplitIoClient::Engine::Models::SdkEvent::SDK_UPDATE => Set.new([SplitIoClient::Engine::Models::SdkInternalEvent::FLAG_KILLED_NOTIFICATION, SplitIoClient::Engine::Models::SdkInternalEvent::FLAGS_UPDATED,
33+
SplitIoClient::Engine::Models::SdkInternalEvent::RB_SEGMENTS_UPDATED, SplitIoClient::Engine::Models::SdkInternalEvent::SEGMENTS_UPDATED])
34+
}
35+
end
36+
37+
def get_suppressed_by
38+
return {}
39+
end
40+
41+
def get_execution_limits
42+
return {
43+
SplitIoClient::Engine::Models::SdkEvent::SDK_READY => 1,
44+
SplitIoClient::Engine::Models::SdkEvent::SDK_UPDATE => -1
45+
}
46+
end
47+
48+
def get_sorted_events
49+
sorted_events = []
50+
for sdk_event in [SplitIoClient::Engine::Models::SdkEvent::SDK_READY, SplitIoClient::Engine::Models::SdkEvent::SDK_UPDATE]
51+
sorted_events = dfs_recursive(sdk_event, sorted_events)
52+
end
53+
54+
return sorted_events
55+
end
56+
57+
def dfs_recursive(sdk_event, added)
58+
return added if added.include?(sdk_event)
59+
60+
get_dependencies(sdk_event).each do |dependent_event|
61+
added = dfs_recursive(dependent_event, added)
62+
end
63+
64+
added.push(sdk_event)
65+
return added
66+
end
67+
68+
def get_dependencies(sdk_event)
69+
dependencies = Set.new
70+
@prerequisites.each do |prerequisites_event_name, prerequisites_event_value|
71+
if prerequisites_event_name == sdk_event
72+
for prereq_event in prerequisites_event_value
73+
dependencies.add(prereq_event)
74+
end
75+
end
76+
end
77+
78+
@suppressed_by.each do |suppressed_event_name, suppressed_event_value|
79+
if suppressed_event_value.include?(sdk_event)
80+
dependencies.add(suppressed_event_name)
81+
end
82+
end
83+
84+
return dependencies
85+
end
86+
end
87+
end
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
module SplitIoClient::Engine::Models
2+
class EventsMetadata
3+
attr_accessor :type, :names
4+
5+
def initialize(type, names=nil)
6+
@type = type
7+
@names = names
8+
end
9+
end
10+
end
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
class SplitIoClient::Engine::Models::SdkEvent
2+
SDK_READY = 'SDK_READY'
3+
SDK_UPDATE = 'SDK_UPDATE'
4+
end
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
class SplitIoClient::Engine::Models::SdkEventType
2+
FLAG_UPDATE = 'FLAG_UPDATE'
3+
SEGMENTS_UPDATE = 'SEGMENTS_UPDATE'
4+
end
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
class SplitIoClient::Engine::Models::SdkInternalEvent
2+
SDK_READY = 'SDK_READY'
3+
FLAGS_UPDATED = 'FLAGS_UPDATED'
4+
FLAG_KILLED_NOTIFICATION = 'FLAG_KILLED_NOTIFICATION'
5+
SEGMENTS_UPDATED = 'SEGMENTS_UPDATED'
6+
RB_SEGMENTS_UPDATED = 'RB_SEGMENTS_UPDATED'
7+
LARGE_SEGMENTS_UPDATED = 'LARGE_SEGMENTS_UPDATED'
8+
end
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
# frozen_string_literal: true
2+
3+
require 'spec_helper'
4+
5+
describe SplitIoClient::Engine::Events::EventsManagerConfig do
6+
subject { SplitIoClient::Engine::Events::EventsManagerConfig }
7+
8+
it 'test_build_instance' do
9+
config = subject.new
10+
11+
expect(config.require_all[SplitIoClient::Engine::Models::SdkEvent::SDK_READY].length).to eq(1)
12+
expect(config.require_all[SplitIoClient::Engine::Models::SdkEvent::SDK_READY].include?(SplitIoClient::Engine::Models::SdkInternalEvent::SDK_READY)).to eq(true)
13+
14+
expect(config.prerequisites[SplitIoClient::Engine::Models::SdkEvent::SDK_UPDATE].include?(SplitIoClient::Engine::Models::SdkEvent::SDK_READY)).to eq(true)
15+
16+
expect(config.execution_limits[SplitIoClient::Engine::Models::SdkEvent::SDK_UPDATE]).to eq(-1)
17+
expect(config.execution_limits[SplitIoClient::Engine::Models::SdkEvent::SDK_READY]).to eq(1)
18+
19+
expect(config.require_any[SplitIoClient::Engine::Models::SdkEvent::SDK_UPDATE].length).to eq(4)
20+
expect(config.require_any[SplitIoClient::Engine::Models::SdkEvent::SDK_UPDATE].include?(SplitIoClient::Engine::Models::SdkInternalEvent::FLAG_KILLED_NOTIFICATION)).to be(true)
21+
expect(config.require_any[SplitIoClient::Engine::Models::SdkEvent::SDK_UPDATE].include?(SplitIoClient::Engine::Models::SdkInternalEvent::FLAGS_UPDATED)).to be(true)
22+
expect(config.require_any[SplitIoClient::Engine::Models::SdkEvent::SDK_UPDATE].include?(SplitIoClient::Engine::Models::SdkInternalEvent::RB_SEGMENTS_UPDATED)).to be(true)
23+
expect(config.require_any[SplitIoClient::Engine::Models::SdkEvent::SDK_UPDATE].include?(SplitIoClient::Engine::Models::SdkInternalEvent::SEGMENTS_UPDATED)).to be(true)
24+
25+
order = 0
26+
expect(config.evaluation_order.length).to eq(2)
27+
config.evaluation_order.each do |sdk_event|
28+
order += 1
29+
if order == 1
30+
expect(sdk_event).to eq(SplitIoClient::Engine::Models::SdkEvent::SDK_READY)
31+
end
32+
if order == 2
33+
expect(sdk_event).to eq(SplitIoClient::Engine::Models::SdkEvent::SDK_UPDATE)
34+
end
35+
end
36+
end
37+
end

0 commit comments

Comments
 (0)