Module: ConcernsOnRails::Controllers::Deprecatable::ClassMethods

Defined in:
lib/concerns_on_rails/controllers/deprecatable.rb

Instance Method Summary collapse

Instance Method Details

#deprecate_actions(*actions, deprecated_at: nil, sunset_at: nil, link: nil, successor: nil, after_sunset: :headers, header_format: :rfc9745, notify: nil) ⇒ Object

Declare a deprecation rule. No positional actions = catch-all for the whole controller. Repeatable; rules accumulate (reassigned, never mutated, so subclasses inherit) and the LAST one matching the current action wins.



76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
# File 'lib/concerns_on_rails/controllers/deprecatable.rb', line 76

def deprecate_actions(*actions, deprecated_at: nil, sunset_at: nil, link: nil, successor: nil,
                      after_sunset: :headers, header_format: :rfc9745, notify: nil)
  actions = actions.flatten.map(&:to_s)
  after_sunset = after_sunset.to_sym
  header_format = header_format.to_sym

  deprecated_time = parse_deprecation_time(deprecated_at)
  sunset_time = sunset_at.nil? ? nil : parse_deprecation_time(sunset_at)
  validate_deprecate_actions!(deprecated_at: deprecated_at, deprecated_time: deprecated_time,
                              sunset_at: sunset_at, sunset_time: sunset_time, link: link,
                              successor: successor, after_sunset: after_sunset, notify: notify)
  unless VALID_HEADER_FORMATS.include?(header_format)
    raise ArgumentError, "#{LABEL}: :header_format must be one of #{VALID_HEADER_FORMATS.join(', ')}"
  end

  rule = { actions: actions, deprecated_at: deprecated_time, sunset_at: sunset_time,
           link: link, successor: successor, after_sunset: after_sunset,
           header_format: header_format, notify: notify }
  self.deprecatable_rules = deprecatable_rules + [rule]
end