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 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: