Códigos de Ruby que puedes usar desde hoy

Ruby

def process_user(user)
  user.tap { |u| puts "Usuario antes de cambios: #{u.inspect}" }
      .update(name: "Nuevo Nombre")
      .tap { |u| puts "Usuario después de la actualización del nombre: #{u.inspect}" }
      .activate!
      .tap { |u| puts "Usuario activado: #{u.inspect}" }
end

class User
  attr_accessor :name, :active

  def initialize(name)
    @name = name
    @active = false
  end

  def update(attributes)
    attributes.each { |key, value| send("#{key}=", value) if respond_to?("#{key}=") }
    self
  end

  def activate!
    @active = true
    self
  end
end

user = User.new("Usuario Viejo")
process_user(user)
# Salida:
# Usuario antes de cambios: #<User:0x000000010xxxxxxx @name="Usuario Viejo", @active=false>
# Usuario después de la actualización del nombre: #<User:0x000000010xxxxxxx @name="Nuevo Nombre", @active=false>
# Usuario activado: #<User:0x000000010xxxxxxx @name="Nuevo Nombre", @active=true>

Ruby

user = User.new("Alice")
puts user&.address&.city # Si user o address es nil, esto imprimirá nil sin error

user_sin_direccion = User.new("Bob")
puts user_sin_direccion&.address&.city # Imprime nil

Ruby

def with_greeting(&block)
  puts "¡Saludos!"
  block.call("Mundo") if block
  puts "¡Adiós!"
end

with_greeting { |place| puts "Hola, #{place}!" }
# Salida:
# ¡Saludos!
# Hola, Mundo!
# ¡Adiós!

def calculate(a, b, operation)
  operation.call(a, b)
end

add = ->(x, y) { x + y }
subtract = ->(x, y) { x - y }

puts calculate(5, 3, add)      # 8
puts calculate(10, 2, subtract) # 8

Ruby

persona = { nombre: "Carlos", edad: 35, ciudad: "Toluca" }
puts persona[:nombre] # Carlos
persona = {:nombre => "Carlos", :edad => 35, :ciudad => "Toluca"}

Ruby

# Iteración sobre un rango inclusivo
(1..5).each { |i| puts i } # Imprime 1, 2, 3, 4, 5

# Iteración sobre un rango exclusivo
(1...5).each { |i| puts i } # Imprime 1, 2, 3, 4

# Verificar si un valor está dentro de un rango
edad = 22
if (18..65).include?(edad)
  puts "Es adulto en edad laboral."
end

Ruby

resultado = "texto".upcase.yield_self { |t| t.reverse }.yield_self { |r| "Resultado final: #{r}" }
puts resultado # Resultado final: TXET

numero = [1, 2, 3].yield_self { |arr| arr.map { |x| x * 2 } }.yield_self { |dobles| dobles.sum }
puts numero # 12

Ruby

class Calculadora
  def sumar(a, b)
    a + b
  end

  def restar(a, b)
    a - b
  end
end

calc = Calculadora.new
operacion = :sumar
resultado = calc.send(operacion, 5, 3)
puts resultado # 8

operacion = "restar"
resultado = calc.send(operacion, 10, 4)
puts resultado # 6

Ruby

nombres = ["ana", "BETO", "carla"]
nombres_en_minusculas = nombres.map(&:downcase) # Uso común de &:symbol

nombres_filtrados = [1, "dos", 3, nil, 5].compact.map(&:itself)
puts nombres_filtrados.inspect # [1, "dos", 3, 5]

Ruby

arreglo = [0, 1, 2, 3, 4, 5]
puts arreglo.slice(2..4).inspect # [2, 3, 4]
puts arreglo.slice(1, 3).inspect  # [1, 2, 3]
puts arreglo.slice(-2..-1).inspect # [4, 5]

cadena = "Hola Mundo"
puts cadena.slice(5..9) # Mundo
puts cadena.slice(0, 4)  # Hola

Ruby

configuracion = {
  api: {
    version: "v1",
    endpoints: {
      users: "/users",
      products: "/products"
    }
  }
}

puts configuracion.dig(:api, :endpoints, :users) # /users
puts configuracion.dig(:api, :database, :host) # nil (no existe)
Scroll al inicio