Class: Rollout
- Inherits:
-
Object
- Object
- Rollout
- Defined in:
- lib/rollout.rb,
lib/rollout/legacy.rb,
lib/rollout/version.rb
Defined Under Namespace
Constant Summary collapse
- VERSION =
"2.1.0"
Instance Method Summary collapse
- #activate(feature) ⇒ Object
- #activate_group(feature, group) ⇒ Object
- #activate_percentage(feature, percentage) ⇒ Object
- #activate_user(feature, user) ⇒ Object
- #active?(feature, user = nil) ⇒ Boolean
- #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
- #define_group(group, &block) ⇒ Object
- #features ⇒ Object
- #get(feature) ⇒ Object
-
#initialize(storage, opts = {}) ⇒ Rollout
constructor
A new instance of Rollout.
- #set(feature, desired_state) ⇒ Object
Constructor Details
#initialize(storage, opts = {}) ⇒ Rollout
Returns a new instance of Rollout.
97 98 99 100 101 102 |
# File 'lib/rollout.rb', line 97 def initialize(storage, opts = {}) @storage = storage @options = opts @groups = {:all => lambda { |user| true }} @legacy = Legacy.new(opts[:legacy_storage] || @storage) if opts[:migrate] end |
Instance Method Details
#activate(feature) ⇒ Object
104 105 106 107 108 |
# File 'lib/rollout.rb', line 104 def activate(feature) with_feature(feature) do |f| f.percentage = 100 end end |
#activate_group(feature, group) ⇒ Object
126 127 128 129 130 |
# File 'lib/rollout.rb', line 126 def activate_group(feature, group) with_feature(feature) do |f| f.add_group(group) end end |
#activate_percentage(feature, percentage) ⇒ Object
159 160 161 162 163 |
# File 'lib/rollout.rb', line 159 def activate_percentage(feature, percentage) with_feature(feature) do |f| f.percentage = percentage end end |
#activate_user(feature, user) ⇒ Object
138 139 140 141 142 |
# File 'lib/rollout.rb', line 138 def activate_user(feature, user) with_feature(feature) do |f| f.add_user(user) end end |
#active?(feature, user = nil) ⇒ Boolean
154 155 156 157 |
# File 'lib/rollout.rb', line 154 def active?(feature, user = nil) feature = get(feature) feature.active?(self, user) end |
#active_in_group?(group, user) ⇒ Boolean
171 172 173 174 |
# File 'lib/rollout.rb', line 171 def active_in_group?(group, user) f = @groups[group.to_sym] f && f.call(user) end |
#clear! ⇒ Object
196 197 198 199 200 201 202 203 |
# File 'lib/rollout.rb', line 196 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
110 111 112 113 114 |
# File 'lib/rollout.rb', line 110 def deactivate(feature) with_feature(feature) do |f| f.clear end end |
#deactivate_group(feature, group) ⇒ Object
132 133 134 135 136 |
# File 'lib/rollout.rb', line 132 def deactivate_group(feature, group) with_feature(feature) do |f| f.remove_group(group) end end |
#deactivate_percentage(feature) ⇒ Object
165 166 167 168 169 |
# File 'lib/rollout.rb', line 165 def deactivate_percentage(feature) with_feature(feature) do |f| f.percentage = 0 end end |
#deactivate_user(feature, user) ⇒ Object
144 145 146 147 148 |
# File 'lib/rollout.rb', line 144 def deactivate_user(feature, user) with_feature(feature) do |f| f.remove_user(user) end end |
#define_group(group, &block) ⇒ Object
150 151 152 |
# File 'lib/rollout.rb', line 150 def define_group(group, &block) @groups[group.to_sym] = block end |
#features ⇒ Object
192 193 194 |
# File 'lib/rollout.rb', line 192 def features (@storage.get(features_key) || "").split(",").map(&:to_sym) end |
#get(feature) ⇒ Object
176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 |
# File 'lib/rollout.rb', line 176 def get(feature) string = @storage.get(key(feature)) if string || !migrate? Feature.new(feature, string, @options) else info = @legacy.info(feature) f = Feature.new(feature) f.percentage = info[:percentage] f.percentage = 100 if info[:global].include? feature f.groups = info[:groups].map { |g| g.to_sym } f.users = info[:users].map { |u| u.to_s } save(f) f end end |
#set(feature, desired_state) ⇒ Object
116 117 118 119 120 121 122 123 124 |
# File 'lib/rollout.rb', line 116 def set(feature, desired_state) with_feature(feature) do |f| if desired_state f.percentage = 100 else f.clear end end end |