Code Explainers

Ruby code explainers

ruby
require "time"
require "tzinfo"
 
module TimeConverter

Converting timestamps across time zones with TZInfo

timezones iso8601 parsing
Intermediate 8 steps
ruby
class Subscription < ApplicationRecord
  belongs_to :account
 
  enum :status, {

Modeling subscription lifecycle in Rails

enums scopes state-management
Intermediate 8 steps
ruby
class InactiveAccountCleanup
  BATCH_SIZE = 500
  INACTIVITY_THRESHOLD = 18.months
 

Batch-processing dormant users in Rails

batch-processing activerecord service-object
Intermediate 9 steps
ruby
class ArticleSerializer < ActiveModel::Serializer
  attributes :id, :title, :slug, :excerpt, :reading_time, :published_at, :url
 
  belongs_to :author, serializer: UserSerializer

Shaping API output with ActiveModel::Serializer in Rails

serialization json api computed attributes
Intermediate 9 steps
ruby
def collatz_lengths
  Enumerator.new do |y|
    n = 1
    loop do

Building infinite sequences with lazy enumerators

lazy-evaluation enumerators infinite-sequences
Intermediate 8 steps
ruby
require "set"
 
class FuzzySearch
  def initialize(candidates)

Building a ranked fuzzy search in Ruby

fuzzy-matching levenshtein ranking
Intermediate 9 steps
ruby
class SearchIndexReconciler
  DEBOUNCE_WINDOW = 5.seconds
 
  def self.schedule(record)

Debouncing search reindex jobs in Rails

debouncing background-jobs caching
Advanced 7 steps
ruby
class ParamCoercer
  TYPES = {
    integer: ->(v) { Integer(v) },
    float:   ->(v) { Float(v) },

Coercing request params by schema in Ruby

lambdas type-coercion lookup-table
Intermediate 7 steps
ruby
module Api
  module V2
    class ArticlesController < Api::BaseController
      before_action :set_article, only: %i[show update destroy]

Building a versioned JSON API controller in Rails

rest-api serialization pagination
Intermediate 10 steps
ruby
class ArticlesController < ApplicationController
  before_action :set_article, only: %i[show edit update destroy publish]
 
  def edit

Policy-based authorization in a Rails controller

authorization policy-object before-action
Intermediate 9 steps
ruby
class ArticlesController < ApplicationController
  DEFAULT_LIMIT = 25
  MAX_LIMIT = 100
 

Cursor-based pagination in a Rails controller

pagination cursor query-building
Intermediate 7 steps
ruby
module ConfigMerge
  module_function
 
  def deep_merge(base, override)

Recursively merging nested config hashes in Ruby

recursion hash-merge immutability
Intermediate 8 steps
ruby
module DeepFreeze
  module_function
 
  def call(obj)

Recursively freezing nested Ruby data

recursion immutability pattern matching
Intermediate 9 steps
ruby
class Webhooks::StripeController < ApplicationController
  skip_before_action :verify_authenticity_token
  skip_before_action :authenticate_user!
 

How a Rails Stripe webhook controller works

webhooks signature verification event dispatch
Intermediate 7 steps
ruby
class ReportGenerator
  def initialize(account, period)
    @account = account
    @period = period

Memoized report metrics in Ruby in Rails

memoization query-composition service-object
Intermediate 7 steps
ruby
class PurgeStaleExportsJob < ApplicationJob
  queue_as :maintenance
 
  retry_on ActiveRecord::Deadlocked, wait: :polynomially_longer, attempts: 5

Purging stale exports with an Active Job in Rails

background-jobs batching error-handling
Intermediate 7 steps
ruby
class EmailValidator < ActiveModel::EachValidator
  EMAIL_FORMAT = /\A[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,}\z/i
 
  def validate_each(record, attribute, value)

Writing a custom email validator in Rails

validation regex custom validators
Intermediate 7 steps
ruby
class ConfigFlattener
  def initialize(config)
    @config = config
  end

Flattening nested config into dotted keys

recursion hashes tree-traversal
Intermediate 8 steps