gecko-ruby 0.0.7 → 0.0.8
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/CHANGELOG.md +5 -0
- data/README.md +10 -0
- data/lib/gecko/record/base_adapter.rb +33 -12
- data/lib/gecko/record/fulfillment.rb +0 -11
- data/lib/gecko/record/image.rb +16 -3
- data/lib/gecko/record/variant.rb +3 -1
- data/lib/gecko/version.rb +1 -1
- data/test/fixtures/vcr_cassettes/products_sideloaded.yml +84 -0
- data/test/record/image_adapter_test.rb +4 -0
- data/test/record/product_adapter_test.rb +2 -0
- data/test/record/variant_test.rb +3 -1
- data/test/support/shared_sideloaded_data_parsing_examples.rb +17 -0
- data/test/test_helper.rb +1 -0
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5c081d1825735e5c7a065c5b594c27c7d2a89d35
|
4
|
+
data.tar.gz: 4f7866b500af81b44440665c0f42b891ef64088a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6729e2175db7b875c369e5a4dab15fda98b321379ae66233c2a21ce3aeb79c1a443b90f71b446993e2bc57202d82c5b8848c15e47feae1690cfcf8726c2776a3
|
7
|
+
data.tar.gz: 3b378afaecefb0f1107e0c9af8f862abd91893fb810510cb0cab478af76d4170556b101e77c6f3e1521b80c87a563c698a3056646cded857eb5d1d12c8e30df8
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,10 @@
|
|
1
|
+
## 0.0.8 (2015-09-10)
|
2
|
+
- Fetch VariantLocation#committed_stock as committed
|
3
|
+
- Make image uploading work
|
4
|
+
|
1
5
|
## 0.0.7 (2015-03-17)
|
2
6
|
- Fix issue with Order#tax_override
|
7
|
+
- Support sideloaded records without a hack
|
3
8
|
|
4
9
|
## 0.0.6 (2015-03-17)
|
5
10
|
- Add `Gecko::Record::PaymentTerm`
|
data/README.md
CHANGED
@@ -31,6 +31,16 @@ products = client.Product.where(q: "Gecko")
|
|
31
31
|
#=> [<Gecko::Record::Product id=1 name="Geckotron">, <Gecko::Record::Product id=3 name="Green Gecko">]
|
32
32
|
```
|
33
33
|
|
34
|
+
## Basic Usage Using a Privileged Access Token
|
35
|
+
|
36
|
+
```ruby
|
37
|
+
client = Gecko::Client.new(CLIENT_ID, CLIENT_SECRET)
|
38
|
+
client.authorize_from_existing(PRIVILEGED_ACCESS_TOKEN, nil, nil)
|
39
|
+
|
40
|
+
products = client.Product.where(q: "Gecko")
|
41
|
+
#=> [<Gecko::Record::Product id=1 name="Geckotron">, <Gecko::Record::Product id=3 name="Green Gecko">]
|
42
|
+
```
|
43
|
+
|
34
44
|
## Finding Records
|
35
45
|
|
36
46
|
#### Basic finders
|
@@ -146,6 +146,8 @@ module Gecko
|
|
146
146
|
# @example
|
147
147
|
# client.Product.fetch(12)
|
148
148
|
#
|
149
|
+
# @param [Integer] id ID of record
|
150
|
+
#
|
149
151
|
# @return [Gecko::Record::Base] if a record was found
|
150
152
|
# @return [nil] if no record was found
|
151
153
|
#
|
@@ -170,6 +172,7 @@ module Gecko
|
|
170
172
|
#
|
171
173
|
# @api private
|
172
174
|
def parse_records(json)
|
175
|
+
parse_sideloaded_records(json)
|
173
176
|
extract_collection(json).map do |record_json|
|
174
177
|
instantiate_and_register_record(record_json)
|
175
178
|
end
|
@@ -227,6 +230,18 @@ module Gecko
|
|
227
230
|
end
|
228
231
|
end
|
229
232
|
|
233
|
+
# Instantiates a record from it's JSON representation and registers
|
234
|
+
# it into the identity map
|
235
|
+
#
|
236
|
+
# @return [Gecko::Record::Base]
|
237
|
+
#
|
238
|
+
# @api private
|
239
|
+
def instantiate_and_register_record(record_json)
|
240
|
+
record = model_class.new(@client, record_json)
|
241
|
+
register_record(record)
|
242
|
+
record
|
243
|
+
end
|
244
|
+
|
230
245
|
private
|
231
246
|
|
232
247
|
# Returns the json key for a record adapter
|
@@ -262,18 +277,6 @@ module Gecko
|
|
262
277
|
Gecko::Record.const_get(@model_name)
|
263
278
|
end
|
264
279
|
|
265
|
-
# Instantiates a record from it's JSON representation and registers
|
266
|
-
# it into the identity map
|
267
|
-
#
|
268
|
-
# @return [Gecko::Record::Base]
|
269
|
-
#
|
270
|
-
# @api private
|
271
|
-
def instantiate_and_register_record(record_json)
|
272
|
-
record = model_class.new(@client, record_json)
|
273
|
-
register_record(record)
|
274
|
-
record
|
275
|
-
end
|
276
|
-
|
277
280
|
# Registers a record into the identity map
|
278
281
|
#
|
279
282
|
# @return [Gecko::Record::Base]
|
@@ -339,6 +342,24 @@ module Gecko
|
|
339
342
|
@pagination = JSON.parse(headers["x-pagination"]) if headers["x-pagination"]
|
340
343
|
end
|
341
344
|
|
345
|
+
# Parse and instantiate sideloaded records
|
346
|
+
#
|
347
|
+
# @api private
|
348
|
+
def parse_sideloaded_records(json)
|
349
|
+
json.each do |record_type, records|
|
350
|
+
next if record_type == "meta"
|
351
|
+
next if record_type == @model_name.to_s
|
352
|
+
|
353
|
+
record_class = record_type.singularize.classify
|
354
|
+
next unless Gecko::Record.const_defined?(record_class)
|
355
|
+
adapter = @client.adapter_for(record_class)
|
356
|
+
|
357
|
+
records.each do |record_json|
|
358
|
+
adapter.instantiate_and_register_record(record_json)
|
359
|
+
end
|
360
|
+
end
|
361
|
+
end
|
362
|
+
|
342
363
|
# Makes a request to the API.
|
343
364
|
#
|
344
365
|
# @param [Symbol] verb the HTTP request method
|
@@ -26,17 +26,6 @@ module Gecko
|
|
26
26
|
end
|
27
27
|
|
28
28
|
class FulfillmentAdapter < BaseAdapter
|
29
|
-
# Parse sideloaded FulfillmentLineItems into the Identity map
|
30
|
-
# instead of refetching them
|
31
|
-
def parse_records(json)
|
32
|
-
records = super
|
33
|
-
parse_line_items(json) if json['fulfillment_line_items']
|
34
|
-
records
|
35
|
-
end
|
36
|
-
|
37
|
-
def parse_line_items(json)
|
38
|
-
@client.FulfillmentLineItem.parse_records(json)
|
39
|
-
end
|
40
29
|
end
|
41
30
|
end
|
42
31
|
end
|
data/lib/gecko/record/image.rb
CHANGED
@@ -8,10 +8,12 @@ module Gecko
|
|
8
8
|
belongs_to :variant
|
9
9
|
belongs_to :uploader, class_name: "User"
|
10
10
|
attribute :name, String
|
11
|
+
attribute :url, String
|
11
12
|
attribute :position, Integer
|
12
|
-
attribute :base_path, String
|
13
|
-
attribute :file_name, String
|
14
|
-
attribute :versions, Array[String]
|
13
|
+
attribute :base_path, String, readonly: true
|
14
|
+
attribute :file_name, String, readonly: true
|
15
|
+
attribute :versions, Array[String], readonly: true
|
16
|
+
|
15
17
|
# attribute :image_processing, Boolean
|
16
18
|
|
17
19
|
# URL for image
|
@@ -23,6 +25,12 @@ module Gecko
|
|
23
25
|
#
|
24
26
|
# @api public
|
25
27
|
def url(size = :full)
|
28
|
+
super() || build_url(size)
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
def build_url(size)
|
26
34
|
if size == :full
|
27
35
|
file_path = file_name
|
28
36
|
else
|
@@ -33,6 +41,11 @@ module Gecko
|
|
33
41
|
end
|
34
42
|
|
35
43
|
class ImageAdapter < BaseAdapter
|
44
|
+
private
|
45
|
+
|
46
|
+
def update_record(_record)
|
47
|
+
raise NotImplementedError
|
48
|
+
end
|
36
49
|
end
|
37
50
|
end
|
38
51
|
end
|
data/lib/gecko/record/variant.rb
CHANGED
@@ -7,9 +7,11 @@ module Gecko
|
|
7
7
|
include Virtus.model
|
8
8
|
include Gecko::Helpers::SerializationHelper
|
9
9
|
attribute :location_id, Integer
|
10
|
-
attribute :
|
10
|
+
attribute :committed, BigDecimal
|
11
11
|
attribute :stock_on_hand, BigDecimal
|
12
12
|
attribute :bin_location, String
|
13
|
+
|
14
|
+
alias_method :committed_stock, :committed
|
13
15
|
end
|
14
16
|
|
15
17
|
class VariantPrice
|
data/lib/gecko/version.rb
CHANGED
@@ -0,0 +1,84 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: http://api.lvh.me:3000/products?_include=variants&limit=5
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
User-Agent:
|
11
|
+
- Gecko/0.0.5 OAuth2/1.0.0 Faraday/0.9.1 Ruby/2.1.5
|
12
|
+
Authorization:
|
13
|
+
- Bearer 57b0f2b0a4ffe949eef65796429f7089e967dc6f4b197f60e387f03e44afd27c
|
14
|
+
Accept-Encoding:
|
15
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
16
|
+
Accept:
|
17
|
+
- "*/*"
|
18
|
+
response:
|
19
|
+
status:
|
20
|
+
code: 200
|
21
|
+
message: OK
|
22
|
+
headers:
|
23
|
+
Date:
|
24
|
+
- Thu, 12 Mar 2015 09:39:55 GMT
|
25
|
+
Status:
|
26
|
+
- 200 OK
|
27
|
+
Connection:
|
28
|
+
- close
|
29
|
+
X-Frame-Options:
|
30
|
+
- ALLOW-FROM https://login.bigcommerce.com
|
31
|
+
X-Rate-Limit-Limit:
|
32
|
+
- '300'
|
33
|
+
X-Rate-Limit-Remaining:
|
34
|
+
- '299'
|
35
|
+
X-Rate-Limit-Reset:
|
36
|
+
- '1426153200'
|
37
|
+
X-Pagination:
|
38
|
+
- '{"total_records":5,"total_pages":1,"first_page":true,"last_page":true,"out_of_bounds":false,"offset":0}'
|
39
|
+
Link:
|
40
|
+
- <http://api.lvh.me:3000/ajax/products?limit=5&page=1&include=variants>; rel="last"
|
41
|
+
Content-Type:
|
42
|
+
- application/json; charset=utf-8
|
43
|
+
Etag:
|
44
|
+
- '"e627dcd7fcdb904e75f5f34e99d52769"'
|
45
|
+
Cache-Control:
|
46
|
+
- max-age=0, private, must-revalidate
|
47
|
+
X-Request-Id:
|
48
|
+
- 2d51871d-5944-41b9-839d-6d1c0560866d
|
49
|
+
X-Runtime:
|
50
|
+
- '0.588396'
|
51
|
+
Transfer-Encoding:
|
52
|
+
- chunked
|
53
|
+
body:
|
54
|
+
encoding: UTF-8
|
55
|
+
string: '{"variants":[{"id":457,"created_at":"2015-02-26T09:54:05.506Z","updated_at":"2015-03-05T10:38:54.377Z","product_id":104,"default_ledger_account_id":null,"buy_price":null,"committed_stock":"1","incoming_stock":"0","composite":false,"description":null,"is_online":false,"keep_selling":false,"last_cost_price":"111.0","manage_stock":true,"max_online":null,"moving_average_cost":"111","name":"Gecko
|
56
|
+
Guitar X1","online_ordering":false,"opt1":"Default","opt2":null,"opt3":null,"position":1,"product_name":"Gecko
|
57
|
+
Guitar X1","product_status":"active","product_type":"Acoustic Electric","retail_price":null,"sellable":true,"sku":null,"status":"active","stock_on_hand":"111","supplier_code":null,"taxable":true,"upc":null,"weight":null,"wholesale_price":null,"image_ids":[],"variant_prices":[],"locations":[{"location_id":2,"stock_on_hand":"111","committed":"1","incoming":null,"bin_location":null,"reorder_point":null}],"prices":{},"stock_levels":{"2":"111.0"},"committed_stock_levels":{"2":"1.0"},"incoming_stock_levels":{}},{"id":39,"created_at":"2015-02-11T09:02:36.850Z","updated_at":"2015-02-11T09:39:00.988Z","product_id":13,"default_ledger_account_id":null,"buy_price":"900.0","committed_stock":"10","incoming_stock":"0","composite":false,"description":null,"is_online":false,"keep_selling":false,"last_cost_price":"1000.0","manage_stock":true,"max_online":null,"moving_average_cost":"1000","name":"Hummingbird
|
58
|
+
Pro 2","online_ordering":true,"opt1":"1","opt2":null,"opt3":null,"position":3,"product_name":"Hummingbird","product_status":"active","product_type":"Acoustic
|
59
|
+
Electric","retail_price":"2500.0","sellable":true,"sku":null,"status":"active","stock_on_hand":"10","supplier_code":null,"taxable":true,"upc":null,"weight":null,"wholesale_price":"1200.0","image_ids":[15],"variant_prices":[{"price_list_id":"buy","value":"900.0"},{"price_list_id":"retail","value":"2500.0"},{"price_list_id":"wholesale","value":"1200.0"}],"locations":[{"location_id":2,"stock_on_hand":"10","committed":"10","incoming":null,"bin_location":null,"reorder_point":null}],"prices":{"buy":"900.0","retail":"2500.0","wholesale":"1200.0"},"stock_levels":{"2":"10.0"},"committed_stock_levels":{"2":"10.0"},"incoming_stock_levels":{}},{"id":38,"created_at":"2015-02-11T06:42:14.748Z","updated_at":"2015-02-11T09:01:12.979Z","product_id":13,"default_ledger_account_id":null,"buy_price":"2000.0","committed_stock":"0","incoming_stock":"0","composite":false,"description":null,"is_online":false,"keep_selling":false,"last_cost_price":"1000.0","manage_stock":true,"max_online":null,"moving_average_cost":"1000","name":"Hummingbird
|
60
|
+
Pro","online_ordering":true,"opt1":null,"opt2":null,"opt3":null,"position":2,"product_name":"Hummingbird","product_status":"active","product_type":"Acoustic
|
61
|
+
Electric","retail_price":"2000.0","sellable":true,"sku":null,"status":"active","stock_on_hand":"1000","supplier_code":null,"taxable":true,"upc":null,"weight":null,"wholesale_price":"1000.0","image_ids":[],"variant_prices":[{"price_list_id":"buy","value":"2000.0"},{"price_list_id":"retail","value":"2000.0"},{"price_list_id":"wholesale","value":"1000.0"}],"locations":[{"location_id":2,"stock_on_hand":"1000","committed":null,"incoming":null,"bin_location":null,"reorder_point":null}],"prices":{"buy":"2000.0","retail":"2000.0","wholesale":"1000.0"},"stock_levels":{"2":1000.0},"committed_stock_levels":{},"incoming_stock_levels":{}},{"id":37,"created_at":"2015-02-11T04:40:52.557Z","updated_at":"2015-02-11T09:05:16.322Z","product_id":13,"default_ledger_account_id":null,"buy_price":"100.0","committed_stock":"5","incoming_stock":"0","composite":false,"description":null,"is_online":false,"keep_selling":false,"last_cost_price":"1000.0","manage_stock":true,"max_online":null,"moving_average_cost":"1000","name":"Hummingbird","online_ordering":true,"opt1":"Default","opt2":null,"opt3":null,"position":1,"product_name":"Hummingbird","product_status":"active","product_type":"Acoustic
|
62
|
+
Electric","retail_price":"1200.0","sellable":true,"sku":"","status":"active","stock_on_hand":"105","supplier_code":null,"taxable":true,"upc":null,"weight":null,"wholesale_price":"600.0","image_ids":[],"variant_prices":[{"price_list_id":"buy","value":"100.0"},{"price_list_id":"retail","value":"1200.0"},{"price_list_id":"wholesale","value":"600.0"}],"locations":[{"location_id":2,"stock_on_hand":"105","committed":"5","incoming":null,"bin_location":null,"reorder_point":null}],"prices":{"buy":"100.0","retail":"1200.0","wholesale":"600.0"},"stock_levels":{"2":"105.0"},"committed_stock_levels":{"2":"5.0"},"incoming_stock_levels":{}},{"id":36,"created_at":"2015-02-10T06:08:31.340Z","updated_at":"2015-02-12T02:13:08.518Z","product_id":12,"default_ledger_account_id":null,"buy_price":"700.0","committed_stock":"0","incoming_stock":"0","composite":false,"description":null,"is_online":false,"keep_selling":false,"last_cost_price":"1000.0","manage_stock":true,"max_online":null,"moving_average_cost":"1000","name":"Epiphone
|
63
|
+
EJ 200 CE","online_ordering":true,"opt1":"Default","opt2":null,"opt3":null,"position":1,"product_name":"Epiphone
|
64
|
+
EJ 200 CE","product_status":"active","product_type":"Acoustic Electric","retail_price":"1500.0","sellable":true,"sku":"","status":"active","stock_on_hand":"1111","supplier_code":null,"taxable":true,"upc":null,"weight":null,"wholesale_price":"900.0","image_ids":[9],"variant_prices":[{"price_list_id":"buy","value":"700.0"},{"price_list_id":"retail","value":"1500.0"},{"price_list_id":"wholesale","value":"900.0"}],"locations":[{"location_id":2,"stock_on_hand":"1111","committed":null,"incoming":null,"bin_location":null,"reorder_point":null}],"prices":{"buy":"700.0","retail":"1500.0","wholesale":"900.0"},"stock_levels":{"2":1111.0},"committed_stock_levels":{},"incoming_stock_levels":{}},{"id":40,"created_at":"2015-02-18T04:11:56.125Z","updated_at":"2015-02-23T04:01:21.475Z","product_id":8,"default_ledger_account_id":null,"buy_price":"2222.0","committed_stock":"0","incoming_stock":"0","composite":false,"description":null,"is_online":false,"keep_selling":false,"last_cost_price":"2222.0","manage_stock":true,"max_online":null,"moving_average_cost":"2222","name":null,"online_ordering":true,"opt1":"M","opt2":null,"opt3":null,"position":2,"product_name":"AJ
|
65
|
+
300","product_status":"active","product_type":"Acoustic Guitar","retail_price":"2222.0","sellable":true,"sku":null,"status":"active","stock_on_hand":"19","supplier_code":null,"taxable":true,"upc":null,"weight":null,"wholesale_price":"2222.0","image_ids":[],"variant_prices":[{"price_list_id":"buy","value":"2222.0"},{"price_list_id":"retail","value":"2222.0"},{"price_list_id":"wholesale","value":"2222.0"}],"locations":[{"location_id":2,"stock_on_hand":"19","committed":null,"incoming":null,"bin_location":null,"reorder_point":null}],"prices":{"buy":"2222.0","retail":"2222.0","wholesale":"2222.0"},"stock_levels":{"2":19.0},"committed_stock_levels":{},"incoming_stock_levels":{}},{"id":41,"created_at":"2015-02-18T04:11:56.279Z","updated_at":"2015-02-20T05:31:14.070Z","product_id":8,"default_ledger_account_id":null,"buy_price":"2222.0","committed_stock":"0","incoming_stock":"0","composite":false,"description":null,"is_online":false,"keep_selling":false,"last_cost_price":"2222.0","manage_stock":true,"max_online":null,"moving_average_cost":"2222","name":"AJ
|
66
|
+
300 B","online_ordering":false,"opt1":"L","opt2":null,"opt3":null,"position":3,"product_name":"AJ
|
67
|
+
300","product_status":"active","product_type":"Acoustic Guitar","retail_price":"2222.0","sellable":true,"sku":null,"status":"active","stock_on_hand":"11","supplier_code":null,"taxable":true,"upc":null,"weight":null,"wholesale_price":"2222.0","image_ids":[],"variant_prices":[{"price_list_id":"buy","value":"2222.0"},{"price_list_id":"retail","value":"2222.0"},{"price_list_id":"wholesale","value":"2222.0"}],"locations":[{"location_id":2,"stock_on_hand":"11","committed":null,"incoming":null,"bin_location":null,"reorder_point":null}],"prices":{"buy":"2222.0","retail":"2222.0","wholesale":"2222.0"},"stock_levels":{"2":11.0},"committed_stock_levels":{},"incoming_stock_levels":{}},{"id":24,"created_at":"2015-01-26T02:28:49.992Z","updated_at":"2015-02-20T04:58:11.742Z","product_id":8,"default_ledger_account_id":null,"buy_price":"2000.0","committed_stock":"3","incoming_stock":"0","composite":false,"description":null,"is_online":false,"keep_selling":false,"last_cost_price":"2000.0","manage_stock":true,"max_online":null,"moving_average_cost":"2000","name":"AJ
|
68
|
+
300","online_ordering":true,"opt1":"Default","opt2":null,"opt3":null,"position":1,"product_name":"AJ
|
69
|
+
300","product_status":"active","product_type":"Acoustic Guitar","retail_price":"3000.0","sellable":true,"sku":"","status":"active","stock_on_hand":"29","supplier_code":null,"taxable":true,"upc":null,"weight":null,"wholesale_price":"2200.0","image_ids":[3],"variant_prices":[{"price_list_id":"buy","value":"2000.0"},{"price_list_id":"retail","value":"3000.0"},{"price_list_id":"wholesale","value":"2200.0"},{"price_list_id":"1","value":null}],"locations":[{"location_id":2,"stock_on_hand":"29","committed":"3","incoming":null,"bin_location":null,"reorder_point":null}],"prices":{"buy":"2000.0","retail":"3000.0","wholesale":"2200.0","1":null},"stock_levels":{"2":"29.0"},"committed_stock_levels":{"2":"3.0"},"incoming_stock_levels":{}},{"id":23,"created_at":"2015-01-26T02:28:13.702Z","updated_at":"2015-02-09T03:03:20.021Z","product_id":7,"default_ledger_account_id":null,"buy_price":"1000.0","committed_stock":"4","incoming_stock":"0","composite":false,"description":null,"is_online":false,"keep_selling":false,"last_cost_price":"1000.0","manage_stock":true,"max_online":null,"moving_average_cost":"1000","name":"Gibson
|
70
|
+
J200","online_ordering":true,"opt1":"Default","opt2":null,"opt3":null,"position":1,"product_name":"Gibson
|
71
|
+
J200","product_status":"active","product_type":"Acoustic Guitar","retail_price":"1500.0","sellable":true,"sku":"","status":"active","stock_on_hand":"100","supplier_code":null,"taxable":true,"upc":null,"weight":null,"wholesale_price":"1100.0","image_ids":[],"variant_prices":[{"price_list_id":"buy","value":"1000.0"},{"price_list_id":"retail","value":"1500.0"},{"price_list_id":"wholesale","value":"1100.0"}],"locations":[{"location_id":2,"stock_on_hand":"100","committed":"4","incoming":null,"bin_location":null,"reorder_point":null}],"prices":{"buy":"1000.0","retail":"1500.0","wholesale":"1100.0"},"stock_levels":{"2":"100.0"},"committed_stock_levels":{"2":"4.0"},"incoming_stock_levels":{}}],"products":[{"id":104,"created_at":"2015-02-26T09:54:05.453Z","updated_at":"2015-02-26T09:54:05.453Z","brand":null,"description":"","image_url":null,"name":"Gecko
|
72
|
+
Guitar X1","opt1":"Size","opt2":null,"opt3":null,"product_type":"Acoustic
|
73
|
+
Electric","quantity":"110","search_cache":"Gecko Guitar X1","status":"active","supplier":null,"tags":null,"vendor":null,"variant_ids":[457]},{"id":13,"created_at":"2015-02-11T04:40:52.175Z","updated_at":"2015-02-11T04:40:52.175Z","brand":"Epiphone","description":null,"image_url":"https://tradegecko-development-images.s3.amazonaws.com/uploads/variant_image/image/15/thumbnail_Screen_Shot_2015-02-10_at_12.53.34_pm.png","name":"Hummingbird","opt1":"Size","opt2":null,"opt3":null,"product_type":"Acoustic
|
74
|
+
Electric","quantity":"1100","search_cache":"Hummingbird Pro 2 Hummingbird
|
75
|
+
Pro Hummingbird","status":"active","supplier":"Epiphone","tags":null,"vendor":"Epiphone","variant_ids":[39,38,37]},{"id":12,"created_at":"2015-02-10T06:08:31.185Z","updated_at":"2015-02-10T06:08:31.185Z","brand":"Epiphone","description":null,"image_url":"https://tradegecko-development-images.s3.amazonaws.com/uploads/variant_image/image/9/thumbnail_testimage00001.png","name":"Epiphone
|
76
|
+
EJ 200 CE","opt1":"Size","opt2":null,"opt3":null,"product_type":"Acoustic
|
77
|
+
Electric","quantity":"1111","search_cache":"Epiphone EJ 200 CE","status":"active","supplier":"Epiphone","tags":null,"vendor":"Epiphone","variant_ids":[36]},{"id":8,"created_at":"2015-01-26T02:28:49.958Z","updated_at":"2015-02-09T09:09:00.338Z","brand":"Gibson","description":null,"image_url":"https://tradegecko-development-images.s3.amazonaws.com/uploads/variant_image/image/3/thumbnail_Screen_Shot_2015-02-10_at_12.42.58_pm.png","name":"AJ
|
78
|
+
300","opt1":"Size","opt2":null,"opt3":null,"product_type":"Acoustic Guitar","quantity":"56","search_cache":"AJ
|
79
|
+
300 B AJ 300","status":"active","supplier":"Gibson","tags":"acoustic","vendor":"Gibson","variant_ids":[40,41,24]},{"id":7,"created_at":"2015-01-26T02:28:13.510Z","updated_at":"2015-02-09T09:18:51.078Z","brand":"Gibson","description":null,"image_url":null,"name":"Gibson
|
80
|
+
J200","opt1":"Size","opt2":null,"opt3":null,"product_type":"Acoustic Guitar","quantity":"96","search_cache":"Gibson
|
81
|
+
J200","status":"active","supplier":"Gibson","tags":"Acoustic Premium,acoustic","vendor":"Gibson","variant_ids":[23]}],"meta":{"total":5}}'
|
82
|
+
http_version:
|
83
|
+
recorded_at: Thu, 12 Mar 2015 09:39:55 GMT
|
84
|
+
recorded_with: VCR 2.9.3
|
@@ -11,4 +11,8 @@ class Gecko::Record::ImageAdapterTest < Minitest::Test
|
|
11
11
|
def test_initializes_adapter
|
12
12
|
assert_instance_of(Gecko::Record::ImageAdapter, @client.Image)
|
13
13
|
end
|
14
|
+
|
15
|
+
# Updating images via the API is currently unsupported
|
16
|
+
undef :test_saving_existing_invalid_record
|
17
|
+
undef :test_saving_existing_record
|
14
18
|
end
|
@@ -3,10 +3,12 @@ require 'test_helper'
|
|
3
3
|
class Gecko::Record::ProductAdapterTest < Minitest::Test
|
4
4
|
include TestingAdapter
|
5
5
|
include SharedAdapterExamples
|
6
|
+
include SharedSideloadedDataParsingExamples
|
6
7
|
|
7
8
|
let(:adapter) { @client.Product }
|
8
9
|
let(:plural_name) { 'products' }
|
9
10
|
let(:record_class) { Gecko::Record::Product }
|
11
|
+
let(:children) { ["variants"] }
|
10
12
|
|
11
13
|
def test_initializes_adapter
|
12
14
|
assert_instance_of(Gecko::Record::ProductAdapter, @client.Product)
|
data/test/record/variant_test.rb
CHANGED
@@ -32,8 +32,10 @@ class Gecko::VariantTest < Minitest::Test
|
|
32
32
|
|
33
33
|
def test_variant_locations
|
34
34
|
json = {locations: [
|
35
|
-
{location_id: 1, stock_on_hand: "12.50",
|
35
|
+
{ location_id: 1, stock_on_hand: "12.50",
|
36
|
+
committed: "0", bin_location: "AB-123" },
|
36
37
|
]}
|
38
|
+
|
37
39
|
locations = record_class.new(client, json).locations
|
38
40
|
assert_instance_of(Gecko::Record::Variant::VariantLocation, locations.first)
|
39
41
|
assert_equal(1, locations[0].location_id)
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module SharedSideloadedDataParsingExamples
|
2
|
+
def test_adapter_sideloaded_data_parsing
|
3
|
+
VCR.use_cassette(plural_name + '_sideloaded') do
|
4
|
+
|
5
|
+
collection = adapter.where(limit: 5, _include: children.join(","))
|
6
|
+
|
7
|
+
children.each do |child|
|
8
|
+
child_adapter = @client.adapter_for(child.singularize.classify)
|
9
|
+
|
10
|
+
identity_map = child_adapter.instance_variable_get(:@identity_map)
|
11
|
+
child_collection = collection.flat_map { |record| record.send(child) }
|
12
|
+
|
13
|
+
assert_equal child_collection, identity_map.values
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/test/test_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gecko-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bradley Priest
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-10-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -274,6 +274,7 @@ files:
|
|
274
274
|
- test/fixtures/vcr_cassettes/products_count.yml
|
275
275
|
- test/fixtures/vcr_cassettes/products_new_invalid.yml
|
276
276
|
- test/fixtures/vcr_cassettes/products_new_valid.yml
|
277
|
+
- test/fixtures/vcr_cassettes/products_sideloaded.yml
|
277
278
|
- test/fixtures/vcr_cassettes/purchase_order_line_items.yml
|
278
279
|
- test/fixtures/vcr_cassettes/purchase_order_line_items_count.yml
|
279
280
|
- test/fixtures/vcr_cassettes/purchase_orders.yml
|
@@ -332,6 +333,7 @@ files:
|
|
332
333
|
- test/support/let.rb
|
333
334
|
- test/support/shared_adapter_examples.rb
|
334
335
|
- test/support/shared_record_examples.rb
|
336
|
+
- test/support/shared_sideloaded_data_parsing_examples.rb
|
335
337
|
- test/support/testing_adapter.rb
|
336
338
|
- test/support/vcr_support.rb
|
337
339
|
- test/test_helper.rb
|
@@ -391,6 +393,7 @@ test_files:
|
|
391
393
|
- test/fixtures/vcr_cassettes/products_count.yml
|
392
394
|
- test/fixtures/vcr_cassettes/products_new_invalid.yml
|
393
395
|
- test/fixtures/vcr_cassettes/products_new_valid.yml
|
396
|
+
- test/fixtures/vcr_cassettes/products_sideloaded.yml
|
394
397
|
- test/fixtures/vcr_cassettes/purchase_order_line_items.yml
|
395
398
|
- test/fixtures/vcr_cassettes/purchase_order_line_items_count.yml
|
396
399
|
- test/fixtures/vcr_cassettes/purchase_orders.yml
|
@@ -449,6 +452,7 @@ test_files:
|
|
449
452
|
- test/support/let.rb
|
450
453
|
- test/support/shared_adapter_examples.rb
|
451
454
|
- test/support/shared_record_examples.rb
|
455
|
+
- test/support/shared_sideloaded_data_parsing_examples.rb
|
452
456
|
- test/support/testing_adapter.rb
|
453
457
|
- test/support/vcr_support.rb
|
454
458
|
- test/test_helper.rb
|