class Kameleoon::Configuration::DataFile
def any_targeted_delivery_rule?
def any_targeted_delivery_rule? @feature_flags.any? { |_, ff| ff.environment_enabled && ff.rules.any?(&:targeted_delivery_type?) } end
def collect_indices
def collect_indices @feature_flag_by_id = {} @rule_by_segment_id = {} @variation_by_id = {} @experiment_ids_with_js_css_variable = Set.new @feature_flags.each_value do |feature_flag| @feature_flag_by_id[feature_flag.id] = feature_flag next if feature_flag.rules.nil? has_feature_flag_variable_js_css = feature_flag_variable_js_css?(feature_flag) feature_flag.rules.each do |rule| @rule_by_segment_id[rule.segment_id] = rule rule.variation_by_exposition.each do |variation| @variation_by_id[variation.variation_id] = variation end @experiment_ids_with_js_css_variable.add(rule.experiment_id) if has_feature_flag_variable_js_css end end @feature_flag_by_id.freeze @rule_by_segment_id.freeze @variation_by_id.freeze @experiment_ids_with_js_css_variable.freeze end
def experiment_js_css_variable?(experiment_id)
def experiment_js_css_variable?(experiment_id) @experiment_ids_with_js_css_variable.include?(experiment_id) end
def feature_flag_variable_js_css?(feature_flag)
def feature_flag_variable_js_css?(feature_flag) feature_flag.variations.first&.variables&.any? do |variable| %w[JS CSS].include?(variable.type) end end
def get_feature_flag(feature_key)
def get_feature_flag(feature_key) ff = @feature_flags[feature_key] raise Exception::FeatureNotFound, feature_key if ff.nil? raise Exception::FeatureEnvironmentDisabled.new(feature_key, @environment) unless ff.environment_enabled ff end
def init(configuration)
def init(configuration) Logging::KameleoonLogger.debug('CALL: DataFile.init(configuration: %s)', configuration) @settings = Settings.new(configuration['configuration']) @feature_flags = {} configuration['featureFlags'].each do |raw| ff = FeatureFlag.new(raw) @feature_flags[ff.feature_key] = ff end @has_any_targeted_delivery_rule = any_targeted_delivery_rule? @custom_data_info = CustomDataInfo.new(configuration['customData']) Logging::KameleoonLogger.debug('RETURN: DataFile.init(configuration: %s)', configuration) end
def init_default
def init_default Logging::KameleoonLogger.debug('CALL: DataFile.init_default') @settings = Settings.new @feature_flags = {} @has_any_targeted_delivery_rule = false @custom_data_info = Kameleoon::Configuration::CustomDataInfo.new(nil) Logging::KameleoonLogger.debug('RETURN: DataFile.init_default') end
def initialize(environment, configuration = nil)
def initialize(environment, configuration = nil) Logging::KameleoonLogger.debug('CALL: DataFile.new(environment: %s)', environment) @environment = environment if configuration.nil? init_default else init(configuration) end collect_indices Logging::KameleoonLogger.debug('RETURN: DataFile.new(environment: %s)', environment) end
def to_s
def to_s 'DataFile{' \ "environment:#{@environment}," \ "feature_flags:#{@feature_flags.size}," \ "settings:#{@settings}" \ '}' end