feature_flagger 0.2.0 → 0.3.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/README.md +2 -2
- data/feature_flagger.gemspec +2 -2
- data/lib/feature_flagger/control.rb +10 -6
- data/lib/feature_flagger/model.rb +3 -3
- data/lib/feature_flagger/storage/redis.rb +32 -0
- data/lib/feature_flagger/version.rb +1 -1
- data/lib/feature_flagger.rb +9 -11
- metadata +6 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2d020c60e2aeb48cafe4af3978c8ce8f54a611b2
|
4
|
+
data.tar.gz: 5c9dbb51e79a91c22bfbf153c73ede5d2a891139
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 58a32906d4c73dc4fc654cbc145eda3a766c871f591c7745403c7ced22e3abf289afe846f5fb355fcdbd3ae5f1c6fd5eec6a96c05204af926c1a10ba3b8d0ce9
|
7
|
+
data.tar.gz: 851bb978b64ccc502dc999055b824eee2fa75ff1c3d58e33af01bde6e20e4f0dcbcb4a75aa273066405feeda9e9b125f6537a244e2754bad8c17f6354d9b1454
|
data/README.md
CHANGED
@@ -24,7 +24,7 @@ Or install it yourself as:
|
|
24
24
|
1. Configure redis by adding `config/initializers/feature_flagger.rb`:
|
25
25
|
```ruby
|
26
26
|
FeatureFlagger.configure do |config|
|
27
|
-
config.redis = $redis
|
27
|
+
config.storage.redis = $redis
|
28
28
|
end
|
29
29
|
```
|
30
30
|
|
@@ -62,7 +62,7 @@ account.rollout?([:email_marketing, :new_email_flow])
|
|
62
62
|
account.unrelease!([:email_marketing, :new_email_flow])
|
63
63
|
#=> true
|
64
64
|
|
65
|
-
# If you try to check an
|
65
|
+
# If you try to check an inexistent rollout key it will raise an error.
|
66
66
|
account.rollout?([:email_marketing, :new_email_flo])
|
67
67
|
FeatureFlagger::KeyNotFoundError: ["account", "email_marketing", "new_email_flo"]
|
68
68
|
```
|
data/feature_flagger.gemspec
CHANGED
@@ -6,8 +6,8 @@ require 'feature_flagger/version'
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
7
|
spec.name = "feature_flagger"
|
8
8
|
spec.version = FeatureFlagger::VERSION
|
9
|
-
spec.authors = ["Nando Sousa"]
|
10
|
-
spec.email = ["nandosousafr@gmail.com"]
|
9
|
+
spec.authors = ["Nando Sousa", "Geison Biazus"]
|
10
|
+
spec.email = ["nandosousafr@gmail.com", "geisonbiazus@gmail.com"]
|
11
11
|
spec.licenses = ['MIT']
|
12
12
|
|
13
13
|
spec.summary = %q{Partial release your features.}
|
@@ -1,25 +1,29 @@
|
|
1
1
|
module FeatureFlagger
|
2
|
-
|
3
|
-
|
2
|
+
class Control
|
3
|
+
attr_reader :storage
|
4
|
+
|
5
|
+
def initialize(storage)
|
6
|
+
@storage = storage
|
7
|
+
end
|
4
8
|
|
5
9
|
def rollout?(feature_key, resource_id, resource_name = nil)
|
6
10
|
feature_key = rsolv_key(feature_key, resource_name)
|
7
|
-
|
11
|
+
@storage.has_value?(feature_key, resource_id)
|
8
12
|
end
|
9
13
|
|
10
14
|
def release!(feature_key, resource_id, resource_name = nil)
|
11
15
|
feature_key = rsolv_key(feature_key, resource_name)
|
12
|
-
|
16
|
+
@storage.add(feature_key, resource_id)
|
13
17
|
end
|
14
18
|
|
15
19
|
def unrelease!(feature_key, resource_id, resource_name = nil)
|
16
20
|
feature_key = rsolv_key(feature_key, resource_name)
|
17
|
-
|
21
|
+
@storage.remove(feature_key, resource_id)
|
18
22
|
end
|
19
23
|
|
20
24
|
def resource_ids(feature_key, resource_name = nil)
|
21
25
|
feature_key = rsolv_key(feature_key, resource_name)
|
22
|
-
|
26
|
+
@storage.all_values(feature_key)
|
23
27
|
end
|
24
28
|
|
25
29
|
private
|
@@ -15,19 +15,19 @@ module FeatureFlagger
|
|
15
15
|
def rollout?(feature_key)
|
16
16
|
resource_name = self.class.rollout_resource_name
|
17
17
|
Feature.new(feature_key, resource_name).fetch!
|
18
|
-
|
18
|
+
FeatureFlagger.control.rollout?(feature_key, id, resource_name)
|
19
19
|
end
|
20
20
|
|
21
21
|
def release!(feature_key)
|
22
22
|
resource_name = self.class.rollout_resource_name
|
23
23
|
Feature.new(feature_key, resource_name).fetch!
|
24
|
-
|
24
|
+
FeatureFlagger.control.release!(feature_key, id, resource_name)
|
25
25
|
end
|
26
26
|
|
27
27
|
def unrelease!(feature_key)
|
28
28
|
resource_name = self.class.rollout_resource_name
|
29
29
|
Feature.new(feature_key, resource_name).fetch!
|
30
|
-
|
30
|
+
FeatureFlagger.control.unrelease!(feature_key, id, resource_name)
|
31
31
|
end
|
32
32
|
|
33
33
|
module ClassMethods
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module FeatureFlagger
|
2
|
+
module Storage
|
3
|
+
class Redis
|
4
|
+
DEFAULT_NAMESPACE = :feature_flagger
|
5
|
+
|
6
|
+
attr_writer :redis
|
7
|
+
|
8
|
+
def redis
|
9
|
+
@redis ||= begin
|
10
|
+
client = ::Redis.new(url: ENV['REDIS_URL'])
|
11
|
+
::Redis::Namespace.new(DEFAULT_NAMESPACE, redis: client)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def has_value?(key, value)
|
16
|
+
redis.sismember(key, value)
|
17
|
+
end
|
18
|
+
|
19
|
+
def add(key, value)
|
20
|
+
redis.sadd(key, value)
|
21
|
+
end
|
22
|
+
|
23
|
+
def remove(key, value)
|
24
|
+
redis.srem(key, value)
|
25
|
+
end
|
26
|
+
|
27
|
+
def all_values(key)
|
28
|
+
redis.smembers(key)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
data/lib/feature_flagger.rb
CHANGED
@@ -2,13 +2,12 @@ require 'yaml'
|
|
2
2
|
require 'redis-namespace'
|
3
3
|
|
4
4
|
require 'feature_flagger/version'
|
5
|
+
require 'feature_flagger/storage/redis'
|
5
6
|
require 'feature_flagger/control'
|
6
7
|
require 'feature_flagger/model'
|
7
8
|
require 'feature_flagger/feature'
|
8
9
|
|
9
10
|
module FeatureFlagger
|
10
|
-
DEFAULT_CONFIG = { redis_namespace: 'rollout-control' }
|
11
|
-
|
12
11
|
class << self
|
13
12
|
def configure(&block)
|
14
13
|
set_config
|
@@ -20,26 +19,25 @@ module FeatureFlagger
|
|
20
19
|
@@config
|
21
20
|
end
|
22
21
|
|
23
|
-
def
|
24
|
-
|
25
|
-
namespace = @@config[:redis_namespace]
|
26
|
-
@@redis ||= Redis::Namespace.new(namespace, redis: redis_conn)
|
22
|
+
def control
|
23
|
+
@@control ||= Control.new(storage)
|
27
24
|
end
|
28
25
|
|
29
|
-
def
|
26
|
+
def storage=(storage)
|
30
27
|
set_config
|
31
|
-
@@config[:
|
28
|
+
@@config[:storage] = storage
|
32
29
|
end
|
33
30
|
|
34
|
-
def
|
31
|
+
def storage
|
35
32
|
set_config
|
36
|
-
@@config[:
|
33
|
+
@@config[:storage]
|
37
34
|
end
|
38
35
|
|
39
36
|
private
|
40
37
|
|
41
38
|
def set_config
|
42
|
-
@@config ||=
|
39
|
+
@@config ||= {}
|
40
|
+
@@config[:storage] ||= Storage::Redis.new
|
43
41
|
|
44
42
|
# TODO: Provide a Rake to generate initial YAML file
|
45
43
|
# for new projects.
|
metadata
CHANGED
@@ -1,14 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: feature_flagger
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nando Sousa
|
8
|
+
- Geison Biazus
|
8
9
|
autorequire:
|
9
10
|
bindir: exe
|
10
11
|
cert_chain: []
|
11
|
-
date: 2016-08-
|
12
|
+
date: 2016-08-31 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
15
|
name: redis-namespace
|
@@ -69,6 +70,7 @@ dependencies:
|
|
69
70
|
description: Management tool to make it easier rollouting features to customers.
|
70
71
|
email:
|
71
72
|
- nandosousafr@gmail.com
|
73
|
+
- geisonbiazus@gmail.com
|
72
74
|
executables: []
|
73
75
|
extensions: []
|
74
76
|
extra_rdoc_files: []
|
@@ -87,6 +89,7 @@ files:
|
|
87
89
|
- lib/feature_flagger/control.rb
|
88
90
|
- lib/feature_flagger/feature.rb
|
89
91
|
- lib/feature_flagger/model.rb
|
92
|
+
- lib/feature_flagger/storage/redis.rb
|
90
93
|
- lib/feature_flagger/version.rb
|
91
94
|
homepage: http://github.com/ResultadosDigitais/feature_flagger
|
92
95
|
licenses:
|
@@ -108,9 +111,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
108
111
|
version: '0'
|
109
112
|
requirements: []
|
110
113
|
rubyforge_project:
|
111
|
-
rubygems_version: 2.
|
114
|
+
rubygems_version: 2.6.6
|
112
115
|
signing_key:
|
113
116
|
specification_version: 4
|
114
117
|
summary: Partial release your features.
|
115
118
|
test_files: []
|
116
|
-
has_rdoc:
|