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_modules(evaluation, options) ⇒ Object
- #run_before_modules(options) ⇒ Object
- #run_bucket_key_modules(options) ⇒ Object
- #run_bucket_value_modules(options) ⇒ Object
Constructor Details
#initialize(options = {}) ⇒ ModulesManager
Returns a new instance of ModulesManager.
58 59 60 61 62 63 64 65 66 67 |
# File 'lib/featurevisor/modules.rb', line 58 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.
56 57 58 |
# File 'lib/featurevisor/modules.rb', line 56 def modules @modules end |
Instance Method Details
#add(mod) ⇒ Object
69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 |
# File 'lib/featurevisor/modules.rb', line 69 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
154 155 156 157 158 159 160 |
# File 'lib/featurevisor/modules.rb', line 154 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
122 123 124 |
# File 'lib/featurevisor/modules.rb', line 122 def get_all @modules end |
#remove(name_or_module) ⇒ Object
108 109 110 111 112 113 114 115 116 117 118 119 120 |
# File 'lib/featurevisor/modules.rb', line 108 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_modules(evaluation, options) ⇒ Object
148 149 150 151 152 |
# File 'lib/featurevisor/modules.rb', line 148 def run_after_modules(evaluation, ) @modules.reduce(evaluation) do |result, mod| mod.call_after(result, ) end end |
#run_before_modules(options) ⇒ Object
126 127 128 129 130 |
# File 'lib/featurevisor/modules.rb', line 126 def run_before_modules() @modules.reduce() do |result, mod| mod.call_before(result) end end |
#run_bucket_key_modules(options) ⇒ Object
132 133 134 135 136 137 138 |
# File 'lib/featurevisor/modules.rb', line 132 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
140 141 142 143 144 145 146 |
# File 'lib/featurevisor/modules.rb', line 140 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 |