mongoid_feature_flags 0.1.33 → 0.1.34

Sign up to get free protection for your applications and to get access to all the features.
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: