feature_flagger 1.0.1 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1e6648b809fb71f619b7f183de45faff5c8f7e180b716bb7ed4f41178b9b6a7b
4
- data.tar.gz: ba3ec6da4184d199d2a74e360fcb789fd2ac9aeb95dea738de7dc650129f6369
3
+ metadata.gz: b54bc71d733eb04b2e52156763557a45f94d9722918b12b09e89a07553b88ee4
4
+ data.tar.gz: 5984d522ae2d19f324de342db5810cd9bf351c43a9e60e159f8442209f38575f
5
5
  SHA512:
6
- metadata.gz: 196c76cad916494a7bb3438a69a4ddfe4dbc3a1efc6584078f4eee681c7dc9d3e53ece3e37796aed9d4e4d865602cf12deb4e165f1fc3a62f43eee0f5f71878f
7
- data.tar.gz: 7b81c8fd3679000af48b11f05996155962215928d14c28cd841b0874bbf19ce09d1aa6149e7831f4de69e11ce09cad94daf8837ae94a2387173bb20c5f38c198
6
+ metadata.gz: ece7587ed9528ca583e61645bc3e5e9fcb710f37308ebbc8bb278390966e8edec6e8dc0a282fbb5864893623da631a1d4f3bffc0876dd484d3523e8008c90c11
7
+ data.tar.gz: 9ccdf791f1c7b6c5f10674753ecfbbfb81b4fa69546057e8061b8c0c269c347999503cb4fc868a215073e70cd6b8cb1382c39bcccfb8c11a0fcd2a346601f82d
@@ -4,6 +4,7 @@ require 'feature_flagger/version'
4
4
  require 'feature_flagger/storage/redis'
5
5
  require 'feature_flagger/control'
6
6
  require 'feature_flagger/model'
7
+ require 'feature_flagger/model_settings'
7
8
  require 'feature_flagger/feature'
8
9
  require 'feature_flagger/configuration'
9
10
  require 'feature_flagger/manager'
@@ -13,44 +13,54 @@ module FeatureFlagger
13
13
  end
14
14
 
15
15
  def released?(*feature_key)
16
- self.class.released_id?(id, feature_key)
16
+ self.class.released_id?(feature_flagger_identifier, feature_key)
17
17
  end
18
18
 
19
19
  def release(*feature_key)
20
- self.class.release_id(id, *feature_key)
20
+ self.class.release_id(feature_flagger_identifier, *feature_key)
21
21
  end
22
22
 
23
23
  def unrelease(*feature_key)
24
- resource_name = self.class.rollout_resource_name
24
+ resource_name = self.class.feature_flagger_model_settings.entity_name
25
25
  feature = Feature.new(feature_key, resource_name)
26
26
  FeatureFlagger.control.unrelease(feature.key, id)
27
27
  end
28
28
 
29
+ private
30
+
31
+ def feature_flagger_identifier
32
+ public_send(self.class.feature_flagger_model_settings.identifier_field)
33
+ end
34
+
29
35
  module ClassMethods
36
+ def feature_flagger
37
+ raise ArgumentError unless block_given?
38
+ yield feature_flagger_model_settings
39
+ end
30
40
 
31
41
  def released_id?(resource_id, *feature_key)
32
- feature = Feature.new(feature_key, rollout_resource_name)
42
+ feature = Feature.new(feature_key, feature_flagger_model_settings.entity_name)
33
43
  FeatureFlagger.control.released?(feature.key, resource_id)
34
44
  end
35
45
 
36
46
  def release_id(resource_id, *feature_key)
37
- feature = Feature.new(feature_key, rollout_resource_name)
47
+ feature = Feature.new(feature_key, feature_flagger_model_settings.entity_name)
38
48
  FeatureFlagger.control.release(feature.key, resource_id)
39
49
  end
40
50
 
41
51
  def all_released_ids_for(*feature_key)
42
52
  feature_key.flatten!
43
- feature = Feature.new(feature_key, rollout_resource_name)
53
+ feature = Feature.new(feature_key, feature_flagger_model_settings.entity_name)
44
54
  FeatureFlagger.control.resource_ids(feature.key)
45
55
  end
46
56
 
47
57
  def release_to_all(*feature_key)
48
- feature = Feature.new(feature_key, rollout_resource_name)
58
+ feature = Feature.new(feature_key, feature_flagger_model_settings.entity_name)
49
59
  FeatureFlagger.control.release_to_all(feature.key)
50
60
  end
51
61
 
52
62
  def unrelease_to_all(*feature_key)
53
- feature = Feature.new(feature_key, rollout_resource_name)
63
+ feature = Feature.new(feature_key, feature_flagger_model_settings.entity_name)
54
64
  FeatureFlagger.control.unrelease_to_all(feature.key)
55
65
  end
56
66
 
@@ -59,18 +69,19 @@ module FeatureFlagger
59
69
  end
60
70
 
61
71
  def released_to_all?(*feature_key)
62
- feature = Feature.new(feature_key, rollout_resource_name)
72
+ feature = Feature.new(feature_key, feature_flagger_model_settings.entity_name)
63
73
  FeatureFlagger.control.released_to_all?(feature.key)
64
74
  end
65
75
 
66
76
  def detached_feature_keys
77
+ rollout_resource_name = feature_flagger_model_settings.entity_name
67
78
  persisted_features = FeatureFlagger.control.search_keys("#{rollout_resource_name}:*").to_a
68
79
  mapped_feature_keys = FeatureFlagger.config.mapped_feature_keys(rollout_resource_name)
69
80
  (persisted_features - mapped_feature_keys).map { |key| key.sub("#{rollout_resource_name}:",'') }
70
81
  end
71
82
 
72
83
  def cleanup_detached(*feature_key)
73
- complete_feature_key = feature_key.map(&:to_s).insert(0, rollout_resource_name)
84
+ complete_feature_key = feature_key.map(&:to_s).insert(0, feature_flagger_model_settings.entity_name)
74
85
  key_value = FeatureFlagger.config.info.dig(*complete_feature_key)
75
86
  raise "key is still mapped" if key_value
76
87
  FeatureFlagger.control.unrelease_to_all(complete_feature_key.join(':'))
@@ -85,6 +96,17 @@ module FeatureFlagger
85
96
  klass_name.downcase!
86
97
  klass_name
87
98
  end
99
+
100
+ def feature_flagger_model_settings
101
+ @feature_flagger_model_settings ||= FeatureFlagger::ModelSettings.new(
102
+ identifier_field: :id,
103
+ entity_name: rollout_resource_name
104
+ )
105
+ end
106
+
107
+ def feature_flagger_identifier
108
+ public_send(feature_flagger_model_settings.identifier_field)
109
+ end
88
110
  end
89
111
  end
90
112
  end
@@ -0,0 +1,36 @@
1
+ module FeatureFlagger
2
+ class ModelSettings
3
+ def initialize(arguments)
4
+ arguments.each do |field, value|
5
+ self.public_send("#{field}=", value)
6
+ end
7
+ end
8
+
9
+ # Public: identifier_field Refers to which field must represent the unique model
10
+ # id.
11
+ attr_accessor :identifier_field
12
+
13
+ # Public: entity_name to which entity the model is targeting.
14
+ # Take this yaml file as example:
15
+ #
16
+ # account:
17
+ # email_marketing:
18
+ # whitelabel:
19
+ # description: a rollout
20
+ # owner: core
21
+ # account_in_migration:
22
+ # email_marketing:
23
+ # whitelabel:
24
+ # description: a rollout
25
+ # owner: core
26
+ #
27
+ # class Account < ActiveRecord::Base
28
+ # include FeatureFlagger::Model
29
+ #
30
+ # feature_flagger do |config|
31
+ # config.identifier_field = :cdp_tenant_id
32
+ # config.entity_name = :account_in_migration
33
+ # end
34
+ attr_accessor :entity_name
35
+ end
36
+ end
@@ -1,3 +1,3 @@
1
1
  module FeatureFlagger
2
- VERSION = "1.0.1"
2
+ VERSION = "1.1.0"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: feature_flagger
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nando Sousa
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2019-08-09 00:00:00.000000000 Z
12
+ date: 2019-10-14 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: redis
@@ -111,6 +111,7 @@ files:
111
111
  - lib/feature_flagger/feature.rb
112
112
  - lib/feature_flagger/manager.rb
113
113
  - lib/feature_flagger/model.rb
114
+ - lib/feature_flagger/model_settings.rb
114
115
  - lib/feature_flagger/railtie.rb
115
116
  - lib/feature_flagger/storage/redis.rb
116
117
  - lib/feature_flagger/version.rb
@@ -134,7 +135,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
134
135
  - !ruby/object:Gem::Version
135
136
  version: 2.0.0
136
137
  requirements: []
137
- rubygems_version: 3.0.3
138
+ rubyforge_project:
139
+ rubygems_version: 2.7.9
138
140
  signing_key:
139
141
  specification_version: 4
140
142
  summary: Partial release your features.