mongoid_feature_flags 0.1.33 → 0.1.34

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.
data/README.md CHANGED
@@ -28,6 +28,11 @@ If you would like to add features on persons, `include Mongoid::FeatureFlags`
28
28
 
29
29
  include Mongoid::FeatureFlags
30
30
  inherits_features_from :family
31
+ include_generated_features_from :other_features_method
32
+
33
+ def other_features_method
34
+ {:play_guitar_like_bo_diddley => true}
35
+ end
31
36
  end
32
37
 
33
38
  Then, you can do the following:
@@ -36,7 +41,9 @@ Then, you can do the following:
36
41
  p.add_feature(:play_guitar_like_slash)
37
42
 
38
43
  p.feature?(:play_guitar_like_slash) { *works* }
39
- p.feature?(:play_guitar_like_nikki_sixx) { *does not work* }
44
+ p.feature?(:play_guitar_like_bo_diddley) { *works* }
45
+
46
+ p.feature?(:play_guitar_like_nikki_sixx) { *does not work* }
40
47
 
41
48
  ## Security ##
42
49
 
@@ -7,6 +7,7 @@ module Mongoid
7
7
 
8
8
  included do
9
9
  @feature_flag_parents = []
10
+ @feature_flag_methods = []
10
11
 
11
12
  begin
12
13
  self.field :feature_flags, type: Hash
@@ -22,6 +23,11 @@ module Mongoid
22
23
  @feature_flag_parents += relative
23
24
  @feature_flag_parents.uniq!
24
25
  end
26
+
27
+ def include_generated_features_from(*methods)
28
+ @feature_flag_methods += methods
29
+ @feature_flag_methods.uniq!
30
+ end
25
31
  end
26
32
 
27
33
  def add_feature(*flags)
@@ -39,9 +45,17 @@ module Mongoid
39
45
  end
40
46
  self.save
41
47
  end
48
+
49
+ def clear_feature(*flags)
50
+ self.feature_flags ||= {}
51
+ flags.each do |flag|
52
+ self.feature_flags.delete(flag)
53
+ end
54
+ self.save
55
+ end
42
56
 
43
57
  def features
44
- (inherited_feature_flags || {}).merge(self.feature_flags || {})
58
+ (inherited_feature_flags || {}).merge(generated_feature_flags || {}).merge(self.feature_flags || {})
45
59
  end
46
60
 
47
61
  def feature?(*required_features, &block)
@@ -61,6 +75,18 @@ module Mongoid
61
75
  def feature_flag_validate_flag(*flag)
62
76
  raise(InvalidFlagName, "Flags must be a symbol") if !flag.any? { |f| f.is_a?(Symbol) }
63
77
  end
78
+
79
+ def generated_feature_flags
80
+ if self.class.instance_variable_defined?("@feature_flag_methods")
81
+ self.class.instance_variable_get("@feature_flag_methods").inject({}) do |flag_hash, method_name|
82
+ if self.respond_to?(method_name) && self.send(method_name).present? && self.send(method_name)
83
+ flag_hash.merge(self.send(method_name) || {})
84
+ else
85
+ flag_hash
86
+ end
87
+ end
88
+ end
89
+ end
64
90
 
65
91
  def inherited_feature_flags
66
92
  if self.class.instance_variable_defined?("@feature_flag_parents")
@@ -31,6 +31,19 @@ describe Mongoid::FeatureFlags do
31
31
  triggered.should be nil
32
32
  end
33
33
 
34
+ it "#clear_feature" do
35
+ person.feature?(:can_see_cartoons).should eq(true)
36
+ person.clear_feature(:can_see_cartoons)
37
+ person.feature?(:can_see_cartoons).should be nil
38
+
39
+ triggered = nil
40
+ person.feature?(:can_see_cartoons) do
41
+ triggered = "yep"
42
+ end
43
+
44
+ triggered.should be nil
45
+ end
46
+
34
47
  it "#unpermitted" do
35
48
  triggered = nil
36
49
  person.feature?(:can_see_cnn) do
@@ -57,6 +70,14 @@ describe Mongoid::FeatureFlags do
57
70
 
58
71
  triggered.should eq("nope")
59
72
  end
73
+
74
+ it "#generated_features" do
75
+ triggered = nil
76
+ person.not_feature?(:generated_feature) do
77
+ triggered = "yep"
78
+ end
79
+ triggered.should eq("yep")
80
+ end
60
81
  end
61
82
 
62
83
  context "#inherited" do
@@ -7,4 +7,7 @@ class Person
7
7
  include Mongoid::FeatureFlags
8
8
  inherits_features_from :family
9
9
 
10
+ def generated_features
11
+ {:my_other_generated_feature => true}
12
+ end
10
13
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mongoid_feature_flags
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.33
4
+ version: 0.1.34
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors: