Rutas
/
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 mediante 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 añadida de este planteamiento es que podemos aprovechar un atajo cuando usamos la sintaxis de bloque. Cuando un bloque llama a un único método, puedes sustituir el bloque por &: 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 incluye algunas funcionalidades útiles para que tu código sea más fácil de manejar.

Cuando usamos clases que no son de la biblioteca principal (tu propio código en otros archivos, clases de la biblioteca estándar o dependencias externas), tenemos que 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 stock que creaste anteriormente. Desde que descubriste OpenStruct y los atajos de bloque, has decidido refactorizar un poco el código. En lugar de almacenar los artículos como hashes, vas a aprovechar tus nuevas habilidades.

1. Permitir la recuperación de artículos

Quieres seguir obteniendo el array de artículos en stock, 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 has aprendido 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 de 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 pestaña nueva
Ruby Exercism

¿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.