feature_flagger 1.0.1 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
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.