class RestGW2::ItemDetail
Attributes
detail[R]
skins[R]
stats[R]
upgrades[R]
Public Instance Methods
fill(item)
click to toggle source
# File lib/rest-gw2/client/item_detail.rb, line 20 def fill item return item unless item s = item['skin'] u = item['upgrades'] f = item['infusions'] t = item['stats'] # Items might not have details, but they could still have upgrades! # Blame ANet for not populating whitelist for existing items. item.merge(detail[item['id']] || {}).merge( 'count' => item['count'] || 1, 'skin' => s && skins.dig(s, 0), 'upgrades' => u && u.flat_map(&upgrades.method(:[])), 'infusions' => f && f.flat_map(&upgrades.method(:[])), 'stats' => t && stats[t['id']].merge(t)) end
populate()
click to toggle source
# File lib/rest-gw2/client/item_detail.rb, line 9 def populate detail_promises = item_detail_group_by_id(raw) upgrades_promises = extract_items_in_slots('upgrades', 'infusions') stats_promises = [expand_stats_detail] @detail = detail_promises_to_map(detail_promises) @upgrades = detail_promises_to_map(upgrades_promises) @stats = detail_promises_to_map(stats_promises) @skins = client.all_skins.flatten.group_by{ |s| s['id'] } end
Private Instance Methods
detail_promises_to_map(promises)
click to toggle source
this is probably a dirty way to workaround converting hashes to arrays
# File lib/rest-gw2/client/item_detail.rb, line 75 def detail_promises_to_map promises promises.flat_map(&:itself).map(&:to_a).flatten.group_by{ |i| i['id'] }. inject({}){ |r, (id, v)| r[id] = v.inject(&:merge); r } end
expand_stats_detail()
click to toggle source
wiki.guildwars2.com/wiki/API:2/itemstats
# File lib/rest-gw2/client/item_detail.rb, line 67 def expand_stats_detail raw.map{ |i| i && i.dig('stats', 'id') }. compact.uniq.each_slice(100).map do |ids| client.get('v2/itemstats', :ids => ids.join(',')) end end
extract_items_in_slots(*slots)
click to toggle source
Returns Array[Promise[Array]]
# File lib/rest-gw2/client/item_detail.rb, line 53 def extract_items_in_slots *slots items = raw.flat_map do |i| if i i.values_at(*slots).flatten.compact.map do |id| {'id' => id} end else [] end end item_detail_group_by_id(items) end
item_detail_group_by_id(items)
click to toggle source
Returns Array[Promise[Array]] wiki.guildwars2.com/wiki/API:2/items wiki.guildwars2.com/wiki/API:2/commerce/prices
# File lib/rest-gw2/client/item_detail.rb, line 43 def item_detail_group_by_id items items.map{ |i| i && i['id'] }.compact.each_slice(100).map do |slice| q = {:ids => slice.join(',')} [client.get('v2/items', q), client.get('v2/commerce/prices', q, {:error_detector => false}.merge(opts))] end end