Skip to content

Commit

Permalink
rubocop -a
Browse files Browse the repository at this point in the history
  • Loading branch information
reneklacan committed Jun 29, 2019
1 parent 3be74df commit 3eaa5de
Show file tree
Hide file tree
Showing 5 changed files with 95 additions and 87 deletions.
4 changes: 3 additions & 1 deletion Gemfile
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
source "https://rubygems.org"
# frozen_string_literal: true

source 'https://rubygems.org'

gemspec
4 changes: 3 additions & 1 deletion Rakefile
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
# frozen_string_literal: true

begin
require "rspec/core/rake_task"
require 'rspec/core/rake_task'

RSpec::Core::RakeTask.new(:spec)

Expand Down
131 changes: 66 additions & 65 deletions lib/rollout.rb
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
require "rollout/version"
require "zlib"
require "set"
require "json"
# frozen_string_literal: true

require 'rollout/version'
require 'zlib'
require 'set'
require 'json'

class Rollout
RAND_BASE = (2**32 - 1) / 100.0

class Feature
attr_accessor :groups, :users, :percentage, :data
attr_reader :name, :options
Expand All @@ -15,7 +17,7 @@ def initialize(name, string = nil, opts = {})
@name = name

if string
raw_percentage,raw_users,raw_groups,raw_data = string.split('|', 4)
raw_percentage, raw_users, raw_groups, raw_data = string.split('|', 4)
@percentage = raw_percentage.to_f
@users = users_from_string(raw_users)
@groups = groups_from_string(raw_groups)
Expand All @@ -26,7 +28,7 @@ def initialize(name, string = nil, opts = {})
end

def serialize
"#{@percentage}|#{@users.to_a.join(",")}|#{@groups.to_a.join(",")}|#{serialize_data}"
"#{@percentage}|#{@users.to_a.join(',')}|#{@groups.to_a.join(',')}|#{serialize_data}"
end

def add_user(user)
Expand All @@ -47,8 +49,8 @@ def remove_group(group)
end

def clear
@groups = groups_from_string("")
@users = users_from_string("")
@groups = groups_from_string('')
@users = users_from_string('')
@percentage = 0
@data = {}
end
Expand All @@ -58,7 +60,7 @@ def active?(rollout, user)
id = user_id(user)
user_in_percentage?(id) ||
user_in_active_users?(id) ||
user_in_active_group?(user, rollout)
user_in_active_group?(user, rollout)
else
@percentage == 100
end
Expand All @@ -77,65 +79,66 @@ def to_hash
end

private
def user_id(user)
if user.is_a?(Integer) || user.is_a?(String)
user.to_s
else
user.send(id_user_by).to_s
end
end

def id_user_by
@options[:id_user_by] || :id
def user_id(user)
if user.is_a?(Integer) || user.is_a?(String)
user.to_s
else
user.send(id_user_by).to_s
end
end

def user_in_percentage?(user)
Zlib.crc32(user_id_for_percentage(user)) < RAND_BASE * @percentage
end
def id_user_by
@options[:id_user_by] || :id
end

def user_id_for_percentage(user)
if @options[:randomize_percentage]
user_id(user).to_s + @name.to_s
else
user_id(user)
end
def user_in_percentage?(user)
Zlib.crc32(user_id_for_percentage(user)) < RAND_BASE * @percentage
end

def user_id_for_percentage(user)
if @options[:randomize_percentage]
user_id(user).to_s + @name.to_s
else
user_id(user)
end
end

def user_in_active_group?(user, rollout)
@groups.any? do |g|
rollout.active_in_group?(g, user)
end
def user_in_active_group?(user, rollout)
@groups.any? do |g|
rollout.active_in_group?(g, user)
end
end

def serialize_data
return "" unless @data.is_a? Hash
def serialize_data
return '' unless @data.is_a? Hash

@data.to_json
end
@data.to_json
end

def users_from_string(raw_users)
users = (raw_users || "").split(",").map(&:to_s)
if @options[:use_sets]
users.to_set
else
users
end
def users_from_string(raw_users)
users = (raw_users || '').split(',').map(&:to_s)
if @options[:use_sets]
users.to_set
else
users
end
end

def groups_from_string(raw_groups)
groups = (raw_groups || "").split(",").map(&:to_sym)
if @options[:use_sets]
groups.to_set
else
groups
end
def groups_from_string(raw_groups)
groups = (raw_groups || '').split(',').map(&:to_sym)
if @options[:use_sets]
groups.to_set
else
groups
end
end
end

def initialize(storage, opts = {})
@storage = storage
@options = opts
@groups = { all: lambda { |user| true } }
@groups = { all: ->(_user) { true } }
end

def activate(feature)
Expand All @@ -145,15 +148,13 @@ def activate(feature)
end

def deactivate(feature)
with_feature(feature) do |f|
f.clear
end
with_feature(feature, &:clear)
end

def delete(feature)
features = (@storage.get(features_key) || "").split(",")
features = (@storage.get(features_key) || '').split(',')
features.delete(feature.to_s)
@storage.set(features_key, features.join(","))
@storage.set(features_key, features.join(','))
@storage.del(key(feature))
end

Expand Down Expand Up @@ -193,20 +194,20 @@ def deactivate_user(feature, user)

def activate_users(feature, users)
with_feature(feature) do |f|
users.each{|user| f.add_user(user)}
users.each { |user| f.add_user(user) }
end
end

def deactivate_users(feature, users)
with_feature(feature) do |f|
users.each{|user| f.remove_user(user)}
users.each { |user| f.remove_user(user) }
end
end

def set_users(feature, users)
with_feature(feature) do |f|
f.users = []
users.each{|user| f.add_user(user)}
users.each { |user| f.add_user(user) }
end
end

Expand Down Expand Up @@ -242,7 +243,7 @@ def deactivate_percentage(feature)

def active_in_group?(group, user)
f = @groups[group.to_sym]
f && f.call(user)
f&.call(user)
end

def get(feature)
Expand All @@ -263,12 +264,12 @@ def clear_feature_data(feature)
end

def multi_get(*features)
feature_keys = features.map{ |feature| key(feature) }
feature_keys = features.map { |feature| key(feature) }
@storage.mget(*feature_keys).map.with_index { |string, index| Feature.new(features[index], string, @options) }
end

def features
(@storage.get(features_key) || "").split(",").map(&:to_sym)
(@storage.get(features_key) || '').split(',').map(&:to_sym)
end

def feature_states(user = nil)
Expand All @@ -285,7 +286,7 @@ def active_features(user = nil)

def clear!
features.each do |feature|
with_feature(feature) { |f| f.clear }
with_feature(feature, &:clear)
@storage.del(key(feature))
end

Expand All @@ -303,7 +304,7 @@ def key(name)
end

def features_key
"feature:__features__"
'feature:__features__'
end

def with_feature(feature)
Expand All @@ -314,6 +315,6 @@ def with_feature(feature)

def save(feature)
@storage.set(key(feature.name), feature.serialize)
@storage.set(features_key, (features | [feature.name.to_sym]).join(","))
@storage.set(features_key, (features | [feature.name.to_sym]).join(','))
end
end
4 changes: 3 additions & 1 deletion lib/rollout/version.rb
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
# frozen_string_literal: true

class Rollout
VERSION = "2.4.3"
VERSION = '2.4.3'
end
39 changes: 20 additions & 19 deletions rollout.gemspec
Original file line number Diff line number Diff line change
@@ -1,30 +1,31 @@
# -*- encoding: utf-8 -*-
$:.push File.expand_path("../lib", __FILE__)
require "rollout/version"
# frozen_string_literal: true

$LOAD_PATH.push File.expand_path('lib', __dir__)
require 'rollout/version'

Gem::Specification.new do |spec|
spec.name = "rollout"
spec.name = 'rollout'
spec.version = Rollout::VERSION
spec.authors = ["James Golick"]
spec.email = ["[email protected]"]
spec.description = "Feature flippers with redis."
spec.summary = "Feature flippers with redis."
spec.homepage = "https://github.com/FetLife/rollout"
spec.license = "MIT"
spec.authors = ['James Golick']
spec.email = ['[email protected]']
spec.description = 'Feature flippers with redis.'
spec.summary = 'Feature flippers with redis.'
spec.homepage = 'https://github.com/FetLife/rollout'
spec.license = 'MIT'

spec.files = `git ls-files`.split("\n")
spec.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
spec.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
spec.require_paths = ["lib"]
spec.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
spec.require_paths = ['lib']

spec.required_ruby_version = '>= 2.0'

spec.add_dependency "redis", "~> 4.0"
spec.add_dependency 'redis', '~> 4.0'

spec.add_development_dependency "bundler", "~> 1.17"
spec.add_development_dependency "fakeredis"
spec.add_development_dependency "rspec", "~> 3.0"
spec.add_development_dependency "rspec_junit_formatter", "~> 0.4"
spec.add_development_dependency "rubocop", "~> 0.71"
spec.add_development_dependency "simplecov", "~> 0.16"
spec.add_development_dependency 'bundler', '~> 1.17'
spec.add_development_dependency 'fakeredis'
spec.add_development_dependency 'rspec', '~> 3.0'
spec.add_development_dependency 'rspec_junit_formatter', '~> 0.4'
spec.add_development_dependency 'rubocop', '~> 0.71'
spec.add_development_dependency 'simplecov', '~> 0.16'
end

0 comments on commit 3eaa5de

Please sign in to comment.