Class: Rollout
- Inherits:
-
Object
- Object
- Rollout
- Defined in:
- lib/rollout.rb,
lib/rollout/version.rb
Defined Under Namespace
Classes: Feature
Constant Summary collapse
- VERSION =
"2.3.0"
Instance Method Summary collapse
- #activate(feature) ⇒ Object
- #activate_group(feature, group) ⇒ Object
- #activate_percentage(feature, percentage) ⇒ Object
- #activate_user(feature, user) ⇒ Object
- #activate_users(feature, users) ⇒ Object
- #active?(feature, user = nil) ⇒ Boolean
- #active_features(user = nil) ⇒ Object
- #active_in_group?(group, user) ⇒ Boolean
- #clear! ⇒ Object
- #deactivate(feature) ⇒ Object
- #deactivate_group(feature, group) ⇒ Object
- #deactivate_percentage(feature) ⇒ Object
- #deactivate_user(feature, user) ⇒ Object
- #deactivate_users(feature, users) ⇒ Object
- #define_group(group, &block) ⇒ Object
- #delete(feature) ⇒ Object
- #feature_states(user = nil) ⇒ Object
- #features ⇒ Object
- #get(feature) ⇒ Object
- #inactive?(feature, user = nil) ⇒ Boolean
-
#initialize(storage, opts = {}) ⇒ Rollout
constructor
A new instance of Rollout.
- #set(feature, desired_state) ⇒ Object
- #user_in_active_users?(feature, user = nil) ⇒ Boolean
Constructor Details
#initialize(storage, opts = {}) ⇒ Rollout
Returns a new instance of Rollout.
106 107 108 109 110 |
# File 'lib/rollout.rb', line 106 def initialize(storage, opts = {}) @storage = storage @options = opts @groups = { all: lambda { |user| true } } end |
Instance Method Details
#activate(feature) ⇒ Object
112 113 114 115 116 |
# File 'lib/rollout.rb', line 112 def activate(feature) with_feature(feature) do |f| f.percentage = 100 end end |
#activate_group(feature, group) ⇒ Object
141 142 143 144 145 |
# File 'lib/rollout.rb', line 141 def activate_group(feature, group) with_feature(feature) do |f| f.add_group(group) end end |
#activate_percentage(feature, percentage) ⇒ Object
195 196 197 198 199 |
# File 'lib/rollout.rb', line 195 def activate_percentage(feature, percentage) with_feature(feature) do |f| f.percentage = percentage end end |
#activate_user(feature, user) ⇒ Object
153 154 155 156 157 |
# File 'lib/rollout.rb', line 153 def activate_user(feature, user) with_feature(feature) do |f| f.add_user(user) end end |
#activate_users(feature, users) ⇒ Object
165 166 167 168 169 |
# File 'lib/rollout.rb', line 165 def activate_users(feature, users) with_feature(feature) do |f| users.each{|user| f.add_user(user)} end end |
#active?(feature, user = nil) ⇒ Boolean
181 182 183 184 |
# File 'lib/rollout.rb', line 181 def active?(feature, user = nil) feature = get(feature) feature.active?(self, user) end |
#active_features(user = nil) ⇒ Object
227 228 229 230 231 |
# File 'lib/rollout.rb', line 227 def active_features(user = nil) features.select do |f| active?(f, user) end end |
#active_in_group?(group, user) ⇒ Boolean
207 208 209 210 |
# File 'lib/rollout.rb', line 207 def active_in_group?(group, user) f = @groups[group.to_sym] f && f.call(user) end |
#clear! ⇒ Object
233 234 235 236 237 238 239 240 |
# File 'lib/rollout.rb', line 233 def clear! features.each do |feature| with_feature(feature) { |f| f.clear } @storage.del(key(feature)) end @storage.del(features_key) end |
#deactivate(feature) ⇒ Object
118 119 120 121 122 |
# File 'lib/rollout.rb', line 118 def deactivate(feature) with_feature(feature) do |f| f.clear end end |
#deactivate_group(feature, group) ⇒ Object
147 148 149 150 151 |
# File 'lib/rollout.rb', line 147 def deactivate_group(feature, group) with_feature(feature) do |f| f.remove_group(group) end end |
#deactivate_percentage(feature) ⇒ Object
201 202 203 204 205 |
# File 'lib/rollout.rb', line 201 def deactivate_percentage(feature) with_feature(feature) do |f| f.percentage = 0 end end |
#deactivate_user(feature, user) ⇒ Object
159 160 161 162 163 |
# File 'lib/rollout.rb', line 159 def deactivate_user(feature, user) with_feature(feature) do |f| f.remove_user(user) end end |
#deactivate_users(feature, users) ⇒ Object
171 172 173 174 175 |
# File 'lib/rollout.rb', line 171 def deactivate_users(feature, users) with_feature(feature) do |f| users.each{|user| f.remove_user(user)} end end |
#define_group(group, &block) ⇒ Object
177 178 179 |
# File 'lib/rollout.rb', line 177 def define_group(group, &block) @groups[group.to_sym] = block end |
#delete(feature) ⇒ Object
124 125 126 127 128 129 |
# File 'lib/rollout.rb', line 124 def delete(feature) features = (@storage.get(features_key) || "").split(",").map(&:to_sym) features.delete(feature) @storage.set(features_key, features.join(",")) @storage.del(key(feature)) end |
#feature_states(user = nil) ⇒ Object
221 222 223 224 225 |
# File 'lib/rollout.rb', line 221 def feature_states(user = nil) features.each_with_object({}) do |f, hash| hash[f] = active?(f, user) end end |
#features ⇒ Object
217 218 219 |
# File 'lib/rollout.rb', line 217 def features (@storage.get(features_key) || "").split(",").map(&:to_sym) end |
#get(feature) ⇒ Object
212 213 214 215 |
# File 'lib/rollout.rb', line 212 def get(feature) string = @storage.get(key(feature)) Feature.new(feature, string, @options) end |
#inactive?(feature, user = nil) ⇒ Boolean
191 192 193 |
# File 'lib/rollout.rb', line 191 def inactive?(feature, user = nil) !active?(feature, user) end |
#set(feature, desired_state) ⇒ Object
131 132 133 134 135 136 137 138 139 |
# File 'lib/rollout.rb', line 131 def set(feature, desired_state) with_feature(feature) do |f| if desired_state f.percentage = 100 else f.clear end end end |
#user_in_active_users?(feature, user = nil) ⇒ Boolean
186 187 188 189 |
# File 'lib/rollout.rb', line 186 def user_in_active_users?(feature, user = nil) feature = get(feature) feature.user_in_active_users?(user) end |