Class: Featurevisor::Modules::ModulesManager
- Inherits:
-
Object
- Object
- Featurevisor::Modules::ModulesManager
- Defined in:
- lib/featurevisor/modules.rb
Instance Attribute Summary collapse
-
#modules ⇒ Object
readonly
Returns the value of attribute modules.
Instance Method Summary collapse
- #add(mod) ⇒ Object
- #close_all ⇒ Object
- #get_all ⇒ Object
-
#initialize(options = {}) ⇒ ModulesManager
constructor
A new instance of ModulesManager.
- #remove(name_or_module) ⇒ Object
- #run_after_evaluation_modules(evaluation, options) ⇒ Object
- #run_after_modules(evaluation, options) ⇒ Object
- #run_before_evaluation_modules(options) ⇒ Object
- #run_before_modules(options) ⇒ Object
- #run_bucket_key_modules(options) ⇒ Object
- #run_bucket_value_modules(options) ⇒ Object
-
#run_global_after_modules(evaluation, options) ⇒ Object
Deprecated feature-only callbacks are intentionally excluded here.
- #run_legacy_before_modules(options) ⇒ Object
Constructor Details
#initialize(options = {}) ⇒ ModulesManager
Returns a new instance of ModulesManager.
72 73 74 75 76 77 78 79 80 81 |
# File 'lib/featurevisor/modules.rb', line 72 def initialize( = {}) @modules = [] @report_diagnostic = [:report_diagnostic] @module_api_factory = [:module_api_factory] @clear_module_diagnostic_subscriptions = [:clear_module_diagnostic_subscriptions] ([:modules] || []).each do |mod| add(mod) end end |
Instance Attribute Details
#modules ⇒ Object (readonly)
Returns the value of attribute modules.
70 71 72 |
# File 'lib/featurevisor/modules.rb', line 70 def modules @modules end |
Instance Method Details
#add(mod) ⇒ Object
83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 |
# File 'lib/featurevisor/modules.rb', line 83 def add(mod) mod = FeaturevisorModule.new(mod) if mod.is_a?(Hash) return nil unless mod if mod.name && !mod.name.to_s.empty? && @modules.any? { |existing| existing.name == mod.name } report( { level: "error", code: "duplicate_module", message: "Duplicate module name", module_name: mod.name }, nil ) return nil end begin mod.call_setup(@module_api_factory.call(mod)) if @module_api_factory rescue => e @clear_module_diagnostic_subscriptions.call(mod) if @clear_module_diagnostic_subscriptions report( { level: "error", code: "module_setup_error", message: "Module setup failed", module_name: mod.name, original_error: e }, nil ) close_module(mod) return nil end @modules << mod -> { remove(mod) } end |
#close_all ⇒ Object
199 200 201 202 203 204 205 |
# File 'lib/featurevisor/modules.rb', line 199 def close_all @modules.each do |mod| @clear_module_diagnostic_subscriptions.call(mod) if @clear_module_diagnostic_subscriptions close_module(mod) end @modules = [] end |
#get_all ⇒ Object
136 137 138 |
# File 'lib/featurevisor/modules.rb', line 136 def get_all @modules end |
#remove(name_or_module) ⇒ Object
122 123 124 125 126 127 128 129 130 131 132 133 134 |
# File 'lib/featurevisor/modules.rb', line 122 def remove(name_or_module) removed = [] @modules = @modules.reject do |mod| matches = name_or_module.equal?(mod) || mod.name == name_or_module removed << mod if matches matches end removed.each do |mod| @clear_module_diagnostic_subscriptions.call(mod) if @clear_module_diagnostic_subscriptions close_module(mod) end end |
#run_after_evaluation_modules(evaluation, options) ⇒ Object
155 156 157 158 159 |
# File 'lib/featurevisor/modules.rb', line 155 def run_after_evaluation_modules(evaluation, ) @modules.reduce(evaluation) do |result, mod| mod.call_after_evaluation(result, ) end end |
#run_after_modules(evaluation, options) ⇒ Object
161 162 163 164 165 166 167 168 |
# File 'lib/featurevisor/modules.rb', line 161 def run_after_modules(evaluation, ) result = @modules.reduce(evaluation) do |current, mod| mod.call_after_evaluation(current, ) end @modules.reduce(result) do |current, mod| mod.call_after(current, ) end end |
#run_before_evaluation_modules(options) ⇒ Object
149 150 151 152 153 |
# File 'lib/featurevisor/modules.rb', line 149 def run_before_evaluation_modules() @modules.reduce() do |result, mod| mod.call_before_evaluation(result) end end |
#run_before_modules(options) ⇒ Object
140 141 142 143 144 145 146 147 |
# File 'lib/featurevisor/modules.rb', line 140 def run_before_modules() result = @modules.reduce() do |current, mod| mod.call_before(current) end @modules.reduce(result) do |current, mod| mod.call_before_evaluation(current) end end |
#run_bucket_key_modules(options) ⇒ Object
183 184 185 186 187 188 189 |
# File 'lib/featurevisor/modules.rb', line 183 def run_bucket_key_modules() bucket_key = [:bucket_key] @modules.each do |mod| bucket_key = mod.call_bucket_key(.merge(bucket_key: bucket_key)) end bucket_key end |
#run_bucket_value_modules(options) ⇒ Object
191 192 193 194 195 196 197 |
# File 'lib/featurevisor/modules.rb', line 191 def run_bucket_value_modules() bucket_value = [:bucket_value] @modules.each do |mod| bucket_value = mod.call_bucket_value(.merge(bucket_value: bucket_value)) end bucket_value end |
#run_global_after_modules(evaluation, options) ⇒ Object
Deprecated feature-only callbacks are intentionally excluded here.
171 172 173 174 175 |
# File 'lib/featurevisor/modules.rb', line 171 def run_global_after_modules(evaluation, ) @modules.reduce(evaluation) do |result, mod| mod.call_after_evaluation(result, ) end end |
#run_legacy_before_modules(options) ⇒ Object
177 178 179 180 181 |
# File 'lib/featurevisor/modules.rb', line 177 def run_legacy_before_modules() @modules.reduce() do |result, mod| mod.call_before(result) end end |