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 +4 -4
- data/lib/feature_flagger.rb +1 -0
- data/lib/feature_flagger/model.rb +32 -10
- data/lib/feature_flagger/model_settings.rb +36 -0
- data/lib/feature_flagger/version.rb +1 -1
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b54bc71d733eb04b2e52156763557a45f94d9722918b12b09e89a07553b88ee4
|
4
|
+
data.tar.gz: 5984d522ae2d19f324de342db5810cd9bf351c43a9e60e159f8442209f38575f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ece7587ed9528ca583e61645bc3e5e9fcb710f37308ebbc8bb278390966e8edec6e8dc0a282fbb5864893623da631a1d4f3bffc0876dd484d3523e8008c90c11
|
7
|
+
data.tar.gz: 9ccdf791f1c7b6c5f10674753ecfbbfb81b4fa69546057e8061b8c0c269c347999503cb4fc868a215073e70cd6b8cb1382c39bcccfb8c11a0fcd2a346601f82d
|
data/lib/feature_flagger.rb
CHANGED
@@ -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?(
|
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(
|
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.
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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
|
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
|
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-
|
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
|
-
|
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.
|