Tracks
/
Ruby
Ruby
/
Ejercicios
/
Mejoras del inventario de la boutique
Mejoras del inventario de la boutique

Mejoras del inventario de la boutique

Ejercicio de aprendizaje

Introducción

OpenStruct te permite crear un objeto a partir de un Hash con facilidad. En lugar de tener que acceder usando las claves del Hash, OpenStruct nos permite usar métodos para acceder a los valores y establecerlos.

attributes = { name: "Jeremy Walker", age: 21, location: "Nomadic" }
person = OpenStruct.new(attributes)

person.name
#=> Jeremy Walker

person.location
#=> Nomadic

# Update the age
person.age = 35

# It sets correctly
person.age
#=> 35

Una ventaja adicional de este enfoque es que podemos aprovechar un atajo cuando usamos la sintaxis de bloque. Cuando un bloque llama a un solo método, puedes reemplazar el bloque con &: seguido del nombre del método. Por ejemplo, estas dos líneas son sinónimas:

people.sum { |person| person.age }
people.sum(&:age)

Biblioteca Estándar

Todas las clases que has visto en los ejercicios anteriores forman parte de la Biblioteca Principal de Ruby.

OpenStruct forma parte de la Biblioteca Estándar de Ruby (a menudo abreviada como «stdlib»), una colección de clases para trabajar con cosas como fechas, json y redes. También ofrece algunas funcionalidades útiles para que tu código sea más fácil de manejar.

Cuando usas clases que no son de la Biblioteca Principal (tu propio código en otros archivos, clases de la stdlib o dependencias externas), necesitamos importarlas con el método require antes de poder usarlas. Por ejemplo:

require 'ostruct'

person = OpenStruct.new(name: "Jeremy Walker")
# ...

Instrucciones

Sigues trabajando en el sistema de gestión de inventario que construiste antes. Desde que descubriste OpenStruct y los atajos de bloque, decidiste refactorizar un poco el código. En lugar de guardar los artículos como hashes, vas a aprovechar tus nuevas habilidades.

1. Permite recuperar los artículos

Quieres seguir recuperando la lista de artículos en inventario, pero esta vez deben ser objetos a los que se les puedan llamar métodos.

inventory = BoutiqueInventory.new([
  {price: 65.00, name: "Maxi Brown Dress", quantity_by_size: {s: 3, m: 7, l: 8, xl: 4}},
  {price: 50.00, name: "Red Short Skirt", quantity_by_size: {}},
  {price: 29.99, name: "Black Short Skirt", quantity_by_size: {s: 1, xl: 4}},
  {price: 20.00, name: "Bamboo Socks Cats", quantity_by_size: {s: 7, m: 2}}
])

inventory.items.first.name
# => "Maxi Brown Dress"

inventory.items.first.price
# => 65

inventory.items.size
# => 4

2. Refactoriza item_names

Refactoriza item_names para que use el nuevo atajo de bloque que aprendiste en lugar de hashes. Como recordatorio, el método debe devolver:

BoutiqueInventory.new([
  {price: 65.00, name: "Maxi Brown Dress", quantity_by_size: {s: 3, m: 7, l: 8, xl: 4}},
  {price: 50.00, name: "Red Short Skirt", quantity_by_size: {}},
  {price: 29.99, name: "Black Short Skirt", quantity_by_size: {s: 1, xl: 4}},
  {price: 20.00, name: "Bamboo Socks Cats", quantity_by_size: {s: 7, m: 2}}
]).item_names

# => ["Bamboo Socks Cats", "Black Short Skirt", "Maxi Brown Dress", "Red Short Skirt"]

3. Refactoriza total_stock

Refactoriza total_stock para que use el método del OpenStruct en lugar de referenciar un hash. Como recordatorio, el método debe devolver:

BoutiqueInventory.new([
  {price: 65.00, name: "Maxi Brown Dress", quantity_by_size: {s: 3, m: 7, l: 8, xl: 4}},
  {price: 50.00, name: "Red Short Skirt", quantity_by_size: {}},
  {price: 29.99, name: "Black Short Skirt", quantity_by_size: {s: 1, xl: 4}},
  {price: 20.00, name: "Bamboo Socks Cats", quantity_by_size: {s: 7, m: 2}}
]).total_stock

# => 36
Editar en GitHub El enlace se abre en una ventana o una pestaña nuevas
Ruby Exercism

¿Todo listo para empezar Mejoras del inventario de la boutique?

Regístrate en Exercism para aprender y dominar Ruby con 21 conceptos121 ejercicios y mentoría humana real, todo gratis.