feature_flagger 0.4.0 → 0.5.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: d29e1d31d6e0908bf08af3e04cb7c5b6bc0b540a
4
- data.tar.gz: 7bf7063dd406d12d78ee8fdd01d4fa3dfcf247c6
3
+ metadata.gz: 434b1224539eeb898620d2ab8955c3e09f9f3050
4
+ data.tar.gz: 9cb1463434d02d535642491ccf47c8c639b054ff
5
5
  SHA512:
6
- metadata.gz: 3f82ebd10dca01517e578cc8d079e70510a3e14aec9fabcc5d839e9e35493e2f5cf7eb7a1a9f40902f0d0d50c81f9af308a193cc831c945b2382916beb0b11e4
7
- data.tar.gz: a32b48b06e4fd065ba013feb7cc9d239ef31824d1f6b919c66eb82ec3dc71e2fa2b499ad03182846aa6ad2a0a568899ec05994947c6af63b1be7aa78edc997c0
6
+ metadata.gz: 0e83beff5c32c024b8e8a032aa1a7d298f36007ce3c7791e04c05deaf500d3d6424bad331e4622cfd5fe6a0570031264038cc9613f7eef564740d0f66a605996
7
+ data.tar.gz: c7994cd5011b0a12650a7a9256862d5b16454a472be4876746eea695fd67b850d70643c35b561dfcbb6aac453f82a3d9663b18fbae187ae0e3514b57a70d4452
data/README.md CHANGED
@@ -60,19 +60,19 @@ end
60
60
  account = Account.first
61
61
 
62
62
  # Release feature for account
63
- account.release!([:email_marketing, :new_email_flow])
63
+ account.release!(:email_marketing, :new_email_flow)
64
64
  #=> true
65
65
 
66
66
  # Check feature for a given account
67
- account.rollout?([:email_marketing, :new_email_flow])
67
+ account.rollout?(:email_marketing, :new_email_flow)
68
68
  #=> true
69
69
 
70
70
  # Remove feature for given account
71
- account.unrelease!([:email_marketing, :new_email_flow])
71
+ account.unrelease!(:email_marketing, :new_email_flow)
72
72
  #=> true
73
73
 
74
74
  # If you try to check an inexistent rollout key it will raise an error.
75
- account.rollout?([:email_marketing, :new_email_flo])
75
+ account.rollout?(:email_marketing, :new_email_flow)
76
76
  FeatureFlagger::KeyNotFoundError: ["account", "email_marketing", "new_email_flo"]
77
77
  ```
78
78
 
@@ -6,32 +6,20 @@ module FeatureFlagger
6
6
  @storage = storage
7
7
  end
8
8
 
9
- def rollout?(feature_key, resource_id, resource_name = nil)
10
- feature_key = rsolv_key(feature_key, resource_name)
9
+ def rollout?(feature_key, resource_id)
11
10
  @storage.has_value?(feature_key, resource_id)
12
11
  end
13
12
 
14
- def release!(feature_key, resource_id, resource_name = nil)
15
- feature_key = rsolv_key(feature_key, resource_name)
13
+ def release!(feature_key, resource_id)
16
14
  @storage.add(feature_key, resource_id)
17
15
  end
18
16
 
19
- def unrelease!(feature_key, resource_id, resource_name = nil)
20
- feature_key = rsolv_key(feature_key, resource_name)
17
+ def unrelease!(feature_key, resource_id)
21
18
  @storage.remove(feature_key, resource_id)
22
19
  end
23
20
 
24
- def resource_ids(feature_key, resource_name = nil)
25
- feature_key = rsolv_key(feature_key, resource_name)
21
+ def resource_ids(feature_key)
26
22
  @storage.all_values(feature_key)
27
23
  end
28
-
29
- private
30
-
31
- def rsolv_key(feature_key, resource_name = nil)
32
- feature_key_arr = Array(feature_key)
33
- feature_key_arr.insert(0, resource_name) unless resource_name.nil?
34
- feature_key_arr.join(':')
35
- end
36
24
  end
37
25
  end
@@ -1,25 +1,33 @@
1
1
  module FeatureFlagger
2
2
  class Feature
3
-
4
- def initialize(key, resource_name = nil)
5
- @key = resource_name.nil? ? key : key.clone.insert(0, resource_name)
6
- @key = Array(@key).collect(&:to_s)
3
+ def initialize(feature_key, resource_name = nil)
4
+ @feature_key = resolve_key(feature_key, resource_name)
7
5
  @doc = FeatureFlagger.config[:info]
8
- end
9
-
10
- def fetch!
11
- @data ||= find_value(@doc, *@key)
12
- raise FeatureFlagger::KeyNotFoundError.new(@key) if @data.nil?
13
- @data
6
+ fetch_data
14
7
  end
15
8
 
16
9
  def description
17
- fetch!
18
10
  @data['description']
19
11
  end
20
12
 
13
+ def key
14
+ @feature_key.join(':')
15
+ end
16
+
21
17
  private
22
18
 
19
+ def resolve_key(feature_key, resource_name)
20
+ key = Array(feature_key).flatten
21
+ key.insert(0, resource_name) if resource_name
22
+ key.map(&:to_s)
23
+ end
24
+
25
+ def fetch_data
26
+ @data ||= find_value(@doc, *@feature_key)
27
+ raise FeatureFlagger::KeyNotFoundError.new(@feature_key) if @data.nil?
28
+ @data
29
+ end
30
+
23
31
  def find_value(hash, key, *tail)
24
32
  value = hash[key]
25
33
 
@@ -29,7 +37,6 @@ module FeatureFlagger
29
37
  find_value(value, *tail)
30
38
  end
31
39
  end
32
-
33
40
  end
34
41
  end
35
42
 
@@ -12,28 +12,29 @@ module FeatureFlagger
12
12
  base.extend ClassMethods
13
13
  end
14
14
 
15
- def rollout?(feature_key)
15
+ def rollout?(*feature_key)
16
16
  resource_name = self.class.rollout_resource_name
17
- Feature.new(feature_key, resource_name).fetch!
18
- FeatureFlagger.control.rollout?(feature_key, id, resource_name)
17
+ feature = Feature.new(feature_key, resource_name)
18
+ FeatureFlagger.control.rollout?(feature.key, id)
19
19
  end
20
20
 
21
- def release!(feature_key)
21
+ def release!(*feature_key)
22
22
  resource_name = self.class.rollout_resource_name
23
- Feature.new(feature_key, resource_name).fetch!
24
- FeatureFlagger.control.release!(feature_key, id, resource_name)
23
+ feature = Feature.new(feature_key, resource_name)
24
+ FeatureFlagger.control.release!(feature.key, id)
25
25
  end
26
26
 
27
- def unrelease!(feature_key)
27
+ def unrelease!(*feature_key)
28
28
  resource_name = self.class.rollout_resource_name
29
- Feature.new(feature_key, resource_name).fetch!
30
- FeatureFlagger.control.unrelease!(feature_key, id, resource_name)
29
+ feature = Feature.new(feature_key, resource_name)
30
+ FeatureFlagger.control.unrelease!(feature.key, id)
31
31
  end
32
32
 
33
33
  module ClassMethods
34
- def all_released_ids_for(feature_key)
35
- Feature.new(feature_key, rollout_resource_name).fetch!
36
- Control.resource_ids(feature_key, rollout_resource_name)
34
+ def all_released_ids_for(*feature_key)
35
+ feature_key.flatten!
36
+ feature = Feature.new(feature_key, rollout_resource_name)
37
+ Control.resource_ids(feature.key)
37
38
  end
38
39
 
39
40
  def rollout_resource_name
@@ -1,3 +1,3 @@
1
1
  module FeatureFlagger
2
- VERSION = "0.4.0"
2
+ VERSION = "0.5.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: 0.4.0
4
+ version: 0.5.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: 2016-09-13 00:00:00.000000000 Z
12
+ date: 2016-09-17 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: redis
@@ -131,9 +131,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
131
131
  version: '0'
132
132
  requirements: []
133
133
  rubyforge_project:
134
- rubygems_version: 2.4.3
134
+ rubygems_version: 2.6.6
135
135
  signing_key:
136
136
  specification_version: 4
137
137
  summary: Partial release your features.
138
138
  test_files: []
139
- has_rdoc: