Module: FeatureCop

Includes:
Blacklist, Whitelist
Defined in:
lib/feature_cop.rb,
lib/feature_cop/version.rb,
lib/feature_cop/blacklist.rb,
lib/feature_cop/whitelist.rb

Defined Under Namespace

Modules: Blacklist, Whitelist

Constant Summary collapse

VERSION =
"0.1.3"

Class Method Summary collapse

Methods included from Blacklist

included

Methods included from Whitelist

included

Class Method Details

.allows?(feature, identifier = nil, opts = {}) ⇒ Boolean

Returns:

  • (Boolean)


17
18
19
20
21
# File 'lib/feature_cop.rb', line 17

def self.allows?(feature, identifier = nil, opts = {})
  feature_status = ENV["#{feature.to_s.upcase}"]
  return false if feature_status.nil? 
  self.method(feature_status.downcase).call(identifier)
end

.disabled(identifier) ⇒ Object



27
28
29
# File 'lib/feature_cop.rb', line 27

def self.disabled(identifier)
  false
end

.enabled(identifier) ⇒ Object



23
24
25
# File 'lib/feature_cop.rb', line 23

def self.enabled(identifier)
  true
end

.envObject



31
32
33
# File 'lib/feature_cop.rb', line 31

def self.env
  @env ||= ENV["RAILS_ENV"] || ENV["RACK_ENV"] || ENV["APP_ENV"] || ENV["APP_ENV"] || "development"
end

.featuresObject



35
36
37
# File 'lib/feature_cop.rb', line 35

def self.features
  @features ||= self.set_features
end

.reset_featuresObject



39
40
41
# File 'lib/feature_cop.rb', line 39

def self.reset_features
  @features = self.set_features
end

.sample10(identifier) ⇒ Object



43
44
45
46
47
# File 'lib/feature_cop.rb', line 43

def self.sample10(identifier)
  return true if whitelisted?(identifier)
  return false if blacklisted?(identifier)
  identifier.bytes.sum % 10 == 0 
end

.sample30(identifier) ⇒ Object



49
50
51
52
53
# File 'lib/feature_cop.rb', line 49

def self.sample30(identifier)
  return true if whitelisted?(identifier)
  return false if blacklisted?(identifier)
  identifier.bytes.sum % 3 == 0 
end

.sample50(identifier) ⇒ Object



55
56
57
58
59
# File 'lib/feature_cop.rb', line 55

def self.sample50(identifier)
  return true if whitelisted?(identifier)
  return false if blacklisted?(identifier)
  identifier.bytes.sum.odd? 
end

.set_featuresObject



61
62
63
64
65
66
67
# File 'lib/feature_cop.rb', line 61

def self.set_features
  features = {}
  ENV.each_pair do |key, value|
    features[key] = value if key.end_with?("_FEATURE")
  end
  return features
end

.to_json(identifier = nil) ⇒ Object



69
70
71
72
73
74
75
# File 'lib/feature_cop.rb', line 69

def self.to_json(identifier = nil)
  feature_set = {}
  features.each_pair do |key, value|
    feature_set[key.downcase.camelize(:lower)] = self.method(value.downcase).call(identifier)  
  end
  feature_set.to_json
end