Module: FeatureFlagger::Model::ClassMethods

Defined in:
lib/feature_flagger/model.rb

Instance Method Summary collapse

Instance Method Details

#all_released_ids_for(*feature_key) ⇒ Object



41
42
43
44
45
# File 'lib/feature_flagger/model.rb', line 41

def all_released_ids_for(*feature_key)
  feature_key.flatten!
  feature = Feature.new(feature_key, rollout_resource_name)
  FeatureFlagger.control.resource_ids(feature.key)
end

#cleanup_detached(*feature_key) ⇒ Object



72
73
74
75
76
77
# File 'lib/feature_flagger/model.rb', line 72

def cleanup_detached(*feature_key)
  complete_feature_key = feature_key.map(&:to_s).insert(0, rollout_resource_name)
  key_value = FeatureFlagger.config.info.dig(*complete_feature_key)
  raise "key is still mapped" if key_value
  FeatureFlagger.control.unrelease_to_all(complete_feature_key.join(':'))
end

#detached_feature_keysObject



66
67
68
69
70
# File 'lib/feature_flagger/model.rb', line 66

def detached_feature_keys
  persisted_features = FeatureFlagger.control.search_keys("#{rollout_resource_name}:*").to_a
  mapped_feature_keys = FeatureFlagger.config.mapped_feature_keys(rollout_resource_name)
  (persisted_features - mapped_feature_keys).map { |key| key.sub("#{rollout_resource_name}:",'') }
end

#release_id(resource_id, *feature_key) ⇒ Object



36
37
38
39
# File 'lib/feature_flagger/model.rb', line 36

def release_id(resource_id, *feature_key)
  feature = Feature.new(feature_key, rollout_resource_name)
  FeatureFlagger.control.release(feature.key, resource_id)
end

#release_to_all(*feature_key) ⇒ Object



47
48
49
50
# File 'lib/feature_flagger/model.rb', line 47

def release_to_all(*feature_key)
  feature = Feature.new(feature_key, rollout_resource_name)
  FeatureFlagger.control.release_to_all(feature.key)
end

#released_features_to_allObject



57
58
59
# File 'lib/feature_flagger/model.rb', line 57

def released_features_to_all
  FeatureFlagger.control.released_features_to_all
end

#released_id?(resource_id, *feature_key) ⇒ Boolean

Returns:

  • (Boolean)


31
32
33
34
# File 'lib/feature_flagger/model.rb', line 31

def released_id?(resource_id, *feature_key)
  feature = Feature.new(feature_key, rollout_resource_name)
  FeatureFlagger.control.released?(feature.key, resource_id)
end

#released_to_all?(*feature_key) ⇒ Boolean

Returns:

  • (Boolean)


61
62
63
64
# File 'lib/feature_flagger/model.rb', line 61

def released_to_all?(*feature_key)
  feature = Feature.new(feature_key, rollout_resource_name)
  FeatureFlagger.control.released_to_all?(feature.key)
end

#rollout_resource_nameObject



79
80
81
82
83
84
85
86
87
# File 'lib/feature_flagger/model.rb', line 79

def rollout_resource_name
  klass_name = self.to_s
  klass_name.gsub!(/::/, '_')
  klass_name.gsub!(/([A-Z\d]+)([A-Z][a-z])/,'\1_\2')
  klass_name.gsub!(/([a-z\d])([A-Z])/,'\1_\2')
  klass_name.tr!("-", "_")
  klass_name.downcase!
  klass_name
end

#unrelease_to_all(*feature_key) ⇒ Object



52
53
54
55
# File 'lib/feature_flagger/model.rb', line 52

def unrelease_to_all(*feature_key)
  feature = Feature.new(feature_key, rollout_resource_name)
  FeatureFlagger.control.unrelease_to_all(feature.key)
end