Sha256: 9f01205e5f8dd03d69cf18380a36eac14935d467df34f5c6148f98a076c7c373

Contents?: true

Size: 1.35 KB

Versions: 1

Compression:

Stored size: 1.35 KB

Contents

module WarningSigns
  class Deprecation
    attr_accessor :message, :source, :category, :backtrace

    def initialize(message, source:, category: nil, backtrace: nil)
      @message = message
      @source = source.to_s.downcase.inquiry
      @category = category
      @backtrace = backtrace
    end

    def handler
      World.instance.handler_for(self)
    end

    # force raise to be the last element if it is present
    def behaviors
      result = (handler&.environment&.behaviors || []).inquiry
      return result unless result.raise?
      (result - ["raise"]) << "raise"
    end

    def backtrace_lines
      lines = handler&.backtrace_lines || 0
      return "" if lines.zero?
      backtrace[1..lines].join("\n")
    end

    def invoke
      behaviors.each do |behavior|
        case behavior
        when "raise"
          raise UnhandledDeprecationError, message
        when "log"
          Rails.logger.warn(message)
          backtrace_lines.split("\n").each { Rails.logger.warn(_1) }
        when "stderr"
          $stderr.puts(message) # standard:disable Style/StderrPuts
          $stderr.puts(backtrace_lines) # standard:disable Style/StderrPuts
        when "stdout"
          $stdout.puts(message) # standard:disable Style/StdoutPuts
          $stdout.puts(backtrace_lines) # standard:disable Style/StdoutPuts
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
warning_signs-0.5.0 lib/warning_signs/deprecation.rb