e_plat 0.7.3 → 0.9.1

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.
Files changed (29) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +10 -0
  3. data/lib/e_plat/client.rb +1 -0
  4. data/lib/e_plat/resource/base.rb +13 -5
  5. data/lib/e_plat/resource/concerns/graph_q_lable.rb +1 -1
  6. data/lib/e_plat/resource/concerns/overwrite_instance_methods.rb +29 -0
  7. data/lib/e_plat/resource/concerns/overwrite_request_methods.rb +10 -0
  8. data/lib/e_plat/resource/platform_specific/shopify_webhook/metafield.rb +4 -0
  9. data/lib/e_plat/resource/platform_specific/shopify_webhook/order/Consignment.rb +2 -0
  10. data/lib/e_plat/resource/platform_specific/shopify_webhook/order/billing_address.rb +2 -0
  11. data/lib/e_plat/resource/platform_specific/shopify_webhook/order/fulfillment.rb +2 -0
  12. data/lib/e_plat/resource/platform_specific/shopify_webhook/order/line_item.rb +2 -0
  13. data/lib/e_plat/resource/platform_specific/shopify_webhook/order/shipping_address.rb +2 -0
  14. data/lib/e_plat/resource/platform_specific/shopify_webhook/order/shipping_line.rb +2 -0
  15. data/lib/e_plat/resource/platform_specific/shopify_webhook/order.rb +6 -0
  16. data/lib/e_plat/resource/platform_specific/shopify_webhook/product/image.rb +7 -0
  17. data/lib/e_plat/resource/platform_specific/shopify_webhook/product/option.rb +9 -0
  18. data/lib/e_plat/resource/platform_specific/shopify_webhook/product/variant/option_value.rb +7 -0
  19. data/lib/e_plat/resource/platform_specific/shopify_webhook/product/variant.rb +9 -0
  20. data/lib/e_plat/resource/platform_specific/shopify_webhook/product.rb +14 -0
  21. data/lib/e_plat/resource/platform_specific/shopify_webhook/recurring_application_charge/usage_charge.rb +2 -0
  22. data/lib/e_plat/resource/platform_specific/shopify_webhook/recurring_application_charge.rb +6 -0
  23. data/lib/e_plat/resource/platform_specific/shopify_webhook/script_tag.rb +4 -0
  24. data/lib/e_plat/resource/platform_specific/shopify_webhook/shop.rb +4 -0
  25. data/lib/e_plat/resource/platform_specific/shopify_webhook/webhook.rb +4 -0
  26. data/lib/e_plat/resource/product/image.rb +1 -1
  27. data/lib/e_plat/resource/product/variant.rb +6 -2
  28. data/lib/e_plat/version.rb +1 -1
  29. metadata +20 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5577cb6f825d656e170ae63d33c027e9b50080040347496bdf96d3c4f09920c3
4
- data.tar.gz: 75cde1f016be6b06f07ba9201655496c7262e47d1611e320193c9d994549561a
3
+ metadata.gz: dd6ef96f210a4ce19e39876714cf947410ad47c6a93794c5f06aee1d8ec1f0f4
4
+ data.tar.gz: 6b83f5036d786165bfc0a36e3a651bea55679f1cf3c2c0672adc9b3b90ca26a1
5
5
  SHA512:
6
- metadata.gz: 12484df951bb9fe2311ceb78e1b6ee3f990a82dcddc06702153da350b14e7b1e3c87180591536e80965eeff731c3a1d63f5012c8dceb8df7e86014c29d95479a
7
- data.tar.gz: fe491070587b5284dc61d52db7bea1c2951e38bd6e0847b06d11b19077cf0468b7c35f8a7a19993bfac37632be6c9cabf863a30b76abcfab7c6929d064da26c3
6
+ metadata.gz: 7dc8395400075cc15f5e2437257b7147ff6331dc92c78ea93377b70b85d7711d5ce0c6dd9f2557608b2425834a5d2f68881b8b62a132d1053bbfd6c102bac0ca
7
+ data.tar.gz: a5cbdad7ccfaad6d49d633225665ee920124ecf12f2a20a8533fb8244a93db0988a66a47f9e2bc081c279ee249e3e9b83caa449744cd9a2b20650027cf958534
data/README.md CHANGED
@@ -560,6 +560,7 @@ Unfortunately it's in a Time Integer format. Haven't yet got dynamic conversion
560
560
 
561
561
  <br>
562
562
  <hr>
563
+
563
564
  <br>
564
565
 
565
566
  ## API Coverage
@@ -806,6 +807,13 @@ Unfortunately it's in a Time Integer format. Haven't yet got dynamic conversion
806
807
  <br>
807
808
 
808
809
 
810
+ > [!NOTE]
811
+ > For all resources, we also have a EPlat::ShopifyWebhook::{resource} class. These use the old REST API mappings that the webhooks still use.
812
+ > At PreProduct we interact with cached webhook hashes using these classes, e.g. `EPlat::ShopifyWebhook::Product.new({...})`.
813
+ > Meaning we can safely call getter methods and access the usual EPlat schema.
814
+
815
+
816
+
809
817
 
810
818
  <hr>
811
819
  <br>
@@ -895,6 +903,8 @@ product.as_json # hash of any updated attributes
895
903
  product.as_full_json # hash of all attributes, regardless of if they've been updated or not
896
904
  product.to_json # JSON string of any updated_attributes
897
905
  product.to_full_json # JSON string of all attributes. regardless of if they've been updated or not
906
+ product.as_eplat_json # hash of all resource's EPlat attributes, values as EPlat getters produce
907
+ product.to_eplat_json # JSON of all resource's EPlat attributes, values as EPlat getters produce
898
908
 
899
909
  ```
900
910
 
data/lib/e_plat/client.rb CHANGED
@@ -23,6 +23,7 @@ module EPlat
23
23
  # needs to return nil if there isn't a more specific class than the klass passed in
24
24
  def platform_klass(klass)
25
25
  return if klass.to_s.include? "EPlat::#{platform.capitalize}"
26
+
26
27
  platform_specific_class_name = klass.to_s.gsub("EPlat::", "EPlat::#{platform.capitalize}::")
27
28
 
28
29
  platform_specific_class = platform_specific_class_name.safe_constantize
@@ -18,7 +18,7 @@ module EPlat
18
18
  attr_accessor :read_only
19
19
 
20
20
  threadsafe_attribute :_headers, :_connection, :_user, :_password, :_bearer_token, :_site, :_proxy, # active resource
21
- :mapping, :include_root_in_json, :include_format_in_path # e_plat specific
21
+ :mapping, :include_root_in_json, :include_format_in_path, :mapping_class # e_plat specific
22
22
 
23
23
  def inherited(subclass)
24
24
  super
@@ -33,7 +33,7 @@ module EPlat
33
33
  self.timeout = 5
34
34
  self.include_format_in_path = client.include_format_in_path?
35
35
  self.mapping = mapping_instance
36
-
36
+
37
37
  client.platform_headers.each {|name, value| self.headers[name] = value}
38
38
  end
39
39
 
@@ -71,12 +71,18 @@ module EPlat
71
71
  def platform_specific_class?
72
72
  self.class.to_s.include? client.platform.to_s.capitalize
73
73
  end
74
+
75
+ def cached_shopify_webhook?
76
+ self.to_s.include?("EPlat::ShopifyWebhook")
77
+ end
78
+
74
79
 
75
80
  private
76
81
 
77
82
  def mapping_instance
78
- mapping_class_name = "EPlat::Mapping::#{ client.platform.capitalize }::V#{ client.api_version.camelize }::#{ element_name.classify }"
79
-
83
+ api_version = (client.shopify? && self.to_s.include?("EPlat::ShopifyWebhook")) ? "2024_01" : client.api_version
84
+ mapping_class_name = "EPlat::Mapping::#{ client.platform.capitalize }::V#{ api_version.camelize }::#{ element_name.classify }"
85
+
80
86
  EPlat::Mapping.new_instance(specifc_mapping: mapping_class_name, resource: nil)
81
87
  end
82
88
 
@@ -164,7 +170,9 @@ module EPlat
164
170
 
165
171
  def mapping_instance
166
172
  class_constant_string = self.class.to_s.gsub("EPlat::", "")
167
- mapping_class_name = "EPlat::Mapping::#{ client.platform.capitalize }::V#{ client.api_version.camelize }::#{ class_constant_string }"
173
+ class_constant_string.gsub!("ShopifyWebhook", "Shopify")
174
+ api_version = (client.shopify? && self.class.to_s.include?("EPlat::ShopifyWebhook")) ? "2024_01" : client.api_version
175
+ mapping_class_name = "EPlat::Mapping::#{ client.platform.capitalize }::V#{ api_version.camelize }::#{ class_constant_string }"
168
176
 
169
177
  EPlat::Mapping.new_instance(specifc_mapping: mapping_class_name, resource: self)
170
178
  end
@@ -97,7 +97,7 @@ module EPlat
97
97
  when :find_one
98
98
  {first: 1}
99
99
  when :find_every
100
- {first: scope || 200}
100
+ {first: scope || 20}
101
101
  end
102
102
 
103
103
  (options[:params] || {}).with_defaults(scope_arg)
@@ -48,6 +48,35 @@ module EPlat
48
48
  end
49
49
  end
50
50
 
51
+ def to_eplat_json(options = {})
52
+ root_at_top_of_json = self.mapping.include_root_in_request_body?(self)
53
+ options[:root] = self.element_name if root_at_top_of_json
54
+
55
+ result = '{'
56
+ result << as_eplat_json.map do |key, value|
57
+ "#{ActiveSupport::JSON.encode(key.to_s)}:#{ActiveSupport::JSON.encode(value, options)}"
58
+ end * ','
59
+ result << '}'
60
+ end
61
+
62
+
63
+ def as_eplat_json
64
+ schema_keys = self.class.schema.keys
65
+ schema_keys.each_with_object({}) do |key, hash|
66
+ value = send(key)
67
+
68
+ hash[key] =
69
+ if value.is_a?(Array)
70
+ value.map { |item| item.respond_to?(:as_eplat_json) ? item.as_eplat_json : item }
71
+ elsif value.respond_to?(:as_eplat_json)
72
+ value.as_eplat_json
73
+ else
74
+ value
75
+ end
76
+ end
77
+ end
78
+
79
+
51
80
  # Create and return a class definition for a resource inside the current resource
52
81
  def create_resource_for(resource_name)
53
82
  resource = Class.new(EPlat::Base) # <- this line changed
@@ -9,6 +9,7 @@ module EPlat
9
9
  module ClassMethods
10
10
  def find(*arguments)
11
11
  client = EPlat::Current.e_plat_session
12
+ cached_shopify_webhook_warning if cached_shopify_webhook?
12
13
 
13
14
  if client.platform_klass(self) and not platform_specific_class?
14
15
  client.platform_klass(self).find(*arguments)
@@ -54,6 +55,7 @@ module EPlat
54
55
 
55
56
  def create(attributes = {})
56
57
  client = EPlat::Current.e_plat_session
58
+ cached_shopify_webhook_warning if cached_shopify_webhook?
57
59
 
58
60
  if client.platform_klass(self)
59
61
  client.platform_klass(self).create(attributes)
@@ -66,6 +68,7 @@ module EPlat
66
68
 
67
69
  def update(attributes = {})
68
70
  client = EPlat::Current.e_plat_session
71
+ cached_shopify_webhook_warning if cached_shopify_webhook?
69
72
 
70
73
  if client.platform_klass(self)
71
74
  client.platform_klass(self).update(attributes)
@@ -79,6 +82,7 @@ module EPlat
79
82
 
80
83
  def delete(id, options = {})
81
84
  client = EPlat::Current.e_plat_session
85
+ cached_shopify_webhook_warning if cached_shopify_webhook?
82
86
 
83
87
  if client.platform_klass(self)
84
88
  client.platform_klass(self).delete(id, options)
@@ -90,6 +94,7 @@ module EPlat
90
94
 
91
95
  def exists?(id, options = {})
92
96
  client = EPlat::Current.e_plat_session
97
+ cached_shopify_webhook_warning if cached_shopify_webhook?
93
98
 
94
99
  if client.platform_klass(self)
95
100
  client.platform_klass(self).exists?(id, options)
@@ -109,6 +114,11 @@ module EPlat
109
114
  class_constant_string = self.name.gsub("EPlat::", "")
110
115
  "EPlat::Mapping::#{client.platform.capitalize}::V#{client.api_version.camelize}::#{class_constant_string}"
111
116
  end
117
+
118
+ def cached_shopify_webhook_warning
119
+ warn "***EPlat Warning this is a cached webhook. request a live resource instead to request with***"
120
+ end
121
+
112
122
  end
113
123
 
114
124
 
@@ -0,0 +1,4 @@
1
+
2
+ module EPlat::ShopifyWebhook
3
+ class Metafield < EPlat::Metafield; end
4
+ end
@@ -0,0 +1,2 @@
1
+
2
+ class EPlat::ShopifyWebhook::Order::Consignment < EPlat::Order::Consignment; end
@@ -0,0 +1,2 @@
1
+
2
+ class EPlat::ShopifyWebhook::Order::BillingAddress < EPlat::Order::BillingAddress; end
@@ -0,0 +1,2 @@
1
+
2
+ class EPlat::ShopifyWebhook::Order::Fulfillment < EPlat::Order::Fulfillment; end
@@ -0,0 +1,2 @@
1
+
2
+ class EPlat::ShopifyWebhook::Order::LineItem < EPlat::Order::LineItem; end
@@ -0,0 +1,2 @@
1
+
2
+ class EPlat::ShopifyWebhook::Order::ShippingAddress < EPlat::Order::ShippingAddress; end
@@ -0,0 +1,2 @@
1
+
2
+ class EPlat::ShopifyWebhook::Order::ShippingLine < EPlat::Order::ShippingLine; end
@@ -0,0 +1,6 @@
1
+
2
+ module EPlat::ShopifyWebhook
3
+ class Order < EPlat::Order
4
+ has_many :line_items, class_name: "EPlat::ShopifyWebhook::Order::LineItem"
5
+ end
6
+ end
@@ -0,0 +1,7 @@
1
+
2
+ class EPlat::ShopifyWebhook::Product::Image < EPlat::Product::Image
3
+ def self.graphql_fields
4
+ warn "this is a cached webhook. request a live resource instead"
5
+ EPlat::Shopify::Product::Image.graphql_fields
6
+ end
7
+ end
@@ -0,0 +1,9 @@
1
+
2
+ class EPlat::ShopifyWebhook::Product::Option < EPlat::Product::Option
3
+
4
+ def self.graphql_fields
5
+ warn "this is a cached webhook. request a live resource instead"
6
+ EPlat::Shopify::Product::Option.graphql_fields
7
+ end
8
+
9
+ end
@@ -0,0 +1,7 @@
1
+
2
+ class EPlat::ShopifyWebhook::Product::Variant::OptionValue < EPlat::Product::Variant::OptionValue
3
+ def self.graphql_fields
4
+ warn "this is a cached webhook. request a live resource instead"
5
+ EPlat::Shopify::Product::Variant::OptionValue.graphql_fields
6
+ end
7
+ end
@@ -0,0 +1,9 @@
1
+
2
+ class EPlat::ShopifyWebhook::Product::Variant < EPlat::Product::Variant
3
+
4
+ def self.graphql_fields
5
+ warn "this is a cached webhook. request a live resource instead"
6
+ EPlat::Shopify::Product::Variant.graphql_fields
7
+ end
8
+
9
+ end
@@ -0,0 +1,14 @@
1
+
2
+ module EPlat::ShopifyWebhook
3
+ class Product < EPlat::Product
4
+ has_many :variants, class_name: "EPlat::ShopifyWebhook::Product::Variant"
5
+ has_many :images, class_name: "EPlat::ShopifyWebhook::Product::Image"
6
+ has_many :options, class_name: "EPlat::ShopifyWebhook::Product::Option"
7
+
8
+ def self.graphql_fields
9
+ warn "this is a cached webhook. request a live resource instead"
10
+ EPlat::Shopify::Product.graphql_fields
11
+ end
12
+
13
+ end
14
+ end
@@ -0,0 +1,2 @@
1
+
2
+ class EPlat::ShopifyWebhook::RecurringApplicationCharge::UsageCharge < EPlat::RecurringApplicationCharge::UsageCharge; end
@@ -0,0 +1,6 @@
1
+
2
+ module EPlat::ShopifyWebhook
3
+ class RecurringApplicationCharge < EPlat::RecurringApplicationCharge
4
+ has_many :usage_charges, class_name: "EPlat::ShopifyWebhook::RecurringApplicationCharge::UsageCharge"
5
+ end
6
+ end
@@ -0,0 +1,4 @@
1
+
2
+ module EPlat::ShopifyWebhook
3
+ class ScriptTag < EPlat::ScriptTag; end
4
+ end
@@ -0,0 +1,4 @@
1
+
2
+ module EPlat::ShopifyWebhook
3
+ class Shop < EPlat::Shop; end
4
+ end
@@ -0,0 +1,4 @@
1
+
2
+ module EPlat::ShopifyWebhook
3
+ class Webhook < EPlat::Webhook; end
4
+ end
@@ -23,7 +23,7 @@ module EPlat
23
23
  end
24
24
 
25
25
  def variant_ids
26
- product.variants.map(&:id)
26
+ product&.variants&.map(&:id) || []
27
27
  end
28
28
 
29
29
  def variant_ids=(ids)
@@ -28,6 +28,8 @@ module EPlat
28
28
  string :tax_code
29
29
  boolean :requires_shipping
30
30
  string :admin_graphql_api_id
31
+ array :option_values
32
+ # hash :image # default: {}, just for Shopify Webhooks
31
33
  end
32
34
 
33
35
  def save
@@ -35,10 +37,12 @@ module EPlat
35
37
  super
36
38
  end
37
39
 
38
- def image_src
40
+ def image_src(images=[]) # EPlat::Product::Image => string
39
41
  if client.bigcommerce?
40
42
  image_url
41
- elsif client.shopify? && client.uses_graphql_for_products?
43
+ elsif is_a?(EPlat::ShopifyWebhook::Product::Variant)
44
+ images.to_a.find{ |i| i.id == image_id }.try(:src)
45
+ elsif is_a?(EPlat::Shopify::Product::Variant)
42
46
  image&.src
43
47
  end
44
48
  end
@@ -1,3 +1,3 @@
1
1
  module EPlat
2
- VERSION = "0.7.3"
2
+ VERSION = "0.9.1"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: e_plat
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.3
4
+ version: 0.9.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - oliwoodsuk
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-05-31 00:00:00.000000000 Z
11
+ date: 2024-06-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -382,6 +382,24 @@ files:
382
382
  - lib/e_plat/resource/platform_specific/shopify/script_tag.rb
383
383
  - lib/e_plat/resource/platform_specific/shopify/shop.rb
384
384
  - lib/e_plat/resource/platform_specific/shopify/webhook.rb
385
+ - lib/e_plat/resource/platform_specific/shopify_webhook/metafield.rb
386
+ - lib/e_plat/resource/platform_specific/shopify_webhook/order.rb
387
+ - lib/e_plat/resource/platform_specific/shopify_webhook/order/Consignment.rb
388
+ - lib/e_plat/resource/platform_specific/shopify_webhook/order/billing_address.rb
389
+ - lib/e_plat/resource/platform_specific/shopify_webhook/order/fulfillment.rb
390
+ - lib/e_plat/resource/platform_specific/shopify_webhook/order/line_item.rb
391
+ - lib/e_plat/resource/platform_specific/shopify_webhook/order/shipping_address.rb
392
+ - lib/e_plat/resource/platform_specific/shopify_webhook/order/shipping_line.rb
393
+ - lib/e_plat/resource/platform_specific/shopify_webhook/product.rb
394
+ - lib/e_plat/resource/platform_specific/shopify_webhook/product/image.rb
395
+ - lib/e_plat/resource/platform_specific/shopify_webhook/product/option.rb
396
+ - lib/e_plat/resource/platform_specific/shopify_webhook/product/variant.rb
397
+ - lib/e_plat/resource/platform_specific/shopify_webhook/product/variant/option_value.rb
398
+ - lib/e_plat/resource/platform_specific/shopify_webhook/recurring_application_charge.rb
399
+ - lib/e_plat/resource/platform_specific/shopify_webhook/recurring_application_charge/usage_charge.rb
400
+ - lib/e_plat/resource/platform_specific/shopify_webhook/script_tag.rb
401
+ - lib/e_plat/resource/platform_specific/shopify_webhook/shop.rb
402
+ - lib/e_plat/resource/platform_specific/shopify_webhook/webhook.rb
385
403
  - lib/e_plat/resource/product.rb
386
404
  - lib/e_plat/resource/product/image.rb
387
405
  - lib/e_plat/resource/product/option.rb