Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'app/models/namespaces/randomized_suffix_path.rb')
-rw-r--r--app/models/namespaces/randomized_suffix_path.rb39
1 files changed, 39 insertions, 0 deletions
diff --git a/app/models/namespaces/randomized_suffix_path.rb b/app/models/namespaces/randomized_suffix_path.rb
new file mode 100644
index 00000000000..586d7bff5c3
--- /dev/null
+++ b/app/models/namespaces/randomized_suffix_path.rb
@@ -0,0 +1,39 @@
+# frozen_string_literal: true
+
+module Namespaces
+ class RandomizedSuffixPath
+ MAX_TRIES = 4
+ LEADING_ZEROS = /^0+/.freeze
+
+ def initialize(path)
+ @path = path
+ end
+
+ def call(new_count)
+ @count = new_count.to_i
+ to_s
+ end
+
+ def to_s
+ "#{path}#{suffix}"
+ end
+
+ private
+
+ attr_reader :count, :path
+
+ def randomized_suffix
+ Time.current.strftime('%L%M%V').sub(LEADING_ZEROS, '').to_i + offset
+ end
+
+ def offset
+ count - MAX_TRIES - 1
+ end
+
+ def suffix
+ return if count.nil?
+ return randomized_suffix if count > MAX_TRIES
+ return count if count > 0
+ end
+ end
+end