gun_broker 1.2.1.1 → 1.3.0
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 +4 -4
- data/README.md +13 -0
- data/lib/gun_broker.rb +1 -0
- data/lib/gun_broker/items_as_page.rb +22 -0
- data/lib/gun_broker/user.rb +8 -0
- data/lib/gun_broker/user/items_as_pages_delegate.rb +98 -0
- data/lib/gun_broker/user/items_delegate.rb +17 -35
- data/lib/gun_broker/version.rb +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d6a5514db1a0faf10391363483a843c4566e5d8a
|
4
|
+
data.tar.gz: a249bf76f5d92a7ad4fba9a1d87d798eec830512
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fa2b60ad095be332d187c3038fd344de3d3b269d8bea02bda64b83fa2cb925556ed850ed9f05b9e99ec3f8fbabdbe95ba3173572a297939710bbaf0f743597a4
|
7
|
+
data.tar.gz: c5ec2af3222e2b7239f52caff4da01c69c6e44777ee6a86d14910f5b391a4b2d4a5c47984542a37f1e6a474f2653316cb3159b6a4ad84920409f9d7e39989fb9
|
data/README.md
CHANGED
@@ -114,6 +114,19 @@ GunBroker::Item.find(123)
|
|
114
114
|
To raise a `GunBroker::Error::NotFound` exception if no Item can be found, use `Item.find!`.
|
115
115
|
|
116
116
|
|
117
|
+
### GunBroker::ItemsAsPage
|
118
|
+
|
119
|
+
Represents a page of items (listings) on GunBroker, allowing for querying to be done in chunks to prevent memory leaks. The `ItemsAsPage#fetch_items` method fetches the associated items for the given page.
|
120
|
+
|
121
|
+
```ruby
|
122
|
+
items_as_pages.each do |page_of_items|
|
123
|
+
page_of_items.fetch_items.each do |item|
|
124
|
+
puts item.id
|
125
|
+
end
|
126
|
+
end
|
127
|
+
```
|
128
|
+
|
129
|
+
|
117
130
|
### GunBroker::Category
|
118
131
|
|
119
132
|
Returns GunBroker category responses. To get an array of all categories, call `Category.all`.
|
data/lib/gun_broker.rb
CHANGED
@@ -0,0 +1,22 @@
|
|
1
|
+
module GunBroker
|
2
|
+
# Represents a page of GunBroker items (listings).
|
3
|
+
class ItemsAsPage
|
4
|
+
|
5
|
+
# @param attrs [Hash] The attributes required to fetch items from the API.
|
6
|
+
def initialize(attributes = {})
|
7
|
+
@attributes = attributes
|
8
|
+
end
|
9
|
+
|
10
|
+
# @return [Array<Item>]
|
11
|
+
def fetch_items
|
12
|
+
@attributes[:params].merge!({
|
13
|
+
'PageIndex' => @attributes[:page_index],
|
14
|
+
'PageSize' => @attributes[:page_size]
|
15
|
+
})
|
16
|
+
response = GunBroker::API.get(@attributes[:endpoint], @attributes[:params], @attributes[:token_header])
|
17
|
+
|
18
|
+
response['results'].map { |result| GunBroker::Item.new(result) }
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
end
|
data/lib/gun_broker/user.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'gun_broker/token_header'
|
2
2
|
require 'gun_broker/user/items_delegate'
|
3
|
+
require 'gun_broker/user/items_as_pages_delegate'
|
3
4
|
|
4
5
|
module GunBroker
|
5
6
|
# Represents a GunBroker User.
|
@@ -86,6 +87,13 @@ module GunBroker
|
|
86
87
|
@items_delegate ||= ItemsDelegate.new(self)
|
87
88
|
end
|
88
89
|
|
90
|
+
# (see ItemsAsPagesDelegate)
|
91
|
+
# See the {ItemsAsPagesDelegate} docs.
|
92
|
+
# @return [ItemsAsPagesDelegate]
|
93
|
+
def items_as_pages(options = {})
|
94
|
+
@items_as_pages_delegate ||= ItemsAsPagesDelegate.new(self, options)
|
95
|
+
end
|
96
|
+
|
89
97
|
private
|
90
98
|
|
91
99
|
# @return [Boolean] `true` if `@username` is present and either `@password` *or* `@token` is present.
|
@@ -0,0 +1,98 @@
|
|
1
|
+
require 'gun_broker/token_header'
|
2
|
+
|
3
|
+
module GunBroker
|
4
|
+
class User
|
5
|
+
# Used to scope {ItemsAsPage} actions by {User}.
|
6
|
+
class ItemsAsPagesDelegate
|
7
|
+
|
8
|
+
include GunBroker::TokenHeader
|
9
|
+
|
10
|
+
# @param user [User] A {User} instance to scope item pages by.
|
11
|
+
# @param options [Hash] { items_per_page => <number of desired items per page> (Integer) }.
|
12
|
+
def initialize(user, options = {})
|
13
|
+
max_page_size = GunBroker::API::PAGE_SIZE
|
14
|
+
@user = user
|
15
|
+
@items_per_page = options.fetch(:items_per_page, max_page_size)
|
16
|
+
|
17
|
+
if @items_per_page > max_page_size
|
18
|
+
raise ArgumentError.new("`items_per_page` may not exceed #{max_page_size}")
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
# Returns pages for all the the User's items (both selling and not selling).
|
23
|
+
# @note {API#get! GET} /Items
|
24
|
+
# @return [Array<ItemsAsPage>]
|
25
|
+
def all
|
26
|
+
# NOTE: this endpoint will not return items that were sold
|
27
|
+
@all ||= build_pages_for(:Items, { 'SellerName' => @user.username })
|
28
|
+
end
|
29
|
+
|
30
|
+
# Returns pages for all items the User has bid on.
|
31
|
+
# @note {API#get! GET} /ItemsBidOn
|
32
|
+
# @return [Array<ItemsAsPage>]
|
33
|
+
def bid_on
|
34
|
+
@bid_on ||= build_pages_for(:ItemsBidOn)
|
35
|
+
end
|
36
|
+
|
37
|
+
# Returns pages for items the User has bid on, but not won.
|
38
|
+
# @note {API#get! GET} /ItemsNotWon
|
39
|
+
# @return [Array<ItemsAsPage>]
|
40
|
+
def not_won
|
41
|
+
@not_won ||= build_pages_for(:ItemsNotWon)
|
42
|
+
end
|
43
|
+
|
44
|
+
# Returns pages for items that are currently selling.
|
45
|
+
# @note {API#get! GET} /Items
|
46
|
+
# @return [Array<ItemsAsPage>]
|
47
|
+
def selling
|
48
|
+
@selling ||= build_pages_for(:Items, { 'SellerName' => @user.username })
|
49
|
+
end
|
50
|
+
|
51
|
+
# Returns pages for items the User has sold.
|
52
|
+
# @note {API#get! GET} /ItemsSold
|
53
|
+
# @return [Array<ItemsAsPage>]
|
54
|
+
def sold
|
55
|
+
@sold ||= build_pages_for(:ItemsSold)
|
56
|
+
end
|
57
|
+
|
58
|
+
# Returns pages for items that were listed, but not sold.
|
59
|
+
# @note {API#get! GET} /ItemsUnsold
|
60
|
+
# @return [Array<ItemsAsPage>]
|
61
|
+
def unsold
|
62
|
+
@unsold ||= build_pages_for(:ItemsUnsold)
|
63
|
+
end
|
64
|
+
|
65
|
+
# Returns pages for items the User has won.
|
66
|
+
# @note {API#get! GET} /ItemsWon
|
67
|
+
# @return [Array<ItemsAsPage>]
|
68
|
+
def won
|
69
|
+
@won ||= build_pages_for(:ItemsWon)
|
70
|
+
end
|
71
|
+
|
72
|
+
private
|
73
|
+
|
74
|
+
def build_pages_for(endpoint, params = {})
|
75
|
+
endpoint = ['/', endpoint.to_s].join
|
76
|
+
_token_header = token_header(@user.token)
|
77
|
+
response = GunBroker::API.get(endpoint, params.merge({ 'PageSize' => 1 }), _token_header)
|
78
|
+
number_of_pages = (response['count'] / @items_per_page.to_f).ceil
|
79
|
+
items_as_pages = []
|
80
|
+
|
81
|
+
number_of_pages.times do |page_number|
|
82
|
+
page_number += 1
|
83
|
+
attrs = {
|
84
|
+
page_size: @items_per_page,
|
85
|
+
page_index: page_number,
|
86
|
+
endpoint: endpoint,
|
87
|
+
params: params,
|
88
|
+
token_header: _token_header
|
89
|
+
}
|
90
|
+
|
91
|
+
items_as_pages << GunBroker::ItemsAsPage.new(attrs)
|
92
|
+
end
|
93
|
+
|
94
|
+
items_as_pages
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
@@ -19,20 +19,14 @@ module GunBroker
|
|
19
19
|
# @return [Array<Item>]
|
20
20
|
def all
|
21
21
|
# NOTE: this endpoint will not return items that were sold
|
22
|
-
|
23
|
-
params = { 'SellerName' => @user.username }
|
24
|
-
|
25
|
-
@all ||= fetch_items(endpoint, params)
|
22
|
+
@all ||= fetch_items(:Items, { 'SellerName' => @user.username })
|
26
23
|
end
|
27
24
|
|
28
25
|
# Returns all the items the User has bid on.
|
29
26
|
# @note {API#get! GET} /ItemsBidOn
|
30
|
-
# @raise (see #all)
|
31
27
|
# @return [Array<Item>]
|
32
28
|
def bid_on
|
33
|
-
|
34
|
-
|
35
|
-
@bid_on ||= fetch_items(endpoint)
|
29
|
+
@bid_on ||= fetch_items(:ItemsBidOn)
|
36
30
|
end
|
37
31
|
|
38
32
|
# Sends a multipart/form-data POST request to create an Item with the given `attributes`.
|
@@ -66,7 +60,6 @@ module GunBroker
|
|
66
60
|
end
|
67
61
|
|
68
62
|
# Same as {#find} but raises GunBroker::Error::NotFound if no item is found.
|
69
|
-
# @raise (see #all)
|
70
63
|
# @raise [GunBroker::Error::NotFound] If the User has no Item with `item_id`.
|
71
64
|
# @return [Item] Returns the Item or `nil` if no Item found.
|
72
65
|
def find!(item_id)
|
@@ -77,12 +70,9 @@ module GunBroker
|
|
77
70
|
|
78
71
|
# Items the User has bid on, but not won.
|
79
72
|
# @note {API#get! GET} /ItemsNotWon
|
80
|
-
# @raise (see #all)
|
81
73
|
# @return [Array<Item>]
|
82
74
|
def not_won
|
83
|
-
|
84
|
-
|
85
|
-
@not_won ||= fetch_items(endpoint)
|
75
|
+
@not_won ||= fetch_items(:ItemsNotWon)
|
86
76
|
end
|
87
77
|
|
88
78
|
# Returns Items that are currently selling.
|
@@ -92,40 +82,35 @@ module GunBroker
|
|
92
82
|
# @raise [GunBroker::Error::RequestError] If there's an issue with the request (usually a `5xx` response).
|
93
83
|
# @return [Array<Item>]
|
94
84
|
def selling(options = {})
|
95
|
-
endpoint = :Items
|
96
85
|
params = {
|
97
|
-
'ItemID'
|
98
|
-
'SellerName'
|
86
|
+
'ItemID' => (options[:item_id] || options["ItemID"]),
|
87
|
+
'SellerName' => @user.username,
|
99
88
|
}.delete_if { |k, v| v.nil? }
|
100
89
|
|
101
|
-
@selling ||= fetch_items(
|
90
|
+
@selling ||= fetch_items(:Items, params)
|
102
91
|
end
|
103
92
|
|
104
93
|
# Items the User has sold.
|
105
94
|
# @param options [Hash] {ItemID=>ItemID}.
|
106
95
|
# @note {API#get! GET} /ItemsSold
|
107
|
-
# @raise (see #all)
|
108
96
|
# @return [Array<Item>]
|
109
97
|
def sold(options = {})
|
110
|
-
endpoint = :ItemsSold
|
111
98
|
params = {
|
112
|
-
'ItemID'
|
99
|
+
'ItemID' => (options[:item_id] || options["ItemID"])
|
113
100
|
}.delete_if { |k, v| v.nil? }
|
114
101
|
|
115
|
-
@sold ||= fetch_items(
|
102
|
+
@sold ||= fetch_items(:ItemsSold, params)
|
116
103
|
end
|
117
104
|
|
118
105
|
# Items that were listed, but not sold.
|
119
106
|
# @note {API#get! GET} /ItemsUnsold
|
120
|
-
# @raise (see #all)
|
121
107
|
# @return [Array<Item>]
|
122
108
|
def unsold(options = {})
|
123
|
-
endpoint = :ItemsUnsold
|
124
109
|
params = {
|
125
|
-
'ItemID'
|
110
|
+
'ItemID' => (options[:item_id] || options["ItemID"])
|
126
111
|
}.delete_if { |k, v| v.nil? }
|
127
112
|
|
128
|
-
@unsold ||= fetch_items(
|
113
|
+
@unsold ||= fetch_items(:ItemsUnsold, params)
|
129
114
|
end
|
130
115
|
|
131
116
|
# Updates an {Item} with the given attributes.
|
@@ -150,12 +135,9 @@ module GunBroker
|
|
150
135
|
|
151
136
|
# Items the User has won.
|
152
137
|
# @note {API#get! GET} /ItemsWon
|
153
|
-
# @raise (see #all)
|
154
138
|
# @return [Array<Item>]
|
155
139
|
def won
|
156
|
-
|
157
|
-
|
158
|
-
@won ||= fetch_items(endpoint)
|
140
|
+
@won ||= fetch_items(:ItemsWon)
|
159
141
|
end
|
160
142
|
|
161
143
|
private
|
@@ -164,16 +146,16 @@ module GunBroker
|
|
164
146
|
endpoint = ['/', endpoint.to_s].join
|
165
147
|
params.merge!({ 'PageSize' => GunBroker::API::PAGE_SIZE })
|
166
148
|
response = GunBroker::API.get(endpoint, params, token_header(@user.token))
|
167
|
-
|
149
|
+
number_of_pages = (response['count'] / GunBroker::API::PAGE_SIZE.to_f).ceil
|
168
150
|
|
169
|
-
if
|
151
|
+
if number_of_pages > 1
|
170
152
|
_items_from_results = items_from_results(response['results'])
|
171
153
|
|
172
|
-
|
173
|
-
|
174
|
-
next if
|
154
|
+
number_of_pages.times do |page_number|
|
155
|
+
page_number += 1
|
156
|
+
next if page_number == 1
|
175
157
|
|
176
|
-
params.merge!({ 'PageIndex' =>
|
158
|
+
params.merge!({ 'PageIndex' => page_number })
|
177
159
|
response = GunBroker::API.get(endpoint, params, token_header(@user.token))
|
178
160
|
_items_from_results.concat(items_from_results(response['results']))
|
179
161
|
end
|
data/lib/gun_broker/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gun_broker
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dale Campbell
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-03-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -136,9 +136,11 @@ files:
|
|
136
136
|
- lib/gun_broker/feedback.rb
|
137
137
|
- lib/gun_broker/item.rb
|
138
138
|
- lib/gun_broker/item/constants.rb
|
139
|
+
- lib/gun_broker/items_as_page.rb
|
139
140
|
- lib/gun_broker/response.rb
|
140
141
|
- lib/gun_broker/token_header.rb
|
141
142
|
- lib/gun_broker/user.rb
|
143
|
+
- lib/gun_broker/user/items_as_pages_delegate.rb
|
142
144
|
- lib/gun_broker/user/items_delegate.rb
|
143
145
|
- lib/gun_broker/version.rb
|
144
146
|
- spec/fixtures/authenticate.json
|