feature_flagger 0.4.0 → 0.5.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: 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: