tcg-player-sdk 0.1.4 → 0.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 30c00bca03558c4b683d20e3ffec48dc5e843fdd5c7170c3410014ad3e2da619
4
- data.tar.gz: f5a805adc5ea41c1d09d1d0c9e62c72ad6fa5c8bd147e2cb1a24d2eeca1084f4
3
+ metadata.gz: 1f6eeb012e245a03c621cfbb4eb55882bed72fd12fd6f19e5aeaff128bf4b158
4
+ data.tar.gz: 5584cb03b502ad8450de6afe6e4517313acde7dc2259b8d0eac51c1df6bff061
5
5
  SHA512:
6
- metadata.gz: 6b24bdcb6d5a30ba9e1ec9bb682af8456331b0d74e418d734237699fbce048ffee172b2d15511f85c34b791fde8435b9ff84b37c5a11a2d6dea279f7a57e8ed1
7
- data.tar.gz: d77e338ace8d2605deb9c3c170e75078afea999cdf04f16c7548963d92ef63316b3060089b2540a33fb37c9875f3a991d51a886b6bcd121295993842cb44efe8
6
+ metadata.gz: 76338f3a710643a18677707569fbc84992e022d82f6bed3b0e9ebbb57b1e0543eda8a6866f0ca682396029e56dc7cdf65c15df8bf3f180fbe29bd594a681cd8e
7
+ data.tar.gz: 572e74efdc7619649ec6ce3201e3405be8c87f7c72f57ab7e088615dd11456cdde860fc62af9570075de274b0aaf5f80e6dbe1f438d6416450e5f2082f95fe82
@@ -1,18 +1,7 @@
1
1
  class TCGPlayerSDK::ProductPriceList < TCGPlayerSDK::ResponseStruct
2
2
 
3
- ##
4
- # Group prices by product ID. This will set
5
- # prices to an empty hash if there was an error. Check response.errors for details about any errors.
6
- #
7
- # @param _response[TCGPlayerSDK::ResponseStruct] the result of calling TCGPlayerAPI#product_pricing
8
3
  def initialize(hash = {})
9
4
  super
10
-
11
- if(self.success && self.results)
12
- @prices = self.results.map{|r| TCGPlayerSDK::ProductPrice.new(r)}.group_by{|r| r.productId}
13
- else
14
- @prices = {}
15
- end
16
5
  end
17
6
 
18
7
  ##
@@ -42,6 +31,12 @@ class TCGPlayerSDK::ProductPriceList < TCGPlayerSDK::ResponseStruct
42
31
  #
43
32
  # @return [Hash<Integer, Array<TCGPlayerSDK::ProductPrice>>]
44
33
  def prices
34
+ if(self.success && self.results)
35
+ @prices ||= self.results.map{|r| TCGPlayerSDK::ProductPrice.new(r)}.group_by{|r| r.productId}
36
+ else
37
+ @prices = {}
38
+ end
39
+
45
40
  @prices
46
41
  end
47
42
 
@@ -50,13 +45,15 @@ class TCGPlayerSDK::ProductPriceList < TCGPlayerSDK::ResponseStruct
50
45
  #
51
46
  # @return [Hash<Integer, Array<TCGPlayerSDK::ProductPrice>>]
52
47
  def valid_prices
53
- valid_prices = {}
54
- @prices.each do |id, prl|
55
- valid_prices[id] ||= []
56
- valid_prices[id] = prl.select{|pr| pr.has_valid_prices?}
48
+ if(@valid_prices.nil?)
49
+ @valid_prices = {}
50
+ @prices.each do |id, prl|
51
+ @valid_prices[id] ||= []
52
+ @valid_prices[id] = prl.select{|pr| pr.has_valid_prices?}
53
+ end
57
54
  end
58
55
 
59
- return valid_prices
56
+ return @valid_prices
60
57
  end
61
58
  end
62
59
 
@@ -80,4 +77,14 @@ class TCGPlayerSDK::ProductPrice < TCGPlayerSDK::ResponseStruct
80
77
  def has_valid_prices?
81
78
  return !(lowPrice.nil? && midPrice.nil? && highPrice.nil? && directLowPrice.nil? && marketPrice.nil?)
82
79
  end
80
+
81
+ ##
82
+ # Returns "price points" described by this price object. i.e. "midPrice" and "highPrice". These are also accessors,
83
+ # so access away
84
+ # price.points.each{|pp| puts price.send(pp)}
85
+ #
86
+ # @return Array<Symbol>
87
+ def points
88
+ self.keys.select{|k| k.to_s =~ /Price/i}
89
+ end
83
90
  end
@@ -155,18 +155,21 @@ class TCGPlayerSDK
155
155
  # https://docs.tcgplayer.com/reference/catalog_getproduct-1
156
156
  #
157
157
  def product_details(_ids, params = {})
158
- ids = id_list(_ids)
159
- query("#{CATALOG_URL}/products/#{ids}", params)
158
+ slice_ids(_ids) do |slice|
159
+ query("#{CATALOG_URL}/products/#{id_list(slice)}", params)
160
+ end
160
161
  end
161
162
 
162
163
  ##
163
164
  # Accessor to https://docs.tcgplayer.com/reference/pricing_getproductprices-1
165
+ # Automatically handles arbitrarily large number of _ids and provides one merged response
164
166
  #
165
167
  # @param _ids An array of product IDs to query
166
168
  # @return [TCGPlayerSDK::ProductPriceList]
167
169
  def product_pricing(_ids)
168
- ids = id_list(_ids)
169
- TCGPlayerSDK::ProductPriceList.new(query("#{PRICING_URL}/product/#{ids}"))
170
+ slice_ids(_ids) do |slice|
171
+ TCGPlayerSDK::ProductPriceList.new(query("#{PRICING_URL}/product/#{id_list(slice)}"))
172
+ end
170
173
  end
171
174
 
172
175
  private
@@ -179,4 +182,23 @@ class TCGPlayerSDK
179
182
  def id_list(value)
180
183
  value.is_a?(Array) ? value.join(',') : value
181
184
  end
185
+
186
+ ##
187
+ # Slice the input ids into smaller pieces, and execute the given block with each slice. Merge the results
188
+ def slice_ids(_ids, slice_size=200)
189
+ ids = _ids.is_a?(Array) ? _ids : [_ids]
190
+ resp = nil
191
+
192
+ ids.each_slice(slice_size) do |slice|
193
+ response = yield(slice)
194
+ if(resp.nil?)
195
+ resp = response
196
+ else
197
+ resp.results += response.results if(response.results && resp.results)
198
+ end
199
+ end
200
+
201
+ return resp
202
+ end
203
+
182
204
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tcg-player-sdk
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Carl Svensson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-02-25 00:00:00.000000000 Z
11
+ date: 2022-02-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: http