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 'lib/gitlab/database/migrations/version.rb')
-rw-r--r--lib/gitlab/database/migrations/version.rb76
1 files changed, 76 insertions, 0 deletions
diff --git a/lib/gitlab/database/migrations/version.rb b/lib/gitlab/database/migrations/version.rb
new file mode 100644
index 00000000000..27c4c7d0746
--- /dev/null
+++ b/lib/gitlab/database/migrations/version.rb
@@ -0,0 +1,76 @@
+# frozen_string_literal: true
+
+module Gitlab
+ module Database
+ module Migrations
+ class Version
+ InvalidTypeError = Class.new(StandardError)
+
+ include Comparable
+
+ TYPE_VALUES = {
+ regular: 0,
+ post: 1
+ }.freeze
+
+ attr_reader :timestamp, :milestone, :type_value
+
+ def initialize(timestamp, milestone, type)
+ @timestamp = timestamp
+ @milestone = milestone
+ self.type = type
+ end
+
+ def type
+ TYPE_VALUES.key(@type_value)
+ end
+
+ def type=(value)
+ @type_value = TYPE_VALUES.fetch(value.to_sym) { raise InvalidTypeError }
+ end
+
+ def regular?
+ @type_value == TYPE_VALUES[:regular]
+ end
+
+ def post_deployment?
+ @type_value == TYPE_VALUES[:post]
+ end
+
+ def <=>(other)
+ return 1 unless other.is_a?(self.class)
+
+ return milestone <=> other.milestone if milestone != other.milestone
+
+ return @type_value <=> other.type_value if @type_value != other.type_value
+
+ @timestamp <=> other.timestamp
+ end
+
+ def to_s
+ @timestamp.to_s
+ end
+
+ def to_i
+ @timestamp.to_i
+ end
+
+ def coerce(_other)
+ [-1, timestamp.to_i]
+ end
+
+ def eql?(other)
+ (self <=> other) == 0
+ end
+
+ def ==(other)
+ eql?(other)
+ end
+
+ def hash
+ [timestamp, milestone, @type_value].hash
+ end
+ end
+ end
+ end
+end