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
0 commit comments