Stop ActiveSupport Anywhere
Goal
We love ruby and ruby community. We can find excellent web (and not only web) frameworks like rails, hanami, grape, sinatra, dry-wb, roda, etc. But sometimes some developers use rails dependency in gems which not related to use only with rails. That's why the main idea of this repo is to collect all libraries which you can use instead using ActiveSupport
Some Problems with ActiveSupport
ActiveSupport is a "toolkit of support libraries and Ruby core extensions extracted from the Rails framework". Core extensions is a prettier name for monkey-patches of Ruby core classes. Monkey-patching breaks fundamental contracts with the language core - with deadly consequences.
Monkey-patching hinders interoperability. Any piece of Ruby software is written to work either in the monkey-patch-free environment, or in the monkey-patched one. Sure: with a bit of luck, many work in both. But won't your gem break with the next release of ActiveRecord (which it itself doesn't rely on at all)? Noone can say in advance.
When it is Permissible to Depend on ActiveSupport?
"You are definitely allowed to shoot yourself in the foot, if you really want to." It is only responsible to rely on ActiveSupport (or another similar ton of monkey-patches) if you are in position of the "lord of the stack", i.e., if you are developing an application, and you are the only one who decides forever, which components will interoperate. Libraries, aiming to be general tools, maximally interoperable with others, as well as applications open to extensions, must never pollute the runtime environment by monkey-patching.
Blog Posts
TODO
- collect all gems or solutions which can replace some parts of AS (current status)
- filter all this information
- create list of not only rails gems which use AS and try to fix it
Table of contents
- ActiveSupport::ArrayInquirer
- ActiveSupport::BacktraceCleaner
- ActiveSupport::Callbacks
- ActiveSupport::Configurable
- ActiveSupport::Concurrency
- ActiveSupport::Deprecation
- ActiveSupport::Duration
- ActiveSupport::Gzip
- ActiveSupport::HashWithIndifferentAccess
- ActiveSupport::Inflector
- ActiveSupport::LazyLoadHooks
- ActiveSupport::Notifications
- ActiveSupport::NumberHelper
- ActiveSupport::NumericWithFormat
- ActiveSupport::RangeWithFormat
- ActiveSupport::TimeWithZone
- ActiveSupport::CoreExtensions
Features
date formatters
ActiveSupport::ArrayInquirer
Alternatives
# instead of:
[:blue, :green].blue?
# do this:
[:blue, :green].include?(:blue)
ActiveSupport::BacktraceCleaner
Alternatives
- gem: Morozzzko/backtrace_cleaner link
ActiveSupport::Callbacks
Alternatives
ActiveSupport::Configurable
Alternatives
- gem: dry-configurable link
- gem: markevans/configurable link
- gem: ged/configurability link
- post: Ruby Gem Configuration Patterns link
- post: MyGem.configure Block link
ActiveSupport::Concurrency
Alternatives
- ruby-concurrency link
ActiveSupport::Deprecation
Alternatives
- core library: Gem::Deprecate link
- gem: Hanami::Deprecation link
- gem: erikh/deprecated link
- gem: cbeer/deprecation link
ActiveSupport::Duration
Alternatives
ActiveSupport::Gzip
Alternatives
ActiveSupport::HashWithIndifferentAccess
Alternatives
- core library: OpenStruct link
ActiveSupport::Inflector
Alternatives
ActiveSupport::LazyLoadHooks
Alternatives
none
ActiveSupport::Notifications
Alternatives
ActiveSupport::NumberHelper
Alternatives
- core library:
Kernel#sprintf
link
ActiveSupport::NumericWithFormat
Alternatives
none
ActiveSupport::RangeWithFormat
Alternatives
none
ActiveSupport::TimeWithZone
Alternatives
ActiveSupport::CoreExtensions
Integer
Not rails specific gems which use AS as dependency
Contribute
Contributions welcome!