spree_cm_commissioner 1.18.0 → 1.18.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2c10fd2782b1a1ac7ecab5d27e02a49212f8e816f8f2325fadbcd717fe9882e9
4
- data.tar.gz: 3b1b296e3403e5dd040063c19a3ac4952afafb617af17cd2ca924ea8df25de23
3
+ metadata.gz: 60a9ca64e7401f96f8cb7e220a28a12ca89d7bc84ce724b0e7751e1c0abf1d0e
4
+ data.tar.gz: cb4e4fbfd87c785a73c23ee8fd3a02fadacf864d5c905df5a654c56069a79769
5
5
  SHA512:
6
- metadata.gz: 1f31cf8a9073664246d505c0494b2da2dc6565ec14c57fae06f34320039a478af4d8a1e0ee5eb1e68c42a5de37baf393bee0e791f7d9dfb8fd2b66356f143566
7
- data.tar.gz: e29ba3d6d3e2d8343209260edd69117fe67c14ea1c20c13891b6cd9930f044467daa7b2fffaff51ab27db42e98eb7f43a85254e33a4644927e3eb61a1e9d742f
6
+ metadata.gz: 0db6f0473e7663f28e179e51cc68034c6b96315d402a38bb49fef0669ba23ae46cc615d7ee350ec551b1c7fd1686a724a1aef0057ce2b4f637913766c8cdd8c9
7
+ data.tar.gz: bf5d35d082edc126bcead686c1d1de3e74f2a2bed22a1cbdd62e60dea23679c007ff1fb523f0a3447a3b598b1e3c66838b28f35e408b82024de877c5da237657
data/Gemfile.lock CHANGED
@@ -34,7 +34,7 @@ GIT
34
34
  PATH
35
35
  remote: .
36
36
  specs:
37
- spree_cm_commissioner (1.18.0)
37
+ spree_cm_commissioner (1.18.1)
38
38
  activerecord-multi-tenant
39
39
  activerecord_json_validator (~> 2.1, >= 2.1.3)
40
40
  aws-sdk-cloudfront
@@ -572,6 +572,10 @@ GEM
572
572
  nokogiri (1.15.4)
573
573
  mini_portile2 (~> 2.8.2)
574
574
  racc (~> 1.4)
575
+ nokogiri (1.15.4-x86_64-darwin)
576
+ racc (~> 1.4)
577
+ nokogiri (1.15.4-x86_64-linux)
578
+ racc (~> 1.4)
575
579
  noticed (1.6.3)
576
580
  http (>= 4.0.0)
577
581
  rails (>= 5.2.0)
@@ -6,8 +6,9 @@ module SpreeCmCommissioner
6
6
  after_action :set_cache_control_for_cdn
7
7
  end
8
8
 
9
+ # Override This Method based on your UseCase
9
10
  def max_age
10
- ENV.fetch('CONTENT_CACHE_MAX_AGE', '180')
11
+ ENV.fetch('CONTENT_CACHE_MAX_AGE', 1.day.to_i).to_i
11
12
  end
12
13
 
13
14
  def set_cache_control_for_cdn
@@ -38,27 +38,25 @@ module Spree
38
38
  def update
39
39
  spree_authorize! :update, spree_current_order, order_token
40
40
 
41
- if guest_params[:guest_dynamic_fields_attributes]
42
- resource.guest_dynamic_fields.destroy_all
41
+ begin
42
+ if guest_params[:guest_dynamic_fields_attributes]
43
+ resource.guest_dynamic_fields.destroy_all
43
44
 
44
- guest_params[:guest_dynamic_fields_attributes].each do |attr|
45
- field = resource.guest_dynamic_fields.build(attr.except(:id))
46
-
47
- if field.dynamic_field.requires_dynamic_field_options?
48
- option = field.dynamic_field.dynamic_field_options.find_by(id: field.value)
49
- field.dynamic_field_option = option if option
45
+ guest_params[:guest_dynamic_fields_attributes].each do |attr|
46
+ field = build_dynamic_field(attr)
47
+ field.save!
50
48
  end
51
-
52
- field.save!
53
49
  end
54
- end
55
50
 
56
- resource.assign_attributes(guest_params.except(:guest_dynamic_fields_attributes))
51
+ resource.assign_attributes(guest_params.except(:guest_dynamic_fields_attributes))
57
52
 
58
- if resource.save
59
- render_serialized_payload { serialize_resource(resource) }
60
- else
61
- render_error_payload(resource, 400)
53
+ if resource.save
54
+ render_serialized_payload { serialize_resource(resource) }
55
+ else
56
+ render_error_payload(resource.errors, 400)
57
+ end
58
+ rescue ActiveRecord::RecordInvalid => e
59
+ render_error_payload(e.record.errors, 400)
62
60
  end
63
61
  end
64
62
 
@@ -96,6 +94,17 @@ module Spree
96
94
  guest_dynamic_fields_attributes: %i[id dynamic_field_id dynamic_field_option_id value _destroy]
97
95
  )
98
96
  end
97
+
98
+ def build_dynamic_field(attr)
99
+ field = resource.guest_dynamic_fields.build(attr.except(:id))
100
+
101
+ if field.dynamic_field.requires_dynamic_field_options?
102
+ option = field.dynamic_field.dynamic_field_options.find_by(id: field.value)
103
+ field.dynamic_field_option = option if option
104
+ end
105
+
106
+ field
107
+ end
99
108
  end
100
109
  end
101
110
  end
@@ -3,19 +3,31 @@ module SpreeCmCommissioner
3
3
  before_action :identify_request_source
4
4
  rescue_from StandardError, with: :handle_error
5
5
 
6
- def show
7
- case params[:id]
8
- when 'assetlinks.json'
9
- render_preference(:preferred_assetlinks)
10
- when 'apple-app-site-association'
11
- render_preference(:preferred_apple_app_site_association)
6
+ def assetlinks_json
7
+ render_universal_link('assetlinks.json')
8
+ end
9
+
10
+ def apple_app_site_association
11
+ render_universal_link('apple-app-site-association')
12
+ end
13
+
14
+ private
15
+
16
+ def render_universal_link(universal_link)
17
+ result = SpreeCmCommissioner::UniversalLinkFetcher.new(
18
+ universal_link: universal_link,
19
+ store: @store,
20
+ tenant: @tenant,
21
+ refresh: params[:_refresh].to_s == 'true'
22
+ ).call
23
+
24
+ if result[:success]
25
+ render json: result[:data]
12
26
  else
13
27
  render_not_found
14
28
  end
15
29
  end
16
30
 
17
- private
18
-
19
31
  def identify_request_source
20
32
  host = params[:original_host].presence || request.host.downcase
21
33
 
@@ -25,16 +37,6 @@ module SpreeCmCommissioner
25
37
  @tenant = result.tenant
26
38
  end
27
39
 
28
- def render_preference(preference_key)
29
- if @store&.send(preference_key).present?
30
- render json: @store.send(preference_key)
31
- elsif @tenant&.send(preference_key).present?
32
- render json: @tenant.send(preference_key)
33
- else
34
- render_not_found
35
- end
36
- end
37
-
38
40
  def render_not_found
39
41
  render json: { error: 'Not found' }, status: :not_found
40
42
  end
@@ -0,0 +1,54 @@
1
+ module SpreeCmCommissioner
2
+ class UniversalLinkFetcher < BaseInteractor
3
+ delegate :universal_link, :store, :tenant, :refresh, to: :context
4
+
5
+ def call
6
+ return not_found unless resource
7
+
8
+ data = load_cached_preference(resource)
9
+ return not_found if data.blank?
10
+
11
+ { success: true, data: data }
12
+ end
13
+
14
+ private
15
+
16
+ def resource
17
+ @resource ||= store.presence || tenant
18
+ end
19
+
20
+ def load_cached_preference(resource)
21
+ preference_key = preference_key_for(universal_link)
22
+ return nil unless preference_key && resource.respond_to?(preference_key)
23
+
24
+ updated_at = resource.try(:updated_at)&.to_i || 'no_updated_at'
25
+ cache_key = build_cache_key(universal_link, resource, updated_at)
26
+
27
+ CmAppLogger.log(label: 'LOOKING_UP_CACHE', data: { cache_key: cache_key })
28
+
29
+ Rails.cache.delete(cache_key) if refresh
30
+
31
+ Rails.cache.fetch(cache_key, expires_in: 1.day, force: refresh) do
32
+ CmAppLogger.log(label: 'CACHE_MISS', data: { cache_key: cache_key })
33
+ resource.public_send(preference_key).presence
34
+ end
35
+ end
36
+
37
+ def build_cache_key(universal_link, resource, updated_at)
38
+ "well_known:#{universal_link}:#{resource.class.name}:#{resource.id}:#{updated_at}"
39
+ end
40
+
41
+ def preference_key_for(universal_link)
42
+ case universal_link
43
+ when 'assetlinks.json'
44
+ :preferred_assetlinks
45
+ when 'apple-app-site-association'
46
+ :preferred_apple_app_site_association
47
+ end
48
+ end
49
+
50
+ def not_found
51
+ { success: false, error: 'Not found' }
52
+ end
53
+ end
54
+ end
data/config/routes.rb CHANGED
@@ -669,5 +669,6 @@ Rails.application.routes.draw do
669
669
  get 'o/:id', to: 'spree_cm_commissioner/orders#show', as: 'order'
670
670
  get 'li/:id', to: 'spree_cm_commissioner/line_item_qr_images#show', as: 'line_item_qr_image'
671
671
  get 'g/:id', to: 'spree_cm_commissioner/guest_cards#show', as: 'guest_cards'
672
- get '.well-known/:id', to: 'spree_cm_commissioner/well_known#show', constraints: { id: /(assetlinks\.json|apple-app-site-association)/ }
672
+ get '.well-known/assetlinks.json', to: 'spree_cm_commissioner/well_known#assetlinks_json'
673
+ get '.well-known/apple-app-site-association', to: 'spree_cm_commissioner/well_known#apple_app_site_association'
673
674
  end
@@ -1,5 +1,5 @@
1
1
  module SpreeCmCommissioner
2
- VERSION = '1.18.0'.freeze
2
+ VERSION = '1.18.1'.freeze
3
3
 
4
4
  module_function
5
5
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spree_cm_commissioner
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.18.0
4
+ version: 1.18.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - You
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-07-07 00:00:00.000000000 Z
11
+ date: 2025-07-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: spree
@@ -1116,6 +1116,7 @@ files:
1116
1116
  - app/interactors/spree_cm_commissioner/telegram_web_app_vendor_user_checker.rb
1117
1117
  - app/interactors/spree_cm_commissioner/transactional_email_sender.rb
1118
1118
  - app/interactors/spree_cm_commissioner/unique_device_token_cron_executor.rb
1119
+ - app/interactors/spree_cm_commissioner/universal_link_fetcher.rb
1119
1120
  - app/interactors/spree_cm_commissioner/update_payment_gateway_status.rb
1120
1121
  - app/interactors/spree_cm_commissioner/user_contact_updater.rb
1121
1122
  - app/interactors/spree_cm_commissioner/user_device_token_deregister.rb