diff --git a/README.md b/README.md index 50a9b79..dde0e4e 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ pairing with smart people at Hashrocket. For a steady stream of TILs, [sign up for my newsletter](https://crafty-builder-6996.ck.page/e169c61186). -_1513 TILs and counting..._ +_1514 TILs and counting..._ --- @@ -1040,6 +1040,7 @@ _1513 TILs and counting..._ - [Update Column Versus Update Attribute](rails/update-column-versus-update-attribute.md) - [Upgrading Your Manifest For Sprocket's 4](rails/upgrading-your-manifest-for-sprockets-4.md) - [Use IRB And Ruby Flags With Rails Console](rails/use-irb-and-ruby-flags-with-rails-console.md) +- [Useful ActiveSupport Constants For Durations](rails/useful-active-support-constants-for-durations.md) - [Validate Column Data With Check Constraints](rails/validate-column-data-with-check-constraints.md) - [Verify And Read A Signed Cookie Value](rails/verify-and-read-a-signed-cookie-value.md) - [Where Am I In The Partial Iteration?](rails/where-am-i-in-the-partial-iteration.md) diff --git a/rails/useful-active-support-constants-for-durations.md b/rails/useful-active-support-constants-for-durations.md new file mode 100644 index 0000000..461e7e4 --- /dev/null +++ b/rails/useful-active-support-constants-for-durations.md @@ -0,0 +1,45 @@ +# Useful ActiveSupport Constants For Durations + +Whenever I'm passing a duration to a function, I like to [name it with the +unit](https://ruudvanasseldonk.com/2022/03/20/please-put-units-in-names) +relative to the value it represents. For instance, if I need to pass in an hour +duration in seconds, I might write the following line: + +```ruby +hour_in_seconds = 60 * 60 + +# or + +hour_in_seconds = 3600 +``` + +ActiveSupport has a [Duration +class](https://api.rubyonrails.org/classes/ActiveSupport/Duration.html) with a +series of constants that we can reach for. + +```ruby +> ActiveSupport::Duration::SECONDS_PER_MINUTE +=> 60 +> ActiveSupport::Duration::SECONDS_PER_HOUR +=> 3600 +> ActiveSupport::Duration::SECONDS_PER_DAY +=> 86400 +> ActiveSupport::Duration::SECONDS_PER_WEEK +=> 604800 +> ActiveSupport::Duration::SECONDS_PER_MONTH +=> 2629746 +> ActiveSupport::Duration::SECONDS_PER_YEAR +=> 31556952 +``` + +Though it is fun to know about these, we should keep in mind that this class +provides support for what is likely to be a more useful abstraction layer: + +```ruby +> 1.hour +=> 1 hour +> 3.hours +=> 3 hours +> 1.day.to_i +=> 86400 +```