mongoid_feature_flags 0.0.1 → 0.1.16

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/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