feature_cop 0.1.4 → 0.2.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: 744428c79e0913d8fc57735d3ac47b7db45a83bc
4
- data.tar.gz: 266f69efb8d0da96821510f7240ee4eceac4912a
3
+ metadata.gz: e64328ea3e26327deed78d769835ef6e42e79c88
4
+ data.tar.gz: 9fe68fe7b951160df830506f39cb387f5b0ddcc5
5
5
  SHA512:
6
- metadata.gz: f6315bcb3c3810d6deeae7bf1c09e7ef8061af45a144626f51635830cbf2b9e1b58ee65fbca210e6d357d1f140ad9e996c2d8aafe5ffdfa62ab72881ef95356c
7
- data.tar.gz: d741f509668cd5f009dd1f75555342e505908ddedf6385a10b85252aa66374b9d33a3907c1eeac9f9c943bb14d3361e7e203363cbd44db6de142b48684e610e2
6
+ metadata.gz: e8c81a16efe3790b2de4357ea07389db1fe40a68eca74939b75e7e9ca83f475b36835651e03c076cdf14448b0689200ff2ff0f4e4a432a423cd7fbfabb97bca2
7
+ data.tar.gz: c8f2cee524a7b19c38997b688d6436ef46ebd2a35c32b56970dbb746157d6b6ec3db1172e8e4f1603cacf89d5c95bca4e52e021efcc086858d63c98a56439262
data/feature_cop.gemspec CHANGED
@@ -14,13 +14,15 @@ Gem::Specification.new do |spec|
14
14
  spec.homepage = "http://www.github.com/nuvi/feature_cop"
15
15
  spec.license = "MIT"
16
16
 
17
+ spec.required_ruby_version = '> 2.0.0'
18
+
17
19
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
18
20
  spec.bindir = "exe"
19
21
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
22
  spec.require_paths = ["lib"]
21
23
 
22
24
  spec.add_dependency 'activesupport', '~> 4.2'
23
- spec.add_development_dependency "bundler", "~> 1.11"
25
+ spec.add_development_dependency "bundler", "~> 1.9"
24
26
  spec.add_development_dependency "rake", "~> 10.0"
25
27
  spec.add_development_dependency "minitest", "~> 5.0"
26
28
  end
data/lib/feature_cop.rb CHANGED
@@ -5,6 +5,8 @@ require "feature_cop/version"
5
5
  require "feature_cop/enumerable_extensions"
6
6
  require "feature_cop/whitelist"
7
7
  require "feature_cop/blacklist"
8
+ require "feature_cop/sampling"
9
+ require "feature_cop/toggle"
8
10
  require "json"
9
11
  require "yaml"
10
12
 
@@ -13,19 +15,13 @@ require "yaml"
13
15
  module FeatureCop
14
16
  include FeatureCop::Whitelist
15
17
  include FeatureCop::Blacklist
18
+ include FeatureCop::Sampling
19
+ include FeatureCop::Toggle
16
20
 
17
- def self.allows?(feature, identifier = nil, opts = {})
21
+ def self.allows?(feature, identifier = nil, options = {})
18
22
  feature_status = ENV["#{feature.to_s.upcase}"]
19
23
  return false if feature_status.nil?
20
- self.method(feature_status.downcase).call(identifier)
21
- end
22
-
23
- def self.enabled(identifier)
24
- true
25
- end
26
-
27
- def self.disabled(identifier)
28
- false
24
+ self.method(feature_status.downcase).call(feature.to_s, identifier.to_s, options)
29
25
  end
30
26
 
31
27
  def self.env
@@ -40,24 +36,6 @@ module FeatureCop
40
36
  @features = self.set_features
41
37
  end
42
38
 
43
- def self.sample10(identifier)
44
- return true if whitelisted?(identifier)
45
- return false if blacklisted?(identifier)
46
- identifier.bytes.sum % 10 == 0
47
- end
48
-
49
- def self.sample30(identifier)
50
- return true if whitelisted?(identifier)
51
- return false if blacklisted?(identifier)
52
- identifier.bytes.sum % 3 == 0
53
- end
54
-
55
- def self.sample50(identifier)
56
- return true if whitelisted?(identifier)
57
- return false if blacklisted?(identifier)
58
- identifier.bytes.sum.odd?
59
- end
60
-
61
39
  def self.set_features
62
40
  features = {}
63
41
  ENV.each_pair do |key, value|
@@ -68,8 +46,8 @@ module FeatureCop
68
46
 
69
47
  def self.as_json(identifier = nil)
70
48
  feature_set = {}
71
- features.each_pair do |key, value|
72
- feature_set[key.downcase.camelize(:lower)] = self.method(value.downcase).call(identifier)
49
+ features.each_pair do |feature, setting|
50
+ feature_set[feature.downcase.camelize(:lower)] = self.method(setting.downcase).call(feature, identifier)
73
51
  end
74
52
  feature_set
75
53
  end
@@ -18,22 +18,27 @@ module FeatureCop
18
18
  self.blacklist = ::YAML.load_file(absolute_path)[env]
19
19
  end
20
20
 
21
- def all_except_blacklist(identifier)
22
- return true if @blacklist.nil?
23
- !blacklisted?(identifier)
21
+ def all_except_blacklist(feature, identifier, options = {})
22
+ return true if blacklist.nil?
23
+ !blacklisted?(feature, identifier, options)
24
24
  end
25
25
 
26
26
  def blacklist
27
- @blacklist
27
+ @blacklist ||= {}
28
28
  end
29
29
 
30
30
  def blacklist=(blacklist)
31
+ if blacklist.is_a?(Array)
32
+ @blacklist = { "default" => blacklist }
33
+ return
34
+ end
31
35
  @blacklist = blacklist
32
36
  end
33
37
 
34
- def blacklisted?(identifier)
35
- return false if @blacklist.nil?
36
- @blacklist.include?(identifier)
38
+ def blacklisted?(feature, identifier, options = {})
39
+ feature = "default" if blacklist[feature].nil?
40
+ return false if blacklist[feature].nil?
41
+ blacklist[feature].include?(identifier)
37
42
  end
38
43
  end
39
44
  end
@@ -0,0 +1,28 @@
1
+ module FeatureCop
2
+ module Sampling
3
+
4
+ def self.included(base)
5
+ base.extend ClassMethods
6
+ end
7
+
8
+ module ClassMethods
9
+ def sample10(feature, identifier, options = {})
10
+ return true if whitelisted?(feature, identifier, options)
11
+ return false if blacklisted?(feature, identifier, options)
12
+ identifier.bytes.sum % 10 == 0
13
+ end
14
+
15
+ def sample30(feature, identifier, options = {})
16
+ return true if whitelisted?(feature, identifier, options)
17
+ return false if blacklisted?(feature, identifier, options)
18
+ identifier.bytes.sum % 3 == 0
19
+ end
20
+
21
+ def sample50(feature, identifier, options = {})
22
+ return true if whitelisted?(feature, identifier, options)
23
+ return false if blacklisted?(feature, identifier, options)
24
+ identifier.bytes.sum.odd?
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,19 @@
1
+ module FeatureCop
2
+ module Toggle
3
+
4
+ def self.included(base)
5
+ base.extend ClassMethods
6
+ end
7
+
8
+ module ClassMethods
9
+
10
+ def enabled(*args)
11
+ true
12
+ end
13
+
14
+ def disabled(*args)
15
+ false
16
+ end
17
+ end
18
+ end
19
+ end
@@ -1,3 +1,3 @@
1
1
  module FeatureCop
2
- VERSION = "0.1.4"
2
+ VERSION = "0.2.0"
3
3
  end
@@ -19,20 +19,25 @@ module FeatureCop
19
19
  end
20
20
 
21
21
  def whitelist
22
- @whitelist
22
+ @whitelist ||= {}
23
23
  end
24
24
 
25
25
  def whitelist=(whitelist)
26
+ if whitelist.is_a?(Array)
27
+ @whitelist = { "default" => whitelist }
28
+ return
29
+ end
26
30
  @whitelist = whitelist
27
31
  end
28
32
 
29
- def whitelist_only(identifier)
30
- whitelisted?(identifier)
33
+ def whitelist_only(feature, identifier, options = {})
34
+ whitelisted?(feature, identifier, options)
31
35
  end
32
36
 
33
- def whitelisted?(identifier)
34
- return false if @whitelist.nil?
35
- @whitelist.include?(identifier)
37
+ def whitelisted?(feature, identifier, options = {})
38
+ feature = "default" if whitelist[feature].nil?
39
+ return false if whitelist[feature].nil?
40
+ whitelist[feature].include?(identifier)
36
41
  end
37
42
  end
38
43
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: feature_cop
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brett Allred
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-05-02 00:00:00.000000000 Z
11
+ date: 2016-06-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '1.11'
33
+ version: '1.9'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '1.11'
40
+ version: '1.9'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -86,6 +86,8 @@ files:
86
86
  - lib/feature_cop.rb
87
87
  - lib/feature_cop/blacklist.rb
88
88
  - lib/feature_cop/enumerable_extensions.rb
89
+ - lib/feature_cop/sampling.rb
90
+ - lib/feature_cop/toggle.rb
89
91
  - lib/feature_cop/version.rb
90
92
  - lib/feature_cop/whitelist.rb
91
93
  homepage: http://www.github.com/nuvi/feature_cop
@@ -98,9 +100,9 @@ require_paths:
98
100
  - lib
99
101
  required_ruby_version: !ruby/object:Gem::Requirement
100
102
  requirements:
101
- - - ">="
103
+ - - ">"
102
104
  - !ruby/object:Gem::Version
103
- version: '0'
105
+ version: 2.0.0
104
106
  required_rubygems_version: !ruby/object:Gem::Requirement
105
107
  requirements:
106
108
  - - ">="