Rails5: ActiveSupport::Durationでの数値へのパッチ

こんにちは、hachi8833です。 小ネタですが、RailsのActiveSupport::Durationで数値にどうやってパッチを当てているのかが気になったので見てみました。 ActiveSupport::Durationでの挙動 1.monthや2.daysなどでDurationになります。 require ‘active_support/all’ a = 1.month #=> 1 month a.class #=> ActiveSupport::Duration ついでに1のクラス階層も見てみます。 1.class #=> Integer 1.class.ancestors #=> [ActiveSupport::ToJsonWithActiveSupportEncoder, ActiveSupport::NumericWithFormat, Integer, JSON::Ext::Generator::GeneratorMethods::Integer, Numeric, Comparable, ActiveSupport::ToJsonWithActiveSupportEncoder, Object, JSON::Ext::Generator::GeneratorMethods::Object, ActiveSupport::Tryable, PP::ObjectMixin, Kernel, BasicObject] どうやらNumericWithFormatでやっているようです。 numeric/conversions.rbだった あっさり見つかりました。 active_support/core_ext/numeric/conversions.rb module ActiveSupport::NumericWithFormat … end # Ruby 2.4+ unifies Fixnum & Bignum into Integer. if 0.class == Integer … Continue reading Rails5: ActiveSupport::Durationでの数値へのパッチ