class NintendoEshop::Game
Attributes
art[RW]
categories[RW]
description[RW]
esrb[RW]
id[RW]
msrp[RW]
object_id[RW]
platform[RW]
release_date[RW]
sale_price[RW]
title[RW]
url[RW]
Public Class Methods
new(id: nil, object_id: nil)
click to toggle source
# File lib/nintendo_eshop/game.rb, line 16 def initialize(id: nil, object_id: nil) self.id = id self.object_id = object_id end
retrieve_by(id_type = {})
click to toggle source
# File lib/nintendo_eshop/game.rb, line 48 def retrieve_by(id_type = {}) validate_argument(id_type) instance = new(id_type) instance.refresh end
Private Class Methods
validate_argument(argument)
click to toggle source
# File lib/nintendo_eshop/game.rb, line 56 def validate_argument(argument) valid_args = argument.keys == [:id] || argument.keys == [:object_id] raise InvalidArgumentError, "Only id: and object_id: have been implemented" unless valid_args end
Public Instance Methods
current_price()
click to toggle source
# File lib/nintendo_eshop/game.rb, line 35 def current_price sale_price || msrp end
refresh()
click to toggle source
# File lib/nintendo_eshop/game.rb, line 21 def refresh response = request(:post, to_json: body) result = if response.dig(:hits)&.any? response.dig(:hits, 0) elsif response.dig(:results)&.any? response.dig(:results, 0) else raise InvalidRequestError, "ID not found" end refresh_object(result) self end
release_date_pretty()
click to toggle source
# File lib/nintendo_eshop/game.rb, line 39 def release_date_pretty release_date.strftime("%b %d, %Y") end
sale_percent()
click to toggle source
# File lib/nintendo_eshop/game.rb, line 43 def sale_percent ((1 - (sale_price / msrp)).round(2) * 100).to_i.to_s + "%" if sale_price end
Private Instance Methods
body()
click to toggle source
# File lib/nintendo_eshop/game.rb, line 64 def body if id query_body elsif object_id object_body end end
object_body()
click to toggle source
# File lib/nintendo_eshop/game.rb, line 81 def object_body { "requests": [ { "indexName": "noa_aem_game_en_us", "objectID": object_id.to_s, "attributesToRetrieve": "boxArt,categories,description,esrb,msrp,nsuid,objectID,platform,releaseDateMask,salePrice,title,url" # rubocop:disable Metrics/LineLength } ] } end
query_body()
click to toggle source
# File lib/nintendo_eshop/game.rb, line 72 def query_body { "query": id.to_s, "restrictSearchableAttributes": [ "nsuid" ] } end
refresh_object(result)
click to toggle source
# File lib/nintendo_eshop/game.rb, line 101 def refresh_object(result) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength self.art = "https://www.nintendo.com#{result.dig(:boxArt)}" self.categories = result.dig(:categories) self.description = result.dig(:description).tr("\n", " ").squeeze self.esrb = result.dig(:esrb) self.id = result.dig(:nsuid) self.msrp = result.dig(:msrp) self.object_id = result.dig(:objectID) self.platform = result.dig(:platform) self.release_date = Date.parse(result.dig(:releaseDateMask)) self.sale_price = result.dig(:salePrice) self.title = result.dig(:title) self.url = "https://www.nintendo.com#{result.dig(:url)}" end
resource_path()
click to toggle source
# File lib/nintendo_eshop/game.rb, line 93 def resource_path if id "/1/indexes/noa_aem_game_en_us/query".freeze elsif object_id "/1/indexes/*/objects".freeze end end