Mark Boulder
Mark Boulder

Reputation: 14277

When to use Hashie::Mash?

Working on fetching some products from this JSON API and I was wondering -- do I really need Hashie::Mash?

Live app: http://runnable.com/U-QJCIFvY2RGWL9B/pretty-json-keys

main_controller.rb:

response = prettify(JSON.parse(@json_text))
mashie = Hashie::Mash.new(response)

@products = []
mashie.products.each do |product|
  product.extend Hashie::Extensions::DeepFetch

  product.price = product.deep_fetch :sale_price

  @products << product
end
@products

I tried this:

response = prettify(JSON.parse(@json_text)['products'])

@products = []
response.each do |product|
  product.extend Hashie::Extensions::DeepFetch

  product.price = product.deep_fetch :sale_price

  @products << product
end
@products

but that returns:

Hashie::Extensions::DeepFetch::UndefinedPathError in MainController#index
Could not fetch path (sale_price) at sale_price

Upvotes: 2

Views: 4631

Answers (1)

Thiago Borges
Thiago Borges

Reputation: 193

You probably want to do something like this:

mashie.products.each do |product|
  product.extend Hashie::Extensions::DeepFetch

  product.price = product.deep_fetch(:sale_price) { 'Not Found' }
  # Returns 'Not Found' if it does not find the key sale_price. It can be anything, like nil, 0, 'Not Found'

  @products << product
end

Upvotes: 5

Related Questions