Class: Featurevisor::Modules::ModulesManager

Inherits:
Object
  • Object
show all
Defined in:
lib/featurevisor/modules.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

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(options = {})
  @modules = []
  @report_diagnostic = options[:report_diagnostic]
  @module_api_factory = options[:module_api_factory]
  @clear_module_diagnostic_subscriptions = options[:clear_module_diagnostic_subscriptions]

  (options[:modules] || []).each do |mod|
    add(mod)
  end
end

Instance Attribute Details

#modulesObject (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_allObject



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_allObject



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, options)
  @modules.reduce(evaluation) do |result, mod|
    mod.call_after_evaluation(result, options)
  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, options)
  result = @modules.reduce(evaluation) do |current, mod|
    mod.call_after_evaluation(current, options)
  end
  @modules.reduce(result) do |current, mod|
    mod.call_after(current, options)
  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(options)
  @modules.reduce(options) 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(options)
  result = @modules.reduce(options) 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(options)
  bucket_key = options[:bucket_key]
  @modules.each do |mod|
    bucket_key = mod.call_bucket_key(options.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(options)
  bucket_value = options[:bucket_value]
  @modules.each do |mod|
    bucket_value = mod.call_bucket_value(options.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, options)
  @modules.reduce(evaluation) do |result, mod|
    mod.call_after_evaluation(result, options)
  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(options)
  @modules.reduce(options) do |result, mod|
    mod.call_before(result)
  end
end