e_plat 0.6.0 → 0.7.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 +84 -54
- data/lib/e_plat/client/default_request_args.rb +1 -1
- data/lib/e_plat/client.rb +34 -8
- data/lib/e_plat/mapping/bigcommerce/v_3/product/option.rb +58 -0
- data/lib/e_plat/mapping/bigcommerce/v_3/product/variant/option_value.rb +42 -0
- data/lib/e_plat/mapping/shopify/v_2024_07/metafield.rb +26 -0
- data/lib/e_plat/mapping/shopify/v_2024_07/order/billing_address.rb +14 -0
- data/lib/e_plat/mapping/shopify/v_2024_07/order/shipping_address.rb +30 -0
- data/lib/e_plat/mapping/shopify/v_2024_07/order.rb +26 -0
- data/lib/e_plat/mapping/shopify/v_2024_07/product/image.rb +52 -0
- data/lib/e_plat/mapping/shopify/v_2024_07/product/option.rb +45 -0
- data/lib/e_plat/mapping/shopify/v_2024_07/product/variant/option_value.rb +58 -0
- data/lib/e_plat/mapping/shopify/v_2024_07/product/variant.rb +180 -0
- data/lib/e_plat/mapping/shopify/v_2024_07/product.rb +100 -0
- data/lib/e_plat/mapping/shopify/v_2024_07/script_tag.rb +26 -0
- data/lib/e_plat/mapping/shopify/v_2024_07/shop.rb +26 -0
- data/lib/e_plat/mapping/shopify/v_2024_07/webhook.rb +29 -0
- data/lib/e_plat/mapping/virtual_collection/shopify/product/variant/option_value.rb +272 -0
- data/lib/e_plat/resource/base.rb +24 -2
- data/lib/e_plat/resource/collection.rb +45 -16
- data/lib/e_plat/resource/concerns/aliases.rb +39 -19
- data/lib/e_plat/resource/concerns/dirty.rb +12 -8
- data/lib/e_plat/resource/concerns/graph_q_lable.rb +253 -0
- data/lib/e_plat/resource/concerns/overwrite_instance_methods.rb +4 -4
- data/lib/e_plat/resource/concerns/overwrite_request_methods.rb +1 -1
- data/lib/e_plat/resource/countable.rb +37 -10
- data/lib/e_plat/resource/platform_specific/bigcommerce/product/variant/option_value.rb +2 -0
- data/lib/e_plat/resource/platform_specific/shopify/graph_q_l/v_2024_07/input/product/variant.rb +47 -0
- data/lib/e_plat/resource/platform_specific/shopify/graph_q_l/v_2024_07/input/product/variants_bulk.rb +47 -0
- data/lib/e_plat/resource/platform_specific/shopify/graph_q_l/v_2024_07/input/product.rb +23 -0
- data/lib/e_plat/resource/platform_specific/shopify/graph_q_l/v_2024_07/input.rb +98 -0
- data/lib/e_plat/resource/platform_specific/shopify/graph_q_l/v_2024_07/mutation/product/variant.rb +78 -0
- data/lib/e_plat/resource/platform_specific/shopify/graph_q_l/v_2024_07/mutation/product.rb +55 -0
- data/lib/e_plat/resource/platform_specific/shopify/graph_q_l/v_2024_07/mutation.rb +5 -0
- data/lib/e_plat/resource/platform_specific/shopify/graph_q_l/v_2024_07/query/product/variant.rb +44 -0
- data/lib/e_plat/resource/platform_specific/shopify/graph_q_l/v_2024_07/query/product.rb +58 -0
- data/lib/e_plat/resource/platform_specific/shopify/graph_q_l/v_2024_07/query.rb +5 -0
- data/lib/e_plat/resource/platform_specific/shopify/product/image.rb +13 -1
- data/lib/e_plat/resource/platform_specific/shopify/product/option.rb +13 -1
- data/lib/e_plat/resource/platform_specific/shopify/product/variant/option_value.rb +14 -0
- data/lib/e_plat/resource/platform_specific/shopify/product/variant.rb +65 -1
- data/lib/e_plat/resource/platform_specific/shopify/product.rb +77 -2
- data/lib/e_plat/resource/product/image.rb +8 -5
- data/lib/e_plat/resource/product/option.rb +2 -3
- data/lib/e_plat/resource/product/variant/option_value.rb +17 -0
- data/lib/e_plat/resource/product/variant.rb +4 -10
- data/lib/e_plat/resource/product.rb +23 -11
- data/lib/e_plat/session.rb +3 -2
- data/lib/e_plat/type_coercer.rb +3 -1
- data/lib/e_plat/version.rb +1 -1
- data/lib/e_plat.rb +12 -3
- data/lib/hash.rb +39 -0
- metadata +130 -27
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d10eb52dda105627cb32fb58161da4777a8a020f6ea70ba4111da4487441e743
|
4
|
+
data.tar.gz: 00ef52bdc6790981c6fcfb35615982c06b82152279d9a5f301ff3c84ad50747b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f5951156f87b275af28cefeed42eff062aeb85155454a8b498c54d795843be40acd5245d1f20b5e724912abef7ef43b0dc47c4e09f2084ad1ad1fbab8418aafa
|
7
|
+
data.tar.gz: 0af92dd3962135ec69c738eab60bc320e8add2de57832cc793ed11ab5118e1515a7a048623f75537e3c126ae1e78e9c109cab49685335d7a9860da655d611bdc
|
data/README.md
CHANGED
@@ -46,11 +46,34 @@ EPlat.config.bigcommerce_api_version = "v3"
|
|
46
46
|
|
47
47
|
# EPlat.api_display_name.shopify #=> "2024-01" # presents as the platform would display in URL paths
|
48
48
|
# EPlat.config.shopify_api_version #=> "2024_01" # coerced interally for creating constants
|
49
|
+
# EPlat.config.print_graphql_requests #=> false # prints out Shopify graphql queries/mutations to the console
|
49
50
|
```
|
50
51
|
<br>
|
51
52
|
|
52
|
-
##
|
53
|
+
## Testing
|
54
|
+
|
55
|
+
To run the test for the default versions of all supported platforms:
|
56
|
+
```
|
57
|
+
bundle exec rails test
|
58
|
+
```
|
59
|
+
|
60
|
+
To run with specific api versions, you can set globals inline
|
61
|
+
```
|
62
|
+
EPLAT_SHOPIFY_API_VERSION=2024_07 EPLAT_BIGCOMMERCE_API_VERSION=v3 rails test
|
63
|
+
```
|
64
|
+
|
65
|
+
To print out Shopify GraphQL queries/mutations
|
66
|
+
```
|
67
|
+
EPLAT_PRINT_GRAPHQL_REQUESTS=true rails test
|
68
|
+
```
|
69
|
+
|
70
|
+
<br>
|
71
|
+
|
72
|
+
## Releasing a new version
|
53
73
|
https://dev.to/doctolib/release-a-new-gem-version-je0
|
74
|
+
|
75
|
+
<br>
|
76
|
+
|
54
77
|
<br>
|
55
78
|
|
56
79
|
## Usage
|
@@ -211,10 +234,8 @@ EPlat is designed to let you mostly use it's universal interface, but then easil
|
|
211
234
|
| options | array | * | * | nil |
|
212
235
|
| product_type | string | * | type | nil |
|
213
236
|
| published_at | datetime | * | nil | nil |
|
214
|
-
| published_scope | string | * | nil | nil |
|
215
237
|
| status | string | * | availability | nil |
|
216
238
|
| tags | string | * | nil | nil |
|
217
|
-
| admin_graphql_api_id | string | * | nil | nil |
|
218
239
|
| template_suffix | string | * | nil | nil |
|
219
240
|
| title | string | * | name | nil |
|
220
241
|
| updated_at | datetime | * | date_modified| nil |
|
@@ -224,68 +245,62 @@ EPlat is designed to let you mostly use it's universal interface, but then easil
|
|
224
245
|
|
225
246
|
### EPlat::Product::Variant
|
226
247
|
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
246
|
-
|
|
247
|
-
|
248
|
-
|
249
|
-
| weight | float | * | weight | nil |
|
250
|
-
| weight_unit | string | * | nil | nil |
|
251
|
-
| inventory_item_id | integer | * | nil | nil |
|
252
|
-
| inventory_quantity | integer | * | inventory_level | nil |
|
253
|
-
| old_inventory_quantity| integer | * | nil | nil |
|
254
|
-
| presentment_prices | array | * | nil | nil |
|
255
|
-
| tax_code | string | * | nil | nil |
|
256
|
-
| requires_shipping | boolean | * | nil | nil |
|
257
|
-
| admin_graphql_api_id | string | * | nil | nil |
|
258
|
-
|
248
|
+
|
249
|
+
| Alias | Type | Shopify | BigCommerce | Etc |
|
250
|
+
|-----------------------|----------|---------|--------------------------------------|-----|
|
251
|
+
| id | integer | * | id | nil |
|
252
|
+
| title | string | * | option_values&.map(&:label)&.join(' ') | nil |
|
253
|
+
| price | string | * | price | nil |
|
254
|
+
| sku | string | * | sku | nil |
|
255
|
+
| position | integer | * | nil | nil |
|
256
|
+
| inventory_policy | string | * | nil | nil |
|
257
|
+
| compare_at_price | string | * | nil | nil |
|
258
|
+
| inventory_management | boolean | inventoryItem[tracked] | nil | nil |
|
259
|
+
| created_at | datetime | * | nil | nil |
|
260
|
+
| updated_at | datetime | * | nil | nil |
|
261
|
+
| taxable | boolean | * | nil | nil |
|
262
|
+
| barcode | string | * | nil | nil |
|
263
|
+
| grams | integer | getter only: converted node.inventoryItem[measurement][weight][value] | nil | nil |
|
264
|
+
| weight | float | getter only: node.inventoryItem[measurement][weight][value] | weight |
|
265
|
+
| weight_unit | string | getter only: node.inventoryItem[measurement][weight][unit] | nil |
|
266
|
+
| inventory_item_id | integer | getter only: node.inventoryItem[id]| nil | nil |
|
267
|
+
| inventory_quantity | integer | getter only: node.inventoryQuantity | inventory_level | nil |
|
268
|
+
| tax_code | string | * | nil | nil |
|
269
|
+
| requires_shipping | boolean | InventoryItem[requiresShipping] | nil | nil |
|
259
270
|
*Bigcommerce variant.title= setter is not supported
|
260
271
|
|
261
272
|
|
262
273
|
### EPlat::Product::Option
|
263
274
|
|
264
|
-
| Alias | Type | Shopify | BigCommerce| Etc |
|
265
|
-
|
|
266
|
-
| id
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
271
|
-
|
275
|
+
| Alias | Type | Shopify | BigCommerce | Etc |
|
276
|
+
| ---------- | -------- | ------- | ---------------------------- | --- |
|
277
|
+
| id | integer | * | id | nil |
|
278
|
+
| name | string | * | display_name | nil |
|
279
|
+
| position | integer | * | sort_order | nil |
|
280
|
+
| values | array | * | option_values[i][label] | nil |
|
281
|
+
|
272
282
|
|
273
283
|
### EPlat::Product::Image
|
274
284
|
|
275
285
|
| Alias | Type | Shopify | BigCommerce | Etc |
|
276
286
|
| -------------------- | -------- | ------- | ----------- | ------------|
|
277
287
|
| id | integer | * | id | nil |
|
278
|
-
| product_id | integer | * | product_id | nil |
|
279
288
|
| position | integer | * | nil | nil |
|
280
|
-
| created_at | datetime | * | date_created | nil |
|
281
|
-
| updated_at | datetime | * | date_modified| nil |
|
282
289
|
| alt | string | * | nil | nil |
|
283
290
|
| width | integer | * | nil | nil |
|
284
291
|
| height | integer | * | nil | nil |
|
285
292
|
| src | string | * | url_standard | nil |
|
286
293
|
| variant_ids | array | * | nil | nil |
|
287
|
-
| admin_graphql_api_id | string | * | nil | nil |
|
288
294
|
|
295
|
+
|
296
|
+
### EPlat::Product::Variant::OptionValue
|
297
|
+
(not supported for Shopify API v2024_01)
|
298
|
+
|
299
|
+
| Alias | Type | Shopify | BigCommerce | Etc |
|
300
|
+
| -------------------- | -------- | ------------------------------------------ | ------------------ | --- |
|
301
|
+
| id | integer | [selected_options][option_value][id] | id | nil |
|
302
|
+
| name | string | [selected_options][name] | option_display_name| nil |
|
303
|
+
| value | string | [selected_options][value] | label | nil |
|
289
304
|
</details>
|
290
305
|
|
291
306
|
<details>
|
@@ -584,11 +599,12 @@ Unfortunately it's in a Time Integer format. Haven't yet got dynamic conversion
|
|
584
599
|
| ::Product.find_by(attr: '') | * | * | |
|
585
600
|
| ::Product.create(attr:) | * | * | |
|
586
601
|
| ::Product.save | * | * | |
|
587
|
-
| .save saves nested resources |
|
602
|
+
| .save saves nested resources | only variants | | |
|
588
603
|
| ::Product.delete(id) | * | * | |
|
589
604
|
| ::Product.count | * | * | |
|
590
605
|
| product.dup | * | * | |
|
591
606
|
| product.variants | * | * | |
|
607
|
+
| product.load_all_variants | * | * | |
|
592
608
|
| product.find_variant(id) | * | * | |
|
593
609
|
| product.images | * | * | |
|
594
610
|
| products.next_page? | * | * | |
|
@@ -599,11 +615,23 @@ Unfortunately it's in a Time Integer format. Haven't yet got dynamic conversion
|
|
599
615
|
| products.next_page_info | * | * | |
|
600
616
|
|
601
617
|
```ruby
|
602
|
-
#
|
603
|
-
#
|
604
|
-
|
605
|
-
|
606
|
-
|
618
|
+
# The 2024 increased Shopify variants limit
|
619
|
+
@product.load_all_variants #returns all variants. In Shopify's case it will keep on requesting in batches until it has the full amount (capped at 10x requests of 200 currently i.e. 2,000 variants)
|
620
|
+
|
621
|
+
### Pagination
|
622
|
+
# ...How you might handle pagination.
|
623
|
+
|
624
|
+
# Add pagination cursors to your link's params. This is available on any EPlat::Collection instance
|
625
|
+
<%= link_to "previous products", "/", forward_page_info: products.previous_page_info %>
|
626
|
+
<%= link_to "Next products", "/", backward_page_info: products.next_page_info %>
|
627
|
+
|
628
|
+
# Then on the server, let EPlat handle the correct platform specific arguments to request with.
|
629
|
+
EPlat::Product.find(:all, params: {
|
630
|
+
EPlat::Current.e_plat_session.pagination_param(:forward) => params['forward_page_info']
|
631
|
+
})
|
632
|
+
EPlat::Product.find(:all, params: {
|
633
|
+
EPlat::Current.e_plat_session.pagination_param(:backward) => params['backward_page_info']
|
634
|
+
})
|
607
635
|
```
|
608
636
|
|
609
637
|
|
@@ -805,12 +833,14 @@ EPlat::Product.find(my_id).destroy
|
|
805
833
|
|
806
834
|
### save record
|
807
835
|
product = EPlat::Product.new(title: 't-shirt')
|
808
|
-
product.save
|
836
|
+
product.save # true or false
|
837
|
+
product.errors # active record like errors if .save returned false
|
809
838
|
|
810
839
|
product.full_response # <Net::HTTPOK>
|
811
840
|
product.headers # { "date"=>"Fri, 17 Nov 2023 14:25:53 GMT", ...}
|
812
841
|
JSON.parse(product.full_response.body) # "{...}"
|
813
842
|
|
843
|
+
|
814
844
|
### get records
|
815
845
|
EPlat::Product.find(101) # GET EPlat::Product.first(args)) (or EPlat::Product.last(args))
|
816
846
|
EPlat::Product.all
|
data/lib/e_plat/client.rb
CHANGED
@@ -4,13 +4,15 @@ module EPlat
|
|
4
4
|
class Client
|
5
5
|
include Client::PlatformConvenienceMethods, Client::DefaultRequestArgs
|
6
6
|
|
7
|
-
|
8
|
-
|
7
|
+
SHOPIFY_REST_PAGINATION_PARAM = "page_info"
|
8
|
+
SHOPIFY_GRAPHQL_FORWARD_PAGINATION_PARAM = "after"
|
9
|
+
SHOPIFY_GRAPHQL_BACKWARD_PAGINATION_PARAM = "before"
|
10
|
+
BIGCOMMERCE_PAGINATION_PARAM = "page"
|
9
11
|
|
10
12
|
attr_reader :platform, :store_url, :api_token, :api_version, :store_hash
|
11
13
|
|
12
|
-
def initialize(platform: nil, store_url: nil, api_token: nil, store_hash: nil)
|
13
|
-
@platform, @store_url, @api_token, @store_hash = platform&.to_sym, store_url, api_token, store_hash
|
14
|
+
def initialize(platform: nil, store_url: nil, api_token: nil, store_hash: nil, api_version: nil)
|
15
|
+
@platform, @store_url, @api_token, @store_hash, @api_version = platform&.to_sym, store_url, api_token, store_hash, api_version
|
14
16
|
end
|
15
17
|
|
16
18
|
def headers
|
@@ -83,6 +85,19 @@ module EPlat
|
|
83
85
|
"/" # not yet supported
|
84
86
|
end
|
85
87
|
end
|
88
|
+
|
89
|
+
def graphql_request_url
|
90
|
+
case platform
|
91
|
+
when :shopify
|
92
|
+
"https://#{ store_url }/admin/api/#{ api_version.dasherize }/graphql.json"
|
93
|
+
else
|
94
|
+
raise EPlat::Error, "GraphQL is not supported for #{ platform }"
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
def uses_graphql_for_products?
|
99
|
+
platform == :shopify && api_version != "2024_01"
|
100
|
+
end
|
86
101
|
|
87
102
|
def platform_headers
|
88
103
|
case platform
|
@@ -107,6 +122,8 @@ module EPlat
|
|
107
122
|
end
|
108
123
|
|
109
124
|
def api_version
|
125
|
+
return @api_version if @api_version.present?
|
126
|
+
|
110
127
|
case platform
|
111
128
|
when :shopify
|
112
129
|
EPlat.config.shopify_api_version
|
@@ -117,6 +134,10 @@ module EPlat
|
|
117
134
|
end
|
118
135
|
end
|
119
136
|
|
137
|
+
def shopify_graphql_version
|
138
|
+
"V202407"
|
139
|
+
end
|
140
|
+
|
120
141
|
def can_update_nested_resources?
|
121
142
|
case platform
|
122
143
|
when :shopify then true
|
@@ -125,11 +146,16 @@ module EPlat
|
|
125
146
|
end
|
126
147
|
end
|
127
148
|
|
128
|
-
def pagination_param
|
149
|
+
def pagination_param(direction=:forward)
|
129
150
|
case platform
|
130
|
-
when :shopify
|
131
|
-
|
132
|
-
|
151
|
+
when :shopify
|
152
|
+
if uses_graphql_for_products?
|
153
|
+
direction == :backward ? SHOPIFY_GRAPHQL_BACKWARD_PAGINATION_PARAM : SHOPIFY_GRAPHQL_FORWARD_PAGINATION_PARAM
|
154
|
+
else
|
155
|
+
SHOPIFY_REST_PAGINATION_PARAM
|
156
|
+
end
|
157
|
+
when :bigcommerce
|
158
|
+
BIGCOMMERCE_PAGINATION_PARAM
|
133
159
|
end
|
134
160
|
end
|
135
161
|
|
@@ -0,0 +1,58 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
module EPlat
|
4
|
+
class Mapping
|
5
|
+
module Bigcommerce
|
6
|
+
module V3
|
7
|
+
class Product
|
8
|
+
class Option < EPlat::Mapping::Base
|
9
|
+
|
10
|
+
def native_top_key
|
11
|
+
"data"
|
12
|
+
end
|
13
|
+
|
14
|
+
def native_attributes
|
15
|
+
super.concat([
|
16
|
+
"id",
|
17
|
+
"product_id",
|
18
|
+
"display_name",
|
19
|
+
"type",
|
20
|
+
"config",
|
21
|
+
"sort_order",
|
22
|
+
"option_values",
|
23
|
+
"modifiers",
|
24
|
+
"option_set_id",
|
25
|
+
"option_set_display",
|
26
|
+
"variants"
|
27
|
+
])
|
28
|
+
end
|
29
|
+
|
30
|
+
def native_attribute_aliases
|
31
|
+
super.concat([
|
32
|
+
{
|
33
|
+
existing_entry: {native_key: "id", e_plat_key: "id"}
|
34
|
+
},
|
35
|
+
{
|
36
|
+
alias_attribute: {native_key: "display_name", e_plat_key: "name"}
|
37
|
+
},
|
38
|
+
{
|
39
|
+
alias_attribute: {native_key: "sort_order", e_plat_key: "position"}
|
40
|
+
},
|
41
|
+
{
|
42
|
+
alias_attribute: {native_key: "option_values", e_plat_key: "values",
|
43
|
+
custom_e_plat_getter: '-> (option_values) {
|
44
|
+
option_values.map{|val| val.label}
|
45
|
+
}',
|
46
|
+
custom_native_setter: '-> (option) { raise EPlat::Error.new "EPlat does not yet support native setting back to .option_values[i][:label]" }'
|
47
|
+
}
|
48
|
+
}
|
49
|
+
|
50
|
+
])
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
module EPlat
|
4
|
+
class Mapping
|
5
|
+
module Bigcommerce
|
6
|
+
module V3
|
7
|
+
class Product::Variant
|
8
|
+
class OptionValue < EPlat::Mapping::Base
|
9
|
+
|
10
|
+
def native_top_key
|
11
|
+
"data"
|
12
|
+
end
|
13
|
+
|
14
|
+
def native_attributes
|
15
|
+
super.concat([
|
16
|
+
"id",
|
17
|
+
"label",
|
18
|
+
"option_id",
|
19
|
+
"option_display_name"
|
20
|
+
])
|
21
|
+
end
|
22
|
+
|
23
|
+
def native_attribute_aliases
|
24
|
+
super.concat([
|
25
|
+
{
|
26
|
+
existing_entry: {native_key: "id", e_plat_key: "id"}
|
27
|
+
},
|
28
|
+
{
|
29
|
+
alias_attribute: {native_key: "option_display_name", e_plat_key: "name"}
|
30
|
+
},
|
31
|
+
{
|
32
|
+
alias_attribute: {native_key: "label", e_plat_key: "value"}
|
33
|
+
}
|
34
|
+
])
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module EPlat
|
2
|
+
class Mapping
|
3
|
+
module Shopify
|
4
|
+
module V202407 #< :module
|
5
|
+
class Metafield < EPlat::Mapping::Base
|
6
|
+
|
7
|
+
def native_top_key
|
8
|
+
"metafield"
|
9
|
+
end
|
10
|
+
|
11
|
+
def native_attributes
|
12
|
+
super.concat([
|
13
|
+
])
|
14
|
+
end
|
15
|
+
|
16
|
+
def native_attribute_aliases
|
17
|
+
super.concat([
|
18
|
+
])
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
@@ -0,0 +1,30 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
module EPlat
|
4
|
+
class Mapping
|
5
|
+
module Shopify
|
6
|
+
module V202407
|
7
|
+
class Order
|
8
|
+
class ShippingAddress < EPlat::Mapping::Base
|
9
|
+
|
10
|
+
def native_top_key
|
11
|
+
:itself
|
12
|
+
end
|
13
|
+
|
14
|
+
def native_attributes
|
15
|
+
super.concat([
|
16
|
+
])
|
17
|
+
end
|
18
|
+
|
19
|
+
def native_attribute_aliases
|
20
|
+
super.concat([
|
21
|
+
])
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module EPlat
|
2
|
+
class Mapping
|
3
|
+
module Shopify
|
4
|
+
module V202407 #< :module
|
5
|
+
class Order < EPlat::Mapping::Base
|
6
|
+
|
7
|
+
def native_top_key
|
8
|
+
"order"
|
9
|
+
end
|
10
|
+
|
11
|
+
def native_attributes
|
12
|
+
super.concat([
|
13
|
+
])
|
14
|
+
end
|
15
|
+
|
16
|
+
def native_attribute_aliases
|
17
|
+
super.concat([
|
18
|
+
])
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
@@ -0,0 +1,52 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
module EPlat
|
4
|
+
class Mapping
|
5
|
+
module Shopify
|
6
|
+
module V202407
|
7
|
+
class Product
|
8
|
+
class Image < EPlat::Mapping::Base
|
9
|
+
|
10
|
+
def native_top_key
|
11
|
+
:itself
|
12
|
+
end
|
13
|
+
|
14
|
+
def native_attributes
|
15
|
+
super.concat([
|
16
|
+
"id",
|
17
|
+
"alt_text", #would be altText before and after EPlat processes it
|
18
|
+
"width",
|
19
|
+
"height",
|
20
|
+
"url"
|
21
|
+
])
|
22
|
+
end
|
23
|
+
|
24
|
+
def native_attribute_aliases
|
25
|
+
super.concat([
|
26
|
+
{
|
27
|
+
existing_entry: {native_key: "id", e_plat_key: "id",
|
28
|
+
custom_e_plat_getter: '-> { _1.try(:split, "/")&.last || _1 }',
|
29
|
+
custom_native_setter: '-> { "gid://shopify/ProductImage/#{_1}" }'
|
30
|
+
}
|
31
|
+
},
|
32
|
+
{
|
33
|
+
alias_attribute: {native_key: "alt_text", e_plat_key: "alt"}
|
34
|
+
},
|
35
|
+
{
|
36
|
+
existing_entry: {native_key: "width", e_plat_key: "width"}
|
37
|
+
},
|
38
|
+
{
|
39
|
+
existing_entry: {native_key: "height", e_plat_key: "height"}
|
40
|
+
},
|
41
|
+
{
|
42
|
+
alias_attribute: {native_key: "url", e_plat_key: "src"}
|
43
|
+
}
|
44
|
+
])
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
module EPlat
|
4
|
+
class Mapping
|
5
|
+
module Shopify
|
6
|
+
module V202407
|
7
|
+
class Product
|
8
|
+
class Option < EPlat::Mapping::Base
|
9
|
+
include_root_in_request_body true
|
10
|
+
|
11
|
+
def native_top_key
|
12
|
+
:itself
|
13
|
+
end
|
14
|
+
|
15
|
+
def native_attributes
|
16
|
+
super
|
17
|
+
end
|
18
|
+
|
19
|
+
def native_attribute_aliases
|
20
|
+
super.concat([
|
21
|
+
|
22
|
+
{
|
23
|
+
existing_entry: {native_key: "id", e_plat_key: "id",
|
24
|
+
custom_e_plat_getter: '-> { _1&.split("/")&.last }',
|
25
|
+
custom_native_setter: '-> { "gid://shopify/ProductOption/#{_1}" }'
|
26
|
+
}
|
27
|
+
},
|
28
|
+
{
|
29
|
+
existing_entry: {native_key: "name", e_plat_key: "name"}
|
30
|
+
},
|
31
|
+
{
|
32
|
+
existing_entry: {native_key: "position", e_plat_key: "position"}
|
33
|
+
},
|
34
|
+
{
|
35
|
+
existing_entry: {native_key: "values", e_plat_key: "values"}
|
36
|
+
}
|
37
|
+
])
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
module EPlat
|
4
|
+
class Mapping
|
5
|
+
module Shopify
|
6
|
+
module V202407
|
7
|
+
class Product::Variant
|
8
|
+
class OptionValue < EPlat::Mapping::Base
|
9
|
+
include_root_in_request_body true
|
10
|
+
|
11
|
+
def native_top_key
|
12
|
+
:itself
|
13
|
+
end
|
14
|
+
|
15
|
+
def native_attributes
|
16
|
+
super.concat([
|
17
|
+
])
|
18
|
+
end
|
19
|
+
|
20
|
+
|
21
|
+
def native_attribute_aliases
|
22
|
+
super.concat([
|
23
|
+
# see virtual_collection @ EPlat::Mapping::VirtualCollection::Shopify::Product::Variant::OptionValue
|
24
|
+
])
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
|
35
|
+
# bigcommerce
|
36
|
+
# option_values => [{
|
37
|
+
# "id": 174,
|
38
|
+
# "label": "Beige",
|
39
|
+
# "option_id": 220,
|
40
|
+
# "option_display_name": "Color"
|
41
|
+
# }]
|
42
|
+
|
43
|
+
# shopify
|
44
|
+
# selected_options => [{
|
45
|
+
# "name"=>"Size",
|
46
|
+
# "value"=>"green",
|
47
|
+
# "option_value" => {
|
48
|
+
# "id"=>"gid://shopify/ProductOptionValue/657155129475",
|
49
|
+
# "name"=>"green"
|
50
|
+
# }
|
51
|
+
# }]
|
52
|
+
|
53
|
+
# target e_plat schema
|
54
|
+
# option_values => [{
|
55
|
+
# "id": 174,
|
56
|
+
# "name": "Color",
|
57
|
+
# "value": "Beige",
|
58
|
+
# }]
|