spree_api 4.2.4 → 4.3.0.rc3

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 (99) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +14 -1
  3. data/app/controllers/concerns/spree/api/v2/caching.rb +33 -0
  4. data/app/controllers/concerns/spree/api/v2/product_list_includes.rb +23 -0
  5. data/app/controllers/spree/api/v1/classifications_controller.rb +4 -3
  6. data/app/controllers/spree/api/v1/orders_controller.rb +5 -1
  7. data/app/controllers/spree/api/v1/products_controller.rb +2 -2
  8. data/app/controllers/spree/api/v1/taxonomies_controller.rb +1 -1
  9. data/app/controllers/spree/api/v2/base_controller.rb +31 -6
  10. data/app/controllers/spree/api/v2/platform/addresses_controller.rb +19 -0
  11. data/app/controllers/spree/api/v2/platform/classifications_controller.rb +43 -0
  12. data/app/controllers/spree/api/v2/platform/cms_pages_controller.rb +15 -0
  13. data/app/controllers/spree/api/v2/platform/cms_sections_controller.rb +34 -0
  14. data/app/controllers/spree/api/v2/platform/countries_controller.rb +19 -0
  15. data/app/controllers/spree/api/v2/platform/menu_items_controller.rb +35 -0
  16. data/app/controllers/spree/api/v2/platform/menus_controller.rb +23 -0
  17. data/app/controllers/spree/api/v2/platform/option_types_controller.rb +15 -0
  18. data/app/controllers/spree/api/v2/platform/option_values_controller.rb +19 -0
  19. data/app/controllers/spree/api/v2/platform/products_controller.rb +33 -0
  20. data/app/controllers/spree/api/v2/platform/resource_controller.rb +115 -0
  21. data/app/controllers/spree/api/v2/platform/taxons_controller.rb +30 -0
  22. data/app/controllers/spree/api/v2/platform/users_controller.rb +28 -0
  23. data/app/controllers/spree/api/v2/resource_controller.rb +24 -7
  24. data/app/controllers/spree/api/v2/storefront/account/addresses_controller.rb +2 -14
  25. data/app/controllers/spree/api/v2/storefront/account/credit_cards_controller.rb +13 -11
  26. data/app/controllers/spree/api/v2/storefront/account/orders_controller.rb +6 -2
  27. data/app/controllers/spree/api/v2/storefront/account_controller.rb +32 -1
  28. data/app/controllers/spree/api/v2/storefront/cart_controller.rb +28 -6
  29. data/app/controllers/spree/api/v2/storefront/checkout_controller.rb +2 -1
  30. data/app/controllers/spree/api/v2/storefront/cms_pages_controller.rb +41 -0
  31. data/app/controllers/spree/api/v2/storefront/countries_controller.rb +16 -14
  32. data/app/controllers/spree/api/v2/storefront/menus_controller.rb +35 -0
  33. data/app/controllers/spree/api/v2/storefront/order_status_controller.rb +1 -1
  34. data/app/controllers/spree/api/v2/storefront/products_controller.rb +10 -12
  35. data/app/controllers/spree/api/v2/storefront/stores_controller.rb +1 -1
  36. data/app/controllers/spree/api/v2/storefront/taxons_controller.rb +7 -8
  37. data/app/helpers/spree/api/v2/display_money_helper.rb +2 -2
  38. data/app/models/spree/api_configuration.rb +4 -1
  39. data/app/models/spree/api_dependencies.rb +20 -5
  40. data/app/serializers/concerns/spree/api/v2/image_transformation_concern.rb +15 -0
  41. data/app/serializers/concerns/spree/api/v2/resource_serializer_concern.rb +16 -0
  42. data/app/serializers/concerns/spree/api/v2/taxon_image_transformation_concern.rb +15 -0
  43. data/app/serializers/spree/api/v2/base_serializer.rb +32 -0
  44. data/app/serializers/spree/api/v2/platform/address_serializer.rb +15 -0
  45. data/app/serializers/spree/api/v2/platform/base_serializer.rb +10 -0
  46. data/app/serializers/spree/api/v2/platform/classification_serializer.rb +14 -0
  47. data/app/serializers/spree/api/v2/platform/cms_page_serializer.rb +13 -0
  48. data/app/serializers/spree/api/v2/platform/cms_section_serializer.rb +11 -0
  49. data/app/serializers/spree/api/v2/platform/country_serializer.rb +13 -0
  50. data/app/serializers/spree/api/v2/platform/icon_serializer.rb +16 -0
  51. data/app/serializers/spree/api/v2/platform/image_serializer.rb +17 -0
  52. data/app/serializers/spree/api/v2/platform/menu_item_serializer.rb +45 -0
  53. data/app/serializers/spree/api/v2/platform/menu_serializer.rb +13 -0
  54. data/app/serializers/spree/api/v2/platform/option_type_serializer.rb +13 -0
  55. data/app/serializers/spree/api/v2/platform/option_value_serializer.rb +13 -0
  56. data/app/serializers/spree/api/v2/platform/product_property_serializer.rb +11 -0
  57. data/app/serializers/spree/api/v2/platform/product_serializer.rb +78 -0
  58. data/app/serializers/spree/api/v2/platform/state_serializer.rb +13 -0
  59. data/app/serializers/spree/api/v2/platform/stock_item_serializer.rb +20 -0
  60. data/app/serializers/spree/api/v2/platform/stock_location_serializer.rb +16 -0
  61. data/app/serializers/spree/api/v2/platform/store_serializer.rb +14 -0
  62. data/app/serializers/spree/api/v2/platform/tax_category_serializer.rb +13 -0
  63. data/app/serializers/spree/api/v2/platform/taxon_image_serializer.rb +15 -0
  64. data/app/serializers/spree/api/v2/platform/taxon_serializer.rb +38 -0
  65. data/app/serializers/spree/api/v2/platform/taxonomy_serializer.rb +14 -0
  66. data/app/serializers/spree/api/v2/platform/user_serializer.rb +37 -0
  67. data/app/serializers/spree/api/v2/platform/variant_serializer.rb +57 -0
  68. data/app/serializers/spree/v2/storefront/base_serializer.rb +3 -2
  69. data/app/serializers/spree/v2/storefront/cms_page_serializer.rb +14 -0
  70. data/app/serializers/spree/v2/storefront/cms_section_serializer.rb +28 -0
  71. data/app/serializers/spree/v2/storefront/country_serializer.rb +4 -4
  72. data/app/serializers/spree/v2/storefront/estimated_shipping_rate_serializer.rb +2 -0
  73. data/app/serializers/spree/v2/storefront/icon_serializer.rb +14 -0
  74. data/app/serializers/spree/v2/storefront/image_serializer.rb +3 -1
  75. data/app/serializers/spree/v2/storefront/menu_item_serializer.rb +43 -0
  76. data/app/serializers/spree/v2/storefront/menu_serializer.rb +13 -0
  77. data/app/serializers/spree/v2/storefront/payment_method_serializer.rb +4 -0
  78. data/app/serializers/spree/v2/storefront/product_property_serializer.rb +1 -1
  79. data/app/serializers/spree/v2/storefront/product_serializer.rb +21 -12
  80. data/app/serializers/spree/v2/storefront/store_serializer.rb +10 -0
  81. data/app/serializers/spree/v2/storefront/taxon_image_serializer.rb +3 -1
  82. data/app/serializers/spree/v2/storefront/taxon_serializer.rb +6 -5
  83. data/config/initializers/doorkeeper.rb +8 -1
  84. data/config/initializers/rabl.rb +9 -0
  85. data/config/locales/en.yml +1 -1
  86. data/config/routes.rb +115 -3
  87. data/db/migrate/20210727102516_change_integer_id_columns_type.rb +9 -0
  88. data/docs/oauth/index.yml +4 -4
  89. data/docs/v2/platform/index.yaml +3597 -0
  90. data/docs/v2/storefront/index.yaml +12117 -1610
  91. data/lib/spree/api/engine.rb +6 -17
  92. data/lib/spree/api/testing_support/v2/base.rb +1 -1
  93. data/lib/spree/api/testing_support/v2/platform_contexts.rb +214 -0
  94. data/lib/spree/api/testing_support/v2/serializers_params.rb +14 -0
  95. data/lib/spree/api.rb +1 -0
  96. data/spree_api.gemspec +6 -3
  97. metadata +114 -13
  98. data/app/assets/javascripts/spree/api/main.js +0 -36
  99. data/app/assets/javascripts/spree/api/storefront/cart.js +0 -49
@@ -0,0 +1,15 @@
1
+ module Spree
2
+ module Api
3
+ module V2
4
+ module Platform
5
+ class TaxonImageSerializer < BaseSerializer
6
+ include ::Spree::Api::V2::TaxonImageTransformationConcern
7
+
8
+ set_type :taxon_image
9
+
10
+ attributes :alt, :created_at, :updated_at, :original_url
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,38 @@
1
+ module Spree
2
+ module Api
3
+ module V2
4
+ module Platform
5
+ class TaxonSerializer < BaseSerializer
6
+ include ::Spree::Api::V2::ResourceSerializerConcern
7
+
8
+ attributes :pretty_name, :seo_title
9
+
10
+ attribute :is_root do |taxon|
11
+ taxon.root?
12
+ end
13
+
14
+ attribute :is_child do |taxon|
15
+ taxon.child?
16
+ end
17
+
18
+ attribute :is_leaf do |taxon|
19
+ taxon.leaf?
20
+ end
21
+
22
+ belongs_to :parent, record_type: :taxon, serializer: :taxon
23
+ belongs_to :taxonomy, record_type: :taxonomy
24
+
25
+ has_many :children, record_type: :taxon, serializer: :taxon
26
+ has_many :products, record_type: :product,
27
+ if: proc { |_taxon, params| params && params[:include_products] == true }
28
+
29
+ has_one :image,
30
+ object_method_name: :icon,
31
+ id_method_name: :icon_id,
32
+ record_type: :taxon_image,
33
+ serializer: :taxon_image
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,14 @@
1
+ module Spree
2
+ module Api
3
+ module V2
4
+ module Platform
5
+ class TaxonomySerializer < BaseSerializer
6
+ include ::Spree::Api::V2::ResourceSerializerConcern
7
+
8
+ has_many :taxons
9
+ has_one :root, serializer: :taxon
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,37 @@
1
+ module Spree
2
+ module Api
3
+ module V2
4
+ module Platform
5
+ class UserSerializer < BaseSerializer
6
+ set_type :user
7
+
8
+ attributes :email, :created_at, :updated_at
9
+
10
+ attribute :average_order_value do |user, params|
11
+ price_stats(user.report_values_for(:average_order_value, params[:store]))
12
+ end
13
+
14
+ attribute :lifetime_value do |user, params|
15
+ price_stats(user.report_values_for(:lifetime_value, params[:store]))
16
+ end
17
+
18
+ attribute :store_credits do |user, params|
19
+ price_stats(user.available_store_credits(params[:store]))
20
+ end
21
+
22
+ has_one :bill_address,
23
+ record_type: :address,
24
+ serializer: :address
25
+
26
+ has_one :ship_address,
27
+ record_type: :address,
28
+ serializer: :address
29
+
30
+ def self.price_stats(stats)
31
+ stats.map { |value| { currency: value.currency.to_s, amount: value.money.to_s } }
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,57 @@
1
+ module Spree
2
+ module Api
3
+ module V2
4
+ module Platform
5
+ class VariantSerializer < BaseSerializer
6
+ include ::Spree::Api::V2::ResourceSerializerConcern
7
+ include ::Spree::Api::V2::DisplayMoneyHelper
8
+
9
+ attributes :name, :options_text, :total_on_hand
10
+
11
+ attribute :purchasable do |product|
12
+ product.purchasable?
13
+ end
14
+
15
+ attribute :in_stock do |product|
16
+ product.in_stock?
17
+ end
18
+
19
+ attribute :backorderable do |product|
20
+ product.backorderable?
21
+ end
22
+
23
+ attribute :available do |product|
24
+ product.available?
25
+ end
26
+
27
+ attribute :currency do |_product, params|
28
+ params[:currency]
29
+ end
30
+
31
+ attribute :price do |object, params|
32
+ price(object, params[:currency])
33
+ end
34
+
35
+ attribute :display_price do |object, params|
36
+ display_price(object, params[:currency])
37
+ end
38
+
39
+ attribute :compare_at_price do |object, params|
40
+ compare_at_price(object, params[:currency])
41
+ end
42
+
43
+ attribute :display_compare_at_price do |object, params|
44
+ display_compare_at_price(object, params[:currency])
45
+ end
46
+
47
+ belongs_to :product
48
+ belongs_to :tax_category
49
+ has_many :images
50
+ has_many :option_values
51
+ has_many :stock_items
52
+ has_many :stock_locations
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
@@ -1,8 +1,9 @@
1
+ require 'active_support/cache'
2
+
1
3
  module Spree
2
4
  module V2
3
5
  module Storefront
4
- class BaseSerializer
5
- include JSONAPI::Serializer
6
+ class BaseSerializer < ::Spree::Api::V2::BaseSerializer
6
7
  end
7
8
  end
8
9
  end
@@ -0,0 +1,14 @@
1
+ module Spree
2
+ module V2
3
+ module Storefront
4
+ class CmsPageSerializer < BaseSerializer
5
+ set_type :cms_page
6
+
7
+ attributes :title, :content, :locale, :meta_description, :meta_title,
8
+ :slug, :type
9
+
10
+ has_many :cms_sections, serializer: :cms_section
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,28 @@
1
+ module Spree
2
+ module V2
3
+ module Storefront
4
+ class CmsSectionSerializer < BaseSerializer
5
+ set_type :cms_section
6
+
7
+ attributes :name, :content, :settings, :link, :fit, :type, :position
8
+
9
+ Spree::CmsSection::IMAGE_COUNT.each do |count|
10
+ Spree::CmsSection::IMAGE_SIZE.each do |size|
11
+ attribute "img_#{count}_#{size}".to_sym do |section|
12
+ if section.send("image_#{count}").attached? && section.send("img_#{count}_#{size}").present?
13
+ url_helpers = Rails.application.routes.url_helpers
14
+ url_helpers.rails_representation_path(section.send("img_#{count}_#{size}"), only_path: true)
15
+ end
16
+ end
17
+ end
18
+ end
19
+
20
+ attribute :is_fullscreen do |section|
21
+ section.fullscreen?
22
+ end
23
+
24
+ belongs_to :linked_resource, polymorphic: true
25
+ end
26
+ end
27
+ end
28
+ end
@@ -7,16 +7,16 @@ module Spree
7
7
  attributes :iso, :iso3, :iso_name, :name, :states_required,
8
8
  :zipcode_required
9
9
 
10
- attribute :default do |object|
11
- object.default?
10
+ attribute :default do |object, params|
11
+ object.default?(params[:store])
12
12
  end
13
13
 
14
14
  has_many :states, if: proc { |_record, params| params && params[:include_states] }
15
15
 
16
16
  has_many :checkout_zone_applicable_states,
17
17
  serializer: ::Spree::V2::Storefront::StateSerializer,
18
- if: proc { |_record, params| params && params[:current_store].present? } do |object, params|
19
- params[:current_store].states_available_for_checkout(object)
18
+ if: proc { |_record, params| params && params[:store].present? } do |object, params|
19
+ params[:store].states_available_for_checkout(object)
20
20
  end
21
21
  end
22
22
  end
@@ -4,6 +4,8 @@ module Spree
4
4
  class EstimatedShippingRateSerializer < BaseSerializer
5
5
  set_type :shipping_rate
6
6
 
7
+ cache_options store: nil
8
+
7
9
  attributes :name, :selected, :cost, :tax_amount, :shipping_method_id
8
10
 
9
11
  attribute :final_price do |shipping_rate|
@@ -0,0 +1,14 @@
1
+ module Spree
2
+ module V2
3
+ module Storefront
4
+ class IconSerializer < BaseSerializer
5
+ set_type :icon
6
+
7
+ attribute :url do |icon|
8
+ url_helpers = Rails.application.routes.url_helpers
9
+ url_helpers.polymorphic_url(icon.attachment, only_path: true)
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -2,9 +2,11 @@ module Spree
2
2
  module V2
3
3
  module Storefront
4
4
  class ImageSerializer < BaseSerializer
5
+ include ::Spree::Api::V2::ImageTransformationConcern
6
+
5
7
  set_type :image
6
8
 
7
- attributes :viewable_type, :viewable_id, :styles
9
+ attributes :styles, :position, :alt, :original_url
8
10
  end
9
11
  end
10
12
  end
@@ -0,0 +1,43 @@
1
+ module Spree
2
+ module V2
3
+ module Storefront
4
+ class MenuItemSerializer < BaseSerializer
5
+ set_type :menu_item
6
+
7
+ attributes :code, :name, :subtitle, :link, :destination, :item_type, :new_window, :lft, :rgt, :depth
8
+
9
+ attribute :is_container do |menu_item|
10
+ menu_item.container?
11
+ end
12
+
13
+ attribute :is_root do |menu_item|
14
+ menu_item.root?
15
+ end
16
+
17
+ attribute :is_child do |menu_item|
18
+ menu_item.child?
19
+ end
20
+
21
+ attribute :is_leaf do |menu_item|
22
+ menu_item.leaf?
23
+ end
24
+
25
+ has_one :icon,
26
+ object_method_name: :icon,
27
+ id_method_name: :icon_id,
28
+ record_type: :icon,
29
+ serializer: :icon
30
+
31
+ belongs_to :menu, serializer: :menu
32
+ belongs_to :parent, record_type: :menu_item, serializer: :menu_item
33
+ belongs_to :linked_resource, polymorphic: {
34
+ Spree::Cms::Pages::StandardPage => :cms_page,
35
+ Spree::Cms::Pages::FeaturePage => :cms_page,
36
+ Spree::Cms::Pages::Homepage => :cms_page
37
+ }
38
+
39
+ has_many :children, record_type: :menu_item, serializer: :menu_item
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,13 @@
1
+ module Spree
2
+ module V2
3
+ module Storefront
4
+ class MenuSerializer < BaseSerializer
5
+ set_type :menu
6
+
7
+ attributes :name, :location, :locale
8
+
9
+ has_many :menu_items
10
+ end
11
+ end
12
+ end
13
+ end
@@ -5,6 +5,10 @@ module Spree
5
5
  set_type :payment_method
6
6
 
7
7
  attributes :type, :name, :description
8
+
9
+ attribute :preferences do |object|
10
+ object.public_preferences.as_json
11
+ end
8
12
  end
9
13
  end
10
14
  end
@@ -4,7 +4,7 @@ module Spree
4
4
  class ProductPropertySerializer < BaseSerializer
5
5
  set_type :product_property
6
6
 
7
- attribute :value
7
+ attribute :value, :filter_param
8
8
 
9
9
  attribute :name do |product_property|
10
10
  product_property.property_name
@@ -6,7 +6,7 @@ module Spree
6
6
 
7
7
  set_type :product
8
8
 
9
- attributes :name, :description, :available_on, :slug, :meta_description, :meta_keywords, :updated_at
9
+ attributes :name, :description, :available_on, :slug, :meta_description, :meta_keywords, :updated_at, :sku
10
10
 
11
11
  attribute :purchasable do |product|
12
12
  product.purchasable?
@@ -47,20 +47,29 @@ module Spree
47
47
  has_many :variants
48
48
  has_many :option_types
49
49
  has_many :product_properties
50
- has_many :taxons
50
+
51
+ has_many :taxons, serializer: :taxon, record_type: :taxon do |object, params|
52
+ object.taxons_for_store(params[:store])
53
+ end
51
54
 
52
55
  # all images from all variants
53
56
  has_many :images,
54
- object_method_name: :variant_images,
55
- id_method_name: :variant_image_ids,
56
- record_type: :image,
57
- serializer: :image
58
-
59
- has_one :default_variant,
60
- object_method_name: :default_variant,
61
- id_method_name: :default_variant_id,
62
- record_type: :variant,
63
- serializer: :variant
57
+ object_method_name: :variant_images,
58
+ id_method_name: :variant_image_ids,
59
+ record_type: :image,
60
+ serializer: :image
61
+
62
+ has_one :default_variant,
63
+ object_method_name: :default_variant,
64
+ id_method_name: :default_variant_id,
65
+ record_type: :variant,
66
+ serializer: :variant
67
+
68
+ has_one :primary_variant,
69
+ object_method_name: :master,
70
+ id_method_name: :master_id,
71
+ record_type: :variant,
72
+ serializer: :variant
64
73
  end
65
74
  end
66
75
  end
@@ -8,7 +8,17 @@ module Spree
8
8
  :twitter, :instagram, :default_locale, :customer_support_email, :default_country_id, :description,
9
9
  :address, :contact_phone, :supported_locales
10
10
 
11
+ has_many :menus
12
+ has_many :cms_pages
13
+
11
14
  has_one :default_country, serializer: :country, record_type: :country, id_method_name: :default_country_id
15
+
16
+ attribute :favicon_path do |store|
17
+ if store.favicon_image.attached?
18
+ url_helpers = Rails.application.routes.url_helpers
19
+ url_helpers.rails_representation_path(store.favicon, only_path: true)
20
+ end
21
+ end
12
22
  end
13
23
  end
14
24
  end
@@ -2,9 +2,11 @@ module Spree
2
2
  module V2
3
3
  module Storefront
4
4
  class TaxonImageSerializer < BaseSerializer
5
+ include ::Spree::Api::V2::TaxonImageTransformationConcern
6
+
5
7
  set_type :taxon_image
6
8
 
7
- attributes :viewable_type, :viewable_id, :styles
9
+ attributes :styles, :alt, :original_url
8
10
  end
9
11
  end
10
12
  end