Sha256: 749058c8161b983b356c396ebdcf8d6e8e69ddb8e9a3285393b427d2e356be69

Contents?: true

Size: 708 Bytes

Versions: 3

Compression:

Stored size: 708 Bytes

Contents

class DynportTools::Features
  class << self
    attr_accessor :features, :redis
    
    def feature(name)
      self.features ||= Array.new
      self.features << name
      self.class.send(:define_method, :"#{name}_enabled_for?") do |user, &block|
        enabled = !user.nil? && redis.sismember("features/#{name}/users", user.id.to_s)
        block.call if enabled && block
        enabled
      end
    end
    
    def add_user(feature, user)
      raise "feature #{feature} not defined" if !(features || []).include?(feature)
      redis.sadd("features/#{feature}/users", user.id)
    end
    
    def remove_user(feature, user)
      redis.srem("features/#{feature}/users", user.id)
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
dynport_tools-0.2.22 lib/dynport_tools/features.rb
dynport_tools-0.2.21 lib/dynport_tools/features.rb
dynport_tools-0.2.20 lib/dynport_tools/features.rb