mongoid_feature_flags 0.0.1 → 0.1.16

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -2,3 +2,5 @@ source 'https://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in mongoid_feature_flags.gemspec
4
4
  gemspec
5
+
6
+ gem "rspec-extra-formatters"
@@ -19,6 +19,7 @@ module Mongoid
19
19
  def inherits_features_from(*relative)
20
20
  @feature_flag_parents ||= []
21
21
  @feature_flag_parents += relative
22
+ @feature_flag_parents.uniq!
22
23
  end
23
24
  end
24
25
 
@@ -31,18 +32,28 @@ module Mongoid
31
32
  self.save
32
33
  end
33
34
 
35
+ def remove_feature(*flags)
36
+ self.feature_flags ||= {}
37
+ flags.each do |flag|
38
+ self.feature_flags[flag] = false
39
+ end
40
+ self.save
41
+ end
42
+
34
43
  def features
35
- inherited_feature_flags.merge(self.feature_flags).inject([]) { |new_hash, key| TrueClass === key[1] ? (new_hash + [key[0]]) : new_hash }
44
+ inherited_feature_flags.merge(self.feature_flags)
36
45
  end
37
46
 
38
- def feature?(*require_features, &block)
39
- if (self.features & require_features).length > 0
47
+ def feature?(*required_features, &block)
48
+ my_features = features
49
+ if required_features.any? { |feature| my_features[feature] }
40
50
  block.present? ? block.yield : true
41
51
  end
42
52
  end
43
53
 
44
54
  def not_feature?(*unrequired_features, &block)
45
- if (self.features & unrequired_features).length == 0
55
+ my_features = features
56
+ if unrequired_features.none? { |feature| my_features[feature] }
46
57
  block.present? ? block.yield : true
47
58
  end
48
59
  end
@@ -51,13 +62,14 @@ module Mongoid
51
62
  raise(InvalidFlagName, "Flags must be a symbol") if !flag.any? { |f| f.is_a?(Symbol) }
52
63
  end
53
64
 
54
-
55
65
  def inherited_feature_flags
56
- self.class.instance_variable_get("@feature_flag_parents").inject({}) do |flag_hash, relative|
57
- if self.respond_to?(relative) && self.send(relative).present? && self.send(relative).respond_to?(:feature_flags)
58
- flag_hash.merge(self.send(relative).send(:feature_flags))
59
- else
60
- flag_hash
66
+ if self.class.instance_variable_defined?("@feature_flag_parents")
67
+ self.class.instance_variable_get("@feature_flag_parents").inject({}) do |flag_hash, relative|
68
+ if self.respond_to?(relative) && self.send(relative).present? && self.send(relative).respond_to?(:feature_flags)
69
+ flag_hash.merge(self.send(relative).send(:feature_flags))
70
+ else
71
+ flag_hash
72
+ end
61
73
  end
62
74
  end
63
75
  end
@@ -17,6 +17,19 @@ describe Mongoid::FeatureFlags do
17
17
 
18
18
  triggered.should eq("yep")
19
19
  end
20
+
21
+ it "#remove_feature" do
22
+ person.feature?(:can_see_cartoons).should eq(true)
23
+ person.remove_feature(:can_see_cartoons)
24
+ person.feature?(:can_see_cartoons).should be nil
25
+
26
+ triggered = nil
27
+ person.feature?(:can_see_cartoons) do
28
+ triggered = "yep"
29
+ end
30
+
31
+ triggered.should be nil
32
+ end
20
33
 
21
34
  it "#unpermitted" do
22
35
  triggered = nil
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.0.1
4
+ version: 0.1.16
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2012-11-07 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
16
- requirement: &70105158078900 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,15 @@ dependencies:
21
21
  version: 3.2.0
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70105158078900
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: 3.2.0
25
30
  - !ruby/object:Gem::Dependency
26
31
  name: rspec
27
- requirement: &70105158078460 !ruby/object:Gem::Requirement
32
+ requirement: !ruby/object:Gem::Requirement
28
33
  none: false
29
34
  requirements:
30
35
  - - ! '>='
@@ -32,10 +37,15 @@ dependencies:
32
37
  version: '0'
33
38
  type: :development
34
39
  prerelease: false
35
- version_requirements: *70105158078460
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
36
46
  - !ruby/object:Gem::Dependency
37
47
  name: guard-rspec
38
- requirement: &70105158077940 !ruby/object:Gem::Requirement
48
+ requirement: !ruby/object:Gem::Requirement
39
49
  none: false
40
50
  requirements:
41
51
  - - ! '>='
@@ -43,10 +53,15 @@ dependencies:
43
53
  version: '0'
44
54
  type: :development
45
55
  prerelease: false
46
- version_requirements: *70105158077940
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
47
62
  - !ruby/object:Gem::Dependency
48
63
  name: guard-bundler
49
- requirement: &70105158077320 !ruby/object:Gem::Requirement
64
+ requirement: !ruby/object:Gem::Requirement
50
65
  none: false
51
66
  requirements:
52
67
  - - ! '>='
@@ -54,10 +69,15 @@ dependencies:
54
69
  version: '0'
55
70
  type: :development
56
71
  prerelease: false
57
- version_requirements: *70105158077320
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
58
78
  - !ruby/object:Gem::Dependency
59
79
  name: mongoid
60
- requirement: &70105158076580 !ruby/object:Gem::Requirement
80
+ requirement: !ruby/object:Gem::Requirement
61
81
  none: false
62
82
  requirements:
63
83
  - - ! '>='
@@ -65,10 +85,15 @@ dependencies:
65
85
  version: '0'
66
86
  type: :development
67
87
  prerelease: false
68
- version_requirements: *70105158076580
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
69
94
  - !ruby/object:Gem::Dependency
70
95
  name: rb-fsevent
71
- requirement: &70105158076060 !ruby/object:Gem::Requirement
96
+ requirement: !ruby/object:Gem::Requirement
72
97
  none: false
73
98
  requirements:
74
99
  - - ~>
@@ -76,7 +101,12 @@ dependencies:
76
101
  version: 0.9.1
77
102
  type: :development
78
103
  prerelease: false
79
- version_requirements: *70105158076060
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ~>
108
+ - !ruby/object:Gem::Version
109
+ version: 0.9.1
80
110
  description: Mongoid Feature Flags
81
111
  email:
82
112
  - chris@mongohq.com
@@ -120,7 +150,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
120
150
  version: '0'
121
151
  requirements: []
122
152
  rubyforge_project:
123
- rubygems_version: 1.8.10
153
+ rubygems_version: 1.8.24
124
154
  signing_key:
125
155
  specification_version: 3
126
156
  summary: Hopefully a nice little plug and play for