Class: Gitlab::Graphql::Deprecations::Deprecation

Inherits:
Object
  • Object
show all
Includes:
ActiveModel::Validations
Defined in:
lib/gitlab/graphql/deprecations/deprecation.rb

Constant Summary collapse

REASON_RENAMED =
:renamed
REASON_ALPHA =
:alpha
REASONS =
{
  REASON_RENAMED => 'This was renamed.',
  REASON_ALPHA => 'This feature is an Experiment. It can be changed or removed at any time.'
}.freeze

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(reason: nil, milestone: nil, replacement: nil) ⇒ Deprecation

Returns a new instance of Deprecation.



39
40
41
42
43
# File 'lib/gitlab/graphql/deprecations/deprecation.rb', line 39

def initialize(reason: nil, milestone: nil, replacement: nil)
  @reason = reason.presence
  @milestone = milestone.presence
  @replacement = replacement.presence
end

Class Method Details

.parse(alpha: nil, deprecated: nil) ⇒ Object



25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/gitlab/graphql/deprecations/deprecation.rb', line 25

def self.parse(alpha: nil, deprecated: nil)
  options = alpha || deprecated
  return unless options

  if alpha
    raise ArgumentError, '`alpha` and `deprecated` arguments cannot be passed at the same time' \
      if deprecated

    options[:reason] = :alpha
  end

  new(**options)
end

Instance Method Details

#==(other) ⇒ Object Also known as: eql



45
46
47
48
49
50
51
# File 'lib/gitlab/graphql/deprecations/deprecation.rb', line 45

def ==(other)
  return false unless other.is_a?(self.class)

  [reason_text, milestone, replacement] == [:reason_text, :milestone, :replacement].map do |attr|
    other.send(attr) # rubocop: disable GitlabSecurity/PublicSend
  end
end

#alpha?Boolean

Returns:

  • (Boolean)


98
99
100
# File 'lib/gitlab/graphql/deprecations/deprecation.rb', line 98

def alpha?
  reason == REASON_ALPHA
end

#deprecation_reasonObject



90
91
92
93
94
95
96
# File 'lib/gitlab/graphql/deprecations/deprecation.rb', line 90

def deprecation_reason
  [
    reason_text,
    replacement && "Please use `#{replacement}`.",
    "#{changed_in_milestone}."
  ].compact.join(' ')
end

#edit_description(original_description) ⇒ Object



76
77
78
79
80
81
# File 'lib/gitlab/graphql/deprecations/deprecation.rb', line 76

def edit_description(original_description)
  @original_description = original_description
  return unless original_description

  original_description + description_suffix
end

#markdown(context: :inline) ⇒ Object



54
55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/gitlab/graphql/deprecations/deprecation.rb', line 54

def markdown(context: :inline)
  parts = [
    "#{changed_in_milestone(format: :markdown)}.",
    reason_text,
    replacement_markdown.then { |r| "Use: #{r}." if r }
  ].compact

  case context
  when :block
    ['WARNING:', *parts].join("\n")
  when :inline
    parts.join(' ')
  end
end

#original_descriptionObject



83
84
85
86
87
88
# File 'lib/gitlab/graphql/deprecations/deprecation.rb', line 83

def original_description
  return unless @original_description
  return @original_description if @original_description.ends_with?('.')

  "#{@original_description}."
end

#replacement_markdownObject



69
70
71
72
73
74
# File 'lib/gitlab/graphql/deprecations/deprecation.rb', line 69

def replacement_markdown
  return unless replacement.present?
  return "`#{replacement}`" unless replacement.include?('.') # only fully qualified references can be linked

  "[`#{replacement}`](##{replacement.downcase.tr('.', '')})"
end