Skip to content

Deprecation support for your project.

Notifications You must be signed in to change notification settings

mblumtritt/deprecations

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

65 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Deprecations

This gem provides transparent declaration of deprecated methods and classes. It's easy, small, has no dependencies and no overhead.

Installation

The simplest way to install Deprecations gem is to use Bundler.

Add Deprecations to your Gemfile:

gem 'deprecations'

and install it by running Bundler:

$ bundle add deprecations

To install the gem globally use:

$ gem install deprecations

Usage

After adding the gem to your project

require 'deprecations'

you can specify which methods and classes are deprecated. To mark a method as deprecated is quite easy:

class MySample
  def clear
    # something here
  end

  def clean
    clear
  end

  deprecated :clean, :clear, 'next version'
end

Whenever the method MySample#clean is called this warning appears:

warning: MySample#clean is deprecated and will be outdated next version. Please use MySample#clear instead.

Marking a complete class as deprecated will present the deprecation warning whenever this class is instantiated:

class MySample
  deprecated!

  # some more code here...
end

You can change the behavior of notifying:

Deprecations.behavior = :raise

There are 3 pre-defined behaviors:

  • :raise will raise an DeprecationException when a deprecated method is called
  • :silence will do nothing (ignore the deprecation)
  • :warn will print a warning (default behavior)

Besides this you can implement your own:

Deprecations.behavior =
  proc do |subject, _alternative, _outdated|
    SuperLogger.warning "deprecated: #{subject}"
  end

Any object responding to #call will be accepted as a valid handler.

Whenever you need to temporary change the standard behavior (like e.g. in your specs) you can do this like

Deprecations.with_behavior(:silent) { MyDeprecatedClass.new.do_some_magic }

Please have a look at the specs for detailed information and more samples.