module Blackbeard::FeatureRollout
Public Instance Methods
active_segment?(context)
click to toggle source
# File lib/blackbeard/feature_rollout.rb, line 7 def active_segment?(context) return false unless group_segments #TODO: speed this up. memoize group on the feature. store segment in user session group_segments.each_pair do |group_id, segments| next if segments.nil? || segments.empty? group = Group.find(group_id) or next user_segment = group.segment_for(context) or next return true if segments.include?(user_segment) end false end
active_user?(context)
click to toggle source
# File lib/blackbeard/feature_rollout.rb, line 19 def active_user?(context) return false if (users_rate.zero? || !context.user) return true if users_rate == 100 user_id = id_to_int(context.user_id) (user_id % 100).between?(1,users_rate) end
active_visitor?(context)
click to toggle source
# File lib/blackbeard/feature_rollout.rb, line 27 def active_visitor?(context) return false if visitors_rate.zero? return true if visitors_rate == 100 (context.visitor_id % 100).between?(1,visitors_rate) end
id_to_int(id)
click to toggle source
# File lib/blackbeard/feature_rollout.rb, line 33 def id_to_int(id) if id.kind_of?(Integer) id elsif id.kind_of?(String) bytes = id.bytes if bytes.count > 8 bytes = bytes[-8..-1] end bytes.inject { |sum, n| sum * n } else raise UserIdNotDivisable end end
rollout?(context)
click to toggle source
# File lib/blackbeard/feature_rollout.rb, line 3 def rollout?(context) active_user?(context) || active_visitor?(context) || active_segment?(context) end