Trilhas
/
Ruby
Ruby
/
Exercícios
/
Melhorias do inventário da boutique
Melhorias do inventário da boutique

Melhorias do inventário da boutique

Exercício de aprendizagem

Introdução

O OpenStruct permite criar um objeto a partir de um Hash com facilidade. Em vez de precisar acessar usando as chaves do Hash, o OpenStruct permite usar métodos para acessar e definir valores.

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

Um bônus dessa abordagem é que podemos aproveitar um atalho ao usar a sintaxe de bloco. Quando um bloco chama um único método, você pode substituir o bloco por &: seguido do nome do método. Por exemplo, estas duas linhas são sinônimas:

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

Biblioteca padrão

Todas as classes que você viu nos exercícios anteriores faziam parte da Core Library do Ruby.

O OpenStruct faz parte da biblioteca padrão do Ruby (muitas vezes abreviada como "stdlib"), uma coleção de classes para trabalhar com coisas como datas, json e redes. Ela também oferece algumas funcionalidades úteis para deixar seu código mais fácil de trabalhar.

Ao usar classes que não vêm da Core Library (seu próprio código em outros arquivos, classes da biblioteca padrão ou dependências externas), precisamos importá-las com o método require antes de usá-las. Por exemplo:

require 'ostruct'

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

Instruções

Você continua trabalhando no sistema de gestão de estoque que construiu anteriormente. Depois de descobrir o OpenStruct e os atalhos de bloco, você decidiu refatorar um pouco o código. Em vez de armazenar os itens como hashes, você vai usar as habilidades que acabou de adquirir.

1. Permitir a recuperação de itens

Você quer continuar recuperando a lista de itens em estoque, mas desta vez eles devem ser objetos nos quais seja possível chamar 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. Refatorar item_names

Refatore item_names para usar o novo atalho de bloco que você aprendeu, em vez de hashes. Como lembrete, o método deve retornar:

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. Refatorar total_stock

Refatore total_stock para usar o método do OpenStruct, em vez de referenciar um hash. Como lembrete, o método deve retornar:

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 via GitHub O link abre em uma nova janela ou aba
Ruby Exercism

Tudo pronto para começar Melhorias do inventário da boutique?

Crie sua conta no Exercism para aprender e dominar Ruby com 21 conceitos121 exercícios e mentoria humana de verdade, tudo de graça.