Class: Rollout

Inherits:
Object
  • Object
show all
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

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

Returns:

  • (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

Returns:

  • (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

#featuresObject



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

Returns:

  • (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

Returns:

  • (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