feature_flagger 0.2.0 → 0.3.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
  SHA1:
3
- metadata.gz: 62073fceeca45388c4bd40ce2a3829766ba0f4d8
4
- data.tar.gz: 7b4b54a2c3167009654572bae7b5f6bac32d2430
3
+ metadata.gz: 2d020c60e2aeb48cafe4af3978c8ce8f54a611b2
4
+ data.tar.gz: 5c9dbb51e79a91c22bfbf153c73ede5d2a891139
5
5
  SHA512:
6
- metadata.gz: b0107beb5008bf298cb25bff915a8aa077ca119bca202985509062276f06e2d4a8632552c37f8e06b0da72f2bbd63a3c7c4c33578fbe9e2ad474fbe5fd3e78f3
7
- data.tar.gz: 392188e411e2017fd906df2eef539af7a52cc82229bddba4280373a548dc8a84cb32263a2072b43cef2849d603a310f901c12abe39eac6313b7cfcaa914c57fb
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 existent rollout key it will raise an error.
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
  ```
@@ -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
- module Control
3
- extend self
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
- FeatureFlagger.redis.sismember(feature_key, resource_id)
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
- FeatureFlagger.redis.sadd(feature_key, resource_id)
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
- FeatureFlagger.redis.srem(feature_key, resource_id)
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
- FeatureFlagger.redis.smembers(feature_key)
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
- Control.rollout?(feature_key, id, resource_name)
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
- Control.release!(feature_key, id, resource_name)
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
- Control.unrelease!(feature_key, id, resource_name)
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
@@ -1,3 +1,3 @@
1
1
  module FeatureFlagger
2
- VERSION = "0.2.0"
2
+ VERSION = "0.3.0"
3
3
  end
@@ -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 redis
24
- redis_conn = @@config[:redis]
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 redis=(conn)
26
+ def storage=(storage)
30
27
  set_config
31
- @@config[:redis] = conn
28
+ @@config[:storage] = storage
32
29
  end
33
30
 
34
- def redis_namespace=(namespace)
31
+ def storage
35
32
  set_config
36
- @@config[:redis_namespace] = namespace
33
+ @@config[:storage]
37
34
  end
38
35
 
39
36
  private
40
37
 
41
38
  def set_config
42
- @@config ||= DEFAULT_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.2.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-28 00:00:00.000000000 Z
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.4.3
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: